はじめに
個人開発でAPIを2つ運用しています。
- ReverseGeoJP:緯度経度⇔住所(町丁目)の変換API
- ChibanJP:緯度経度から「地番」を調べるAPI(今回リリース)
今回は、ChibanJPを作るに至った経緯と、法務省が無償公開している「登記所備付地図データ」を実際にAPIとして提供するまでの技術的な話を書きます。
作ったもの
ChibanJPは、緯度経度を渡すとその地点の「地番」「大字」「市区町村」「測量精度区分」を返すAPIです。
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.chibanjp.com/parcel?lat=35.659094208&lon=139.703016454"
{
"chiban": "21-47",
"oaza": "渋谷",
"city": "渋谷区",
"precision": "甲一",
"representative_point": { "lat": 35.659094208, "lon": 139.703016454 },
"dataset_version": "v1"
}
現在は東京都・大阪府・北海道・愛知県・神奈川県・兵庫県・福岡県・長野県の8都道府県、約2,000万筆に対応しています。
なぜ作ったか
「住所→地番変換」自体は目新しいニーズではなく、既に対価を払う業者が存在します。
| サービス | 価格 |
|---|---|
| ナビット「住所→地番変換」 | 1件¥360(税別) |
| JTNマップ(ブルーマップ配信) | 一時利用638円/件(税込) |
| ゼンリン ブルーマップ(紙) | 1冊 約1.7万〜7万円 |
一方で、法務省は2023年に「登記所備付地図データ(公図)」を政府標準利用規約のもとで無償公開しています。商用利用・API提供も許諾されている一次資料です。
無償公開後も上記のような対価が発生し続けているのは、データそのものではなく「使える形に加工して、必要な粒度で、すぐ買える形にする」ことに価値があるからだと考えました。実際、同種の機能を持つ既存サービス(NTTインフラネット「ちばんAPI」等)も、法人パッケージ契約経由でしか提供されておらず、「クレジットカードで今すぐ、月数千円から」買える窓口が存在しませんでした。この隙間を埋めてみようと思ったのがきっかけです。
技術的な話
データソース
法務省の登記所備付地図データは、法務局ごとに個別ダウンロード・都度利用規約同意が必要な配布形式で、47都道府県・1,700以上の市区町村分を手動で集めるのは非現実的でした。そこで、農研機構(NARO)が都道府県単位でFlatGeobuf形式に変換・結合して配布しているデータを採用しました。
グリッド分割によるPoint-in-Polygon検索
各筆はポリゴン(多角形)として記録されているため、「この緯度経度はどの筆に含まれるか」を判定するにはPoint-in-Polygon計算が必要です。全筆を毎回線形探索すると都道府県単位で数百万件になり非現実的なので、緯度経度そのものから機械的に計算できる**格子(グリッド)**でデータを分割し、R2オブジェクトのキーとして使う方式にしました。
行政区画コード(市区町村コード)でのデータ分割も検討しましたが、地番データと行政区画データは別々の省庁が別々のタイミングで更新するため、市町村合併等で片方だけ新コードに切り替わり不整合が起きるリスクがあると判断し、不採用にしました。緯度経度から直接計算できるグリッド方式は、この種の不整合が原理的に発生しません。
グリッドサイズは0.05度から始め、実測しながら0.006度まで細分化しました。理由の一つは、このプロジェクトのCloudflareアカウントがWorkers無料プランだったことです。(わたしお金ないんです)デプロイ時に判明したのですが、無料プランはCPU時間が10ms固定で、有料プラン専用のcpu_ms上限設定自体がエラーになります。0.006度グリッドは、最悪ケースでも1回のリクエストが約8.9msのCPU時間に収まるよう実測ベースで決めた値です。
認証・課金基盤の共有
ChibanJPはReverseGeoJPと同じCloudflare D1データベース・同じAPIキーを使います(アカウント登録・ログインはReverseGeoJP側で行う設計)。一方で、料金プラン・利用量集計のテーブルは完全に分離しています。理由は、料金体系がプロダクトごとに異なるため、同じテーブルに共存させる必要性がなく、分離した方がシンプルだったからです。共通化できる認証・クォータ判定ロジック自体はshared-worker-billingという内部npmパッケージに切り出し、テーブル名を注入する形で両プロダクトから参照しています。
料金
| プラン | 料金 | 上限 |
|---|---|---|
| Free | ¥0 | 月100件 |
| Dev | ¥2,980/月 | 月3,000件 |
| Pro | ¥9,800/月 | 月20,000件 |
| Business | ¥29,800/月 | 月100,000件 |
クレジットカードで即日申し込み可能です。
おわりに
対応地域はまだ8都道府県ですが、需要に応じて拡大予定です。フィードバックや対応してほしい地域のリクエストがあれば、ぜひコメントで教えてください。
- ChibanJP: https://chibanjp.com
- ReverseGeoJP: https://reversegeojp.com