3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rubyで緯度経度から市区町村と行政区取れる gem を作ってみた

Last updated at Posted at 2025-12-18

アドベントカレンダー 2025

Livesense Advent Calendar 2025 DAY 18 の記事です。
普段はマッハバイトの開発を行ってます。

逆ジオならGoogleやYahooのAPIで十分では

緯度経度から市区町村名などを特定する作業のことを逆ジオと表現する様です。
GoogleのAPIやYahooで提供されているAPIを利用すれば簡単に市区町村名が取得できます。

個人利用の場合は無料であり、特に困ることもなく快適に利用できると思います。

商用利用したい

企業として開発をしている手前、商用利用が前提となり無料で使うことができません

また、ユーザーの位置情報を外部サービスに送信する関係で法務チェック周りも必要で色々確認されたり、取引先チェックなども必要になってくるのが常ですよね。

金額の壁

ここ迄であれば、法務チェックなどを通して普通にお金を払って利用するのが間違いなく得策であるので、大体の企業の場合はそのフローを踏むと思われます。

ただ、1リクエストあたりで稼げるお金が少ないサービスの場合、APIがいくら安くても量が増えると問題になってきます。

すでに開発されてる gem はないだろうか

ぱっと見当たらなかった(あったらごめんなさい)のですがjsで作られている方々は発見できました

上記のライブラリでABテスト実施してみたところ、いい感じに動作。

逆ジオ実装の動作原理(ざっくり)

動作原理のスライドはこちら

  • 日本をマス目上に分割する(タイルデータ)
  • 緯度経度からどのマスか特定、該当タイルデータをダウンロード
  • 判定ロジックを用いて、具体的にどこにいるのか特定する

意外と簡単に実装できそうだなぁ(AIを使えば)

車輪の再開発でしかありませんが、動作原理がそこまで難しくないので
自分たちで作れそうだなぁ(AIを使えば)と感じたので、とりあえずお願いしてみました

工数:1日以下であれば確保できそうだったので、目標を1日に設定しました。

AIへの依頼

  • jsのライブラリのURLを渡し
  • 大体こういうロジックで動いてると思うから gem にしておいて!
  • 1時間後:完成しました

外部のAPIを一切使わず、緯度経度から市町村名を取得できそうな何かが完成しました。
1時間でした、それらをちょっと手直ししたものがこちらです。

動作原理のスライドも実は Claude 4.5 Opus さんが作ってくれてます
リポジトリを提供して中学生くらいで理解できる感じでと伝えてこうなりました。

image.png

元のライブラリからの変更点

元のライブラリは国が配布しているデータを少々加工して利用している様でした。
毎年国が配布してくれているデータの形式に合わせたいと思い、その部分だけ変更を加えてます。

国が用意しているデータをダウンロードしてきて、リポジトリに含まれているスクリプトを実行することでタイルデータを生成できます。

国土交通省の最新行政区域データ

全国にチェックを入れてダウンロード、リポジトリのディレクトリに配置してスクリプト実行するとタイルデータが完成するのでそれをS3などにアップロードするとそのまま利用できます。

image.png

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?