全ホテルが赤道近くに引っ越した日
📌 記事の取り扱いについて(公開当時の内容を含みます — タップで詳細)
本記事は公開当時の体験・気づきをまとめたものです。現在のツール数・プラン数・対象年齢・記事数・仕様とは異なる場合があります。最新の内容は各ツールページをご確認ください。ツールや外部サービスの仕様・料金は変更されることがあるため、利用前には各公式情報も併せてご確認ください。記載に誤りを見つけられた場合はお問い合わせフォームよりご連絡いただけると助かります。
私が作っているホテル検索ツールには、ホテルの場所を地図に表示する機能があります。今年の春、その地図が一晩でとんでもないことになりました。日本全国にあるはずのホテルが、地図をどれだけ探しても見つからない。ズームアウトしてようやく見つけたと思ったら、全ホテルが赤道の近くに集まっていた のです。
日本のホテルが、まとめて南の海へ引っ越していました。もちろん、引っ越したのはホテルではなく、私のデータの方です。
そもそも何をしようとしていたのか
発端は「地図のピンが微妙にズレているホテルがある」という問題でした。ホテルの座標データは予約サイト経由で受け取ったものを使っているのですが、中には実際の場所と数キロ離れた地点を指しているものが混ざっていることが分かってきたのです。
そこで、地図サービス(Google)の力を借りて、住所から座標を取り直すことにしました。取り直した座標をデータベースに書き込めば、ピンのズレが直るはず。作業自体はAIに手伝ってもらいながら進めて、処理も順調に終わりました。画面に流れるログを眺めながら、「これで地図がきれいになるぞ」と、このときの私はけっこう上機嫌だったのです。ここまでは何の問題もなかった、ように見えました。
地図を開いたら誰もいなかった
書き込みを終えて、確認のためにツールの地図を開きました。すると、いつもならホテルのピンでにぎやかなはずの日本列島に、ピンが一つもありません。
最初はデータが消えたのかと思って血の気が引きました。ところが件数を数えてみると、データ自体はちゃんと残っています。あるのに、見えない。地図をぐっと引いて世界全体を表示してみたら、ようやく見つかりました。日本のはるか南、赤道のすぐ近くに、ピンの群れがひっそりと集まっていたのです。
数万軒のホテルが一夜にして南の海の上へ移動している光景は、笑っていいのか青ざめるべきなのか、正直よく分からない眺めでした。
犯人は「単位」の思い込みだった
調べてみると、原因はデータの「単位」にありました。
座標というと、私は「緯度35度、経度139度」のような「度」の数字を思い浮かべます。ところが手元のデータベースは、元になった予約サイトのデータ形式の名残で、座標を度ではなく、度を3,600倍した「秒」という単位 で保存していたのです。1度は3,600秒。だから東京あたりの緯度なら、35ではなく12万いくつという大きな数字が入っています。
一方、地図サービスから取り直した座標は、ごく普通の「度」でした。それを、3,600倍されている前提の場所へそのまま書き込んだので、ツール側から見ると値が3,600分の1に縮んだのと同じことになります。緯度35度のつもりが、0.01度くらいとして扱われる。緯度0度は赤道ですから、全ホテルが赤道付近に集まったのは、むしろ理屈どおりの結果だったわけです。
種明かしをされれば単純な話です。でも作業している最中の私は、「座標は度で書くもの」と思い込んでいて、自分のデータベースが別の単位で持っているなんて考えもしませんでした。何ヶ月も一緒にやってきた自分のデータなのに、中身の数字をまじまじと見たことがなかった、とも言えます。
バックアップがあって本当に助かった
幸い、書き込みの前にデータベースのバックアップを取ってありました。まずそこから元の状態に復元して、ホテルたちには日本へ帰ってきてもらいました。
その上で、今度は取り直した座標を3,600倍してから書き込む変換を挟んで、再度適用しました。これでピンのズレ修正という当初の目的も無事に果たせて、ホテルは正しい場所に、しかも前より正確に表示されるようになりました。
もしバックアップがなかったらと考えると、今でも少し怖くなります。数万軒分の座標を手作業で直すのは現実的ではないので、データを取り直すところからやり直しになっていたはずです。「書き換える前に控えを取る」という地味な習慣が、これほどありがたく感じられた日はありませんでした。
数字は合っていても、単位が違えば別物
この一件から学んだのは、データの「単位」を思い込みで扱うと大事故になる ということです。
数字そのものはどちらも正しい座標でした。度で見ても秒で見ても、指している場所は同じです。それでも、単位の前提が食い違ったまま混ぜた瞬間に、データはまとめて壊れます。エラーも警告も出ません。数字としてはどちらも「あり得る値」なので、機械は何も疑わずに受け入れてしまうのです。
以来、外から持ってきたデータを既存のデータベースに書き込むときは、「この数字の単位は何か」「今あるデータと同じ形式か」を先に見比べるようになりました。あわせて、書き込む前のバックアップも欠かさないようにしています。
非エンジニアの私にとって、こういう教訓は本で読むより、一度盛大にやらかす方が体に染みます。赤道に並んだピンの群れは、その授業料としては安かったのかもしれません。二度と見たくはないですけれど。
← 他の制作記を見る | トップ | お問い合わせ