【マイレース開発記録(9)】
47都道府県の緯度経度実装                       

マイレースには、いくつかの入力項目があります。

  • 生年月日
  • 出生時間
  • 出生地(都道府県)
  • 眺めたい日(占いたい日)

この中で、少し悩んだのが
「出生地」でした。

最初は、
「本当に入れる必要があるかな?」
と迷っていました。

というのも、画面では「東京都」「大阪府」のように
文字で選べても、
天体計算をするときには、
最終的に緯度と経度が必要になるからです。

しかも、都道府県は47あります。

入力しやすさは残したい。
でも、計算に使える形にもしたい。

この間をどうつなぐかが、
今回のテーマになりました。

最初は、

  • 「もっと正確な位置情報にした方がいいのかな」
  • 「市区町村まで入力できた方がいいのかな」

と、いろいろ考えていました。

でも、考えれば考えるほど
決められなくなってしまいます。

そこで、いったん目的を整理しました。

マイレースで今必要なのは、
精密な地図を作ることではありません。

大切なのは、

「出生地を選べる」という体験を残しながら、
バックエンド側できちんと計算できる形にすること

です。

そこで、まずは、

都道府県 → 代表地点の緯度・経度

という形で進めることにしました。

最初から100点を目指すのではなく、
あとから直せる形で、まず動かしてみる。

この考え方にしたことで、
かなり気持ちが楽になりました。

次に考えたのは、
47都道府県の緯度・経度を、どこに置いておくか
ということでした。

今回は、都道府県ごとの代表地点の情報を、
ひとつのファイルにまとめて持つ形にしました。

イメージとしては、

  • 東京都 → 東京都の代表地点
  • 大阪府 → 大阪府の代表地点
  • 北海道 → 北海道の代表地点

という対応表を作る感じです。

こうしておくと、

  • データの場所が分かりやすい
  • 修正したいときに探しやすい
  • 後から別の形式に置き換えやすい

というメリットがあります。

47個なら、最初の段階では
十分管理できる数です。

ここでも、
「今の自分が扱いやすい形にする」
ことを優先しました。

出生地の入力では、
自由に文字を入力してもらう方法もあります。

でも今回は、
都道府県を一覧から選ぶ形にしました。

その方が、

  • 「大阪」と「大阪府」のような表記ゆれが起きない
  • 誤字が減る
  • 入力チェックがしやすい
  • ユーザーも迷いにくい

というメリットがあります。

これは自分自身にとっても大切でした。

自由入力が多いと、
「この書き方で大丈夫かな?」
「どこまで入力すればいいんだろう?」
と迷う場面が増えてしまいます。

でも、選択肢があらかじめ用意されていれば、
迷うことが少なくなります。

人の注意力だけに頼るのではなく、
仕組みそのものを分かりやすくする。

この考え方は、
前回のバリデーションにもつながっています。

画面で都道府県を選べるようにしても、
それだけで安心というわけではありません。

そこで、サーバー側でも、
「この都道府県は、登録されているものかな?」
と確認するようにしました。

もし、存在しない値が送られてきた場合は、
そのまま計算に進まず、エラーにします。

一見すると地味な処理ですが、
こういうチェックが後から役立ちます。

例えば、

  • 画面側の表示が変わったとき
  • JavaScript側で想定外の値が送られたとき
  • 将来、入力方法を変更したとき

でも、サーバー側で最後に確認できます。

前回も書きましたが、
APIが最後の確認役になるという考え方です。

今回、技術そのものよりも難しかったのは、
どの方法を選ぶか決めることでした。

考えていると、次々に別の案が浮かびます。

  • CSVにした方がいい?
  • 外部APIを使った方がいい?
  • 市区町村まで選べる方がいい?
  • 住所を入力して自動変換した方が正確?

どれも間違いではありません。

でも、全部を比較し続けていると、
いつまでたっても作り始められません。

私はこういうとき、
「もっと良いやり方がある気がする」
と考えすぎて、手が止まってしまうことがあります。

今回も、少しその状態になりました。

そこで、AIと話しながら、

  • 今の段階で、どのくらいの精度が必要?
  • 今すぐ市区町村まで必要?
  • 後からデータを入れ替えることはできる?
  • まず都道府県単位で進めても問題ない?

と、一つずつ整理していきました。

すると、

「今すぐ必要なもの」と
「将来できたらいいもの」を分けて考える

ことができるようになりました。

例えば、今は

都道府県を選ぶ
↓
代表地点の緯度・経度を使う

という形で十分。

もし将来、もっと細かくしたくなったら、

  • 市区町村対応
  • 外部API
  • 住所検索

などを追加すればいい。

そう考えると、
かなり前に進みやすくなりました。

今回も、AIが代わりに全部を作ったというより、
迷っているところを整理する相手として
助けてもらった感じです。

私は、選択肢が増えるほど、
「どれが一番正しいんだろう」
と考えすぎてしまうことがあります。

でも開発では、
いつも唯一の正解があるわけではありません。

大切なのは、

  • 今の目的に合っているか
  • あとで直せる形になっているか

ということなのだと思います。

そう考えられるようになってから、
「まずはこの方法で進めてみよう」と
決めやすくなりました。

今回の設計で、もうひとつ大きかったのが、
あとから変更できる形にしておく
という考え方です。

最初に完璧な緯度・経度データを作れなくても、
ひとつの場所にまとめておけば、
後から差し替えられます。

これはかなり安心感がありました。

「今決めたことが、ずっと最終決定ではない」
と思えると、
最初の一歩を踏み出しやすくなります。

開発では、

変えないことより、
変えやすくしておくこと

も大切なのかもしれません。

今回の47都道府県の実装では、
派手な新機能が増えたわけではありません。

でも、

  • 入力しやすくする
  • データを整理する
  • サーバー側でも確認する
  • 後から変更しやすくする

という、アプリを長く育てるための考え方を
学べました。

そして何より、

最初から全部を完璧に決めなくてもいい

ということを、またひとつ実感しました。

迷ったときは、
今の段階で必要なことは何か
に戻る。

この考え方は、
これからの開発でも使っていきたいと思います。

【マイレース開発記録(9)】
【マイレース開発記録(9)】図解

次回は、マイレースの中でも、
少し「占いらしさ」が見えてくる部分です。

レース結果に合わせて表示するメッセージを、
毎回ランダムに変えるのではなく、

「同じ条件なら、同じ結果になる」

ようにしたい。

そのために使ったのが、
seed(シード)とハッシュ
という仕組みでした。

次の記事では、

【マイレース開発記録(10)】seedによるメッセージ固定化
――「占いの一貫性」を作る――

として、
「ランダムっぽく見えるけれど、実はちゃんと決まっている」
仕組みをどう作ったのかを書いていきます。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です