https://github.com/ttskch/jp-postal-code-api
日本の郵便番号から住所のデータを取得できるWeb APIです。
GitHub Pagesを使用して静的なJSONファイルとして配信している ため、可用性が高いのが特徴です。また、オープンソースなのでクライアントワークでも安心してご使用いただけます。もしリポジトリの永続性やGitHub Pagesの利用制限 が心配な場合は、ご自由にフォークしてご利用ください。
日本郵便によって公開されているデータ を元に住所データのJSONファイルを生成して配信しています。JSONファイルには日本語表記・カナ表記・英語表記の住所データが含まれています。ただし、以下の注意事項があります。
なお、配信データはGitHub Actionsを使用して毎日最新の内容に更新しています。
このプロジェクトの実装はmadefor/postal-code-api にインスピレーションを受けています。長期間メンテナンスが行われていない同プロジェクトに代わるものとして、モダンPHPで再実装しました。オリジナルのソースコードに最大の敬意を表します。
https://jp-postal-code-api.ttskch.com/api/v1/{郵便番号}.jsonというエンドポイントにGETリクエストを送ると、住所のデータがJSON形式で取得できます。
例えば、郵便番号が100-0014 の住所(東京都千代田区永田町)を取得したい場合は、エンドポイントのURLとレスポンスの内容は以下のようになります。
https://jp-postal-code-api.ttskch.com/api/v1/1000014.json
{"postalCode":"1000014","addresses":[{"prefectureCode":"13","ja":{"prefecture":"東京都","address1":"千代田区","address2":"永田町","address3":"","address4":""},"kana":{"prefecture":"トウキョウト","address1":"チヨダク","address2":"ナガタチョウ","address3":"","address4":""},"en":{"prefecture":"Tokyo","address1":"Chiyoda-ku","address2":"Nagatacho ","address3":"","address4":""}}]}1つの郵便番号に複数の住所がある場合は、レスポンスの内容は以下のようになります。
https://jp-postal-code-api.ttskch.com/api/v1/6180000.json
{"postalCode":"6180000","addresses":[{"prefectureCode":"26","ja":{"prefecture":"京都府","address1":"乙訓郡大山崎町","address2":"","address3":"","address4":""},"kana":{"prefecture":"キョウトフ","address1":"オトクニグンオオヤマザキチョウ","address2":"","address3":"","address4":""},"en":{"prefecture":"Kyoto","address1":"Oyamazaki-cho, Otokuni-gun","address2":"","address3":"","address4":""}},{"prefectureCode":"27","ja":{"prefecture":"大阪府","address1":"三島郡島本町","address2":"","address3":"","address4":""},"kana":{"prefecture":"オオサカフ","address1":"ミシマグンシマモトチョウ","address2":"","address3":"","address4":""},"en":{"prefecture":"Osaka","address1":"Shimamoto-cho, Mishima-gun","address2":"","address3":"","address4":""}}]}大口事業所個別番号では英語表記の住所は空になります。
https://jp-postal-code-api.ttskch.com/api/v1/1008111.json
{"postalCode":"1008111","addresses":[{"prefectureCode":"13","ja":{"prefecture":"東京都","address1":"千代田区","address2":"千代田","address3":"1−1","address4":"宮内庁"},"kana":{"prefecture":"","address1":"","address2":"","address3":"","address4":"クナイチヨウ"},"en":{"prefecture":"","address1":"","address2":"","address3":"","address4":""}}]}2024年1月1日に市町村変更があった住所 を取得すると、2024年5月現在では英語表記は出力されません。元データ が更新されると、このWeb APIの配信データも最大1日の誤差で自動的に更新されます。
https://jp-postal-code-api.ttskch.com/api/v1/4328003.json
{"postalCode":"4328003","addresses":[{"prefectureCode":"22","ja":{"prefecture":"静岡県","address1":"浜松市中央区","address2":"和地山","address3":"","address4":""},"kana":{"prefecture":"シズオカケン","address1":"ハママツシチュウオウク","address2":"ワジヤマ","address3":"","address4":""},"en":{"prefecture":"","address1":"","address2":"","address3":"","address4":""}}]}/docs/api/v1/ 配下に生成という処理をPHPで行っています。
symfony/console でCLIコマンドとして実装してあり、プロジェクトルートディレクトリでbin/console build というコマンドを実行することで一連の処理を開始することができます。
上記のように、GitHub ActionsのScheduled Workflowを使って毎日午前0時頃に自動的に/docs/api/v1/ の内容を最新化しています。
ただし、GitHub Actionsのドキュメントにあるとおり、60日間リポジトリにアクティビティがなかった場合、Scheduled Workflowは自動的に無効化されてしまうため、
という方法でWorkflowの自動的な無効化を回避しています(ごめんなさい)。
Workflowの有効化はAPI経由でも行える ので、自動的に無効になったらAPI経由で再度有効化する、みたいな対応も考えられましたが、GitHub Actionsだけで完結できたほうが嬉しいのでこのような方法をとりました。
2024年5月現在、GitHub Pagesで公開したサイトには月当たり100GBの帯域制限 があります。このWeb APIの配信データの容量は平均およそ400バイトなので、毎秒104リクエスト程度のペースが1ヶ月間継続すると制限の対象となる可能性があります。
もしこの制限が心配な場合は、本リポジトリをフォークしてご自身のGitHubアカウントでホストしてご利用ください。その場合、エンドポイントのURLは
https://{あなたのGitHubユーザー名}.github.io/jp-postal-code-api/api/v1/{郵便番号}.jsonのようになります。
ただし、それでも悪意ある攻撃者によって大量のリクエストが行われると利用制限の対象になる可能性があります。どうしても心配な場合は、フォークしたリポジトリをCloudflare Pages などの多機能なホスティングサービスやその他PaaSなどに接続して、BASIC認証などをかけた状態でWeb APIをホストするといった運用を検討してください。
今までmadefor/postal-code-api をありがたく使わせていただいていたのですが、配信データの自動更新が3年以上止まったままになってしまっており、2024/01/01にあった浜松市の市町村変更 が取り込まれていなかったために直近のクライアントワークで問題が発生してしまいました。
初めはビルド周りを修正してPull Requestを送ろうと思ったのですが、既存のPull Requestが放置されていたり、実質的に開発が停止してしまっているようにお見受けしたため、むしろ自分がメンテしやすい技術スタックで作り直して長期的にホストし続けるほうが全体の幸福度が高いかなと思い、あえて再実装することにしました。
郵便番号を入力したら自動で住所が補完されるフォームの実装とかで気軽に使っていただけたら嬉しいです。
https://github.com/ttskch/jp-postal-code-api
IssueやPull Requestはいつでも大歓迎です。あと、これは大事なことですが、リポジトリにStarを付けていただけると私のモチベーションが上がります ので、よろしければ是非お願いします😋
バッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。
ライセンスは問題ないですか?
当社に事前の承諾を受けた場合を除いて、私的使用その他法律によって明示的に認められる範囲を超えてコンテンツなどやそれらに包含される内容(一部か全部かを問いません。)を複製・改変・公開・送信・頒布・譲渡・貸与・使用許諾・転載・再利用することはできません。
使用・再配布・移植・改良について
郵便番号データに限っては日本郵便株式会社は著作権を主張しません。自由に配布していただいて結構です。
とあるので大丈夫そうな気もしますが。別の箇所ならすみません。
郵便番号データの説明
ありがたいです!
1点気づいたのですが、現在のURLは/v1/が必要かと思いますので、zenn記事内のURLを修正した方がよいかもしれません。(現在404になっています)
https://jp-postal-code-api.ttskch.com/api/v1/1008111.json