【マイレース開発記録(9)】47都道府県の緯度経度実装
「出生地」を入れたい。でも、どう扱う?
マイレースは、入力項目に「出生地(都道府県)」があります。
- 生年月日
- 出生時間
- 出生地(都道府県)
- 眺めたい日(占いたい日)
このうち「出生地」は、最初は正直、入れるか迷いました。
理由はシンプルで、扱いが難しいからです。
- 都道府県は“文字”でしかない
- 天体計算や占星術の計算側では、最終的に 緯度経度 が必要になる
- しかも47個ある
- UI側の入力の手軽さも捨てたくない
「出生地を入力させたい」と「実装できる形にしたい」の間に、深い谷がありました。
目標は「精密な地図」ではなく「破綻しない設計」
ここで、私はいったん方針を決めました。
マイレースは医療でも測量でもありません。
求めたいのは、厳密な緯度経度そのものではなく、
“出生地を選べる”という体験を崩さず、
バックエンド側で破綻しない形に落とし込むこと
です。
つまり、最初から100点を狙わない。
- まずは「都道府県 → 代表地点の緯度経度」を持つ
- 後から差し替えられる設計にする
- 入力UIは簡単にする(都道府県のプルダウン)
この決断で、前に進めるようになりました。
prefectures.py を作る:まずは“持っておく”
私は prefectures.py を切り出し、ここに辞書でデータを持たせました。
都道府県名をキーにして、県庁所在地(代表都市)の緯度経度を値にする。
例:
- 東京都 → (35.6895, 139.6917)
- 大阪府 → (34.6937, 135.5023)
この方式にした理由は、作業が一気に現実的になるからです。
- 47個なら“人力でも”作れる
- データが1ファイルにまとまる
- 後でCSVやAPIに置き換えることも可能
「今はまず動く形を作る」
ここをAIと一緒に割り切れたのが、今回の大きな前進でした。
UI側は「選びやすさ」を優先
HTMLでは都道府県を <select> で選べるようにしました。
テンプレート(Jinja)で prefectures を回して選択肢を出す方式です。
これにより、
- 入力ミス(誤字)が起きない
- バリデーションが簡単になる
- 画面が直感的になる
というメリットが一気に手に入ります。
発達特性がある自分にとって、
「自由入力を減らす」設計は、実はかなり重要です。
人は意志でミスをゼロにできないけれど、
仕組みで“ミスが起きにくい形”にはできます。
バックエンドでのチェック:ここで守る
Flask側では、受け取った都道府県が辞書に存在するかを必ず確認しています。
「存在しない出生地」が入ってきたら、即エラーを返す。
これは地味ですが、後々効いてきます。
- フロントの表示が崩れたとき
- JavaScript側で空値が送られたとき
- 将来、入力UIを変えたとき
こういう時に、APIが最後の砦になるからです。
“AI活用”で変わったのは、実装より「迷いの処理」
この回で私が一番助けられたのは、
「緯度経度のデータをどう持つか」を考える場面でした。
私は、仕様が曖昧なままだと固まってしまう傾向があります。
- もっと良い方法がある気がする
- ちゃんとやらなきゃいけない気がする
- でも決められない
- 手が止まる
昔は、この状態が続くと焦って疲れ、
「自分は向いていない」と思ってしまいました。
でも今は、AIとの対話で、こう整理できました。
- 今の段階で必要な精度は?
- 代替案は?(CSV、外部API、住所入力…)
- “後で差し替え可能”な設計にできる?
- まずは動く形で進めても問題ない?
結果として、私は“最適解探しの沼”から抜けられました。
AIが代わりに実装してくれたというより、
止まりかけた思考を、前に戻してくれた感覚です。
次回予告
次回は、マイレースの中でも「占いっぽさ」を支える部分です。
ゾーン(追い風/慎重/楽しさ/整える)ごとのメッセージを、
ランダムではなく “同じ条件なら同じ結果になる” ように固定する。
そのために導入したのが、seedとハッシュです。
次の記事では、
【マイレース開発記録(10)】seedによるメッセージ固定化
――「占いの一貫性」を作る――
で書いていきます。


