たゆたふ。

定まる所なく揺れ動き、いろいろやってみたメモ。など

Googleスプレッドシートのアドオンをリリースした。

Google スプレッドシートのアドオン Address2Geocode というのを作ってリリースした話。

これはなに?

Google スプレッドシート上の日本の住所に緯度経度を付加できるアドオン。住所の一覧にバッチで処理もできる。住所を記載したセルやカラムを選択し、変換ボタンをクリックすると、住所の右側のセルに緯度と経度を書き込む。 住所のあるデータを地図にマッピングするときに緯度・経度を求めるのに便利(だと思う)。 ただし、精度は番地レベル(ちなみに Google Maps などは号レベルで更に精度が高い)。

きっかけは熊本地震

減災インフォという Web サイトの運営に参加しており、地震などの自然災害は起こった際には情報を収集して再発信している。2016年4月14日の熊本地震以降も、活動している。 熊本地震で回ってきたデータのうち、200 ヶ所以上の避難所の住所の一覧というものがあった。添えられた依頼は「Geocoding API - 住所から緯度経度を検索」というサイトを利用して、緯度経度をつけてほしいとの事だった。できたデータは減災インフォで地図にマッピングしたり、他に活動している人たちに配って活用してもらおうというのが目的だった。 数カ所なら手作業したかもしれないが、200 ヶ所以上は流石に辛いと思い Google Maps API を利用したスプレッドシートのカスタム関数を作って対応した。 しかし、次のような問題があった。

  1. Google スプレッドシートはちょっと操作すると関数の再計算が走るのですぐに Maps API のリミットに達してしまう
  2. APIの規約で Maps API により得たデータは Google Maps 以外で利用するのは NG
  3. カスタム関数だと別のスプレッドシートで使いたい場合にコードをコピー&ペーストして移植する必要がある。つまり配布しにくい

Google Maps API以外への変更

上記の 1,2 の理由により、Google Maps API は使えないなぁという結論に至った。1.は関数にせず、バッチ処理に変更するなどすれば回数のコントロールは可能だろうが、2 の制約のために作ったデータの利用に制限ができるのは嬉しくない。乗換先としては Yahoo!ジオコーダAPI も考えたが、「API経由で取得したデータを保存したり、二次利用することはできません。」との事なのでやはり NG。 色々探してみて、利用についてほぼ制限がなさそうな CSISシンプルジオコーディング実験 の提供する API を利用に乗り換えることとした。

カスタム関数からアドオンへ

カスタム関数だと上記の 1 で挙げたように外部の API を無駄にコールして、不要な負荷になりかねないし、3 で挙げたように配布にしにくい。 熊本地震でもまだ同様の作業が必要になるかも知れないし、今後発生する災害時にも必要になるかも知れない。せっかく作ったのだから利用しやすい形にしたい。ということで、スプレッドシートのアドオンサイトからすぐにインストールして使えるように最初に作った関数を基にアドオンを作って公開しすることとした。

はじめはナメてた

アドオン自体の実装はそれほど難しいものではなく、HTML と JavaScript で作ることができる。見栄えをそれらしくできる CSS も提供されている。 きっと Android アプリ同様に登録すればとりあえず公開されるのだろうと思いさくっと作って、登録してみた。

登録直後はレビュー待ちのステータスになった。すぐに公開状態になるのかと思いきや、一向に変わらない。 数日後、リジェクトされ、その理由がメールで送られてきた。

メールには Google Doc が添付されていて、不具合と UX の改善提案が記載されていた。エラーの画面キャプチャも貼り付けられており、思っていた以上に丁寧にレビューされていた。

指摘事項は次の項目

  1. 処理でエラーが発生し、しかもエラーハンドリングされておらず、組み込みエラーダイアログが表示されている
  2. 変換した緯度・経度を出力するカラムをユーザがわざわざ指定する必要があるのは使いづらい
  3. 処理終了を知らせるのにアラートでなくトーストを使っては? そうすればユーザは閉じるボタンを押す必要がない。
  4. ユーザを待たせる時間があるならローディングイメージを表示したほうがよい。

1.について、確かにエラー処理については自分でも足りないだろうなと思っていた部分だった。でも、地震発生時でニーズがある時にまずリリースしてそれから改善していこう思っていた。そんな甘く考えていた部分を的確に指摘されたのだった。利用していた API が日本語で住所を送らないと該当なしの空レスポンスではなく、サーバーエラー(500)を返してくるのも確認不足だった。

2,3,4 は不具合ではなく、うーんなかなか的確だなぁと思う改善の提案。 2.については、選択範囲のすぐ右のカラムが空ならば緯度経度を書き込む様に変更した。ただ、緯度経度を書き込む位置は自分で指定したいと日本人マインド的に思う人も結構いるのではと、指定できるようにもした。 3.で提案されたトーストについてはそんな機能があるとは知らなかった。変更してみると確かにトーストのほうが格好いいし便利だなぁと思った。 4 についてはちょっと困った。ぐるぐる廻るイメージを処理中表示しようと思って、フリーな素材はすぐに見つかったが、アドオンには HTML と JS のファイルしか含められない。プロダクトの一部としてイメージを入れることができないのだ。一箇所にまとまっていないと今後のメンテナンス的に面倒だけど、外部画像をアドオン内で表示できそうなので S3 にでも置いてそれを表示しようかと思ったが、画像のサイズがそれほど大きなものでなかったので、base64 変換してコードに含めてみてはどうだろうかと試してみると思った通りに動く。ということでコードに含める実装にした。

再レビュー、再々レビュー

Google の Add-ons Advisor 氏の指摘に沿って修正した後、修正したアドオンの更新の仕方が間違っていて再レビューまでに時間がかかったが、再度評価してもらった。で、またリジェクトされた。 理由は、「うまく動かない」とのこと。どうやらアメリカの住所を試しているらしい。日本語で表記した住所しか変換できないことを伝えたら、次のいずれかの対応を入れようとの返事が来た。

  1. もし日本語以外の入力だったら、日本の住所にしか対応していないことをユーザに示す
  2. 翻訳 API を利用して翻訳してから変換する

結局のところ、翻訳しても日本国内の住所にしか対応できないので、1 を対応して、再々レビューを受けた。 数日後、まだうまく動かないとの返事がきた。今度はきちんと日本語で試していると。 どんな住所を試しているのかと聞いたら次の文字列が返ってきた。

4-2-15銀座、中央区、東京104から0061 、日本

ああ、単に英語表記の住所を機械翻訳にかけただけなのね...。思わず笑ってしまった。それは予想してなかった。 そりゃあ、アメリカ人は普通、日本語の住所表記がアメリカの逆になっているなんて使うべきではない言葉なので修正してくださいんだろうなぁ。 日本語の住所表記はアメリカとは順序が違うんだよと説明して、いくつか住所のサンプルを送った。

そうしたら、動いたよという返事とともにアクセプトされた。

リリース

アクセプトされると公開状態となり、Addon ストアから見えるようになった。 結局、最初の申請からリリースまで半月ほどかかった。

おもったより時間がかかったが、自分の作ったものをしっかり評価して改善提案もしてくれる Docs Add-ons Advisor とのやり取りは楽しかった。