ふくふくHukuhuku LLC
EP.17Open Data 10分公開: 更新:

住所・位置情報データの選び方:郵便番号検索・住所正規化・座標変換を整理する

郵便番号からの住所検索、住所の表記整理、緯度経度への変換を比較。日本郵便・アドレスベースレジストリの用途と、複数候補を安全に扱うサンプルを紹介します。

#住所#郵便番号#geocoding#データ連携
執筆 / 監修
松尾 亮合同会社ふくふく 代表社員

データ基盤・データパイプライン構築 / BI / 生成 AI 活用支援を専門とするエンジニア (28 年)。 本記事は AI 利用ポリシーに基づき、生成 AI の補助で執筆 → 人間が監修・編集して公開しています。

プロフィール詳細
シェア

「住所をきれいにしたい」という要望には、郵便番号から町域を補う、表記をそろえる、地図上の位置を求める、といった別々の処理が含まれます。目的を分けずに一つのへ任せると、候補を誤って確定したり、町域の代表点を建物の入口と誤解したりします。まず必要な出力の細かさを決め、データの選択と確認手順を設計しましょう。

選び方の要点

入力支援には日本郵便の郵便番号データや公式API、町字の表記・識別にはアドレス・ベース・レジストリを検討します。緯度経度の取得は別の要件です。郵便番号だけで番地・建物・配送先まで確定できるとは限りません。

比較から実装の判断まで進められるよう、提供元・入力と出力・保存する情報・確認が必要なケースを共通の順序でまとめています。まず 架空データのサンプル一式をダウンロードして、処理の結果を確かめることもできます。

目的に合うデータを選ぶ

郵便番号による検索は、住所を最初から全部入力する負担を減らす用途に向いています。ただし、一つの郵便番号に複数の町域が対応する場合や、事業所個別番号のように別データで扱うものがあります。最初の候補を無条件に選ぶより、利用者に候補を選んでもらい、番地や建物名を確認する流れにした方が誤登録を見つけやすくなります。

住所の正規化は、全角・半角や空白などの表記をそろえる処理から始められます。しかし、文字を置き換えるだけでは自治体の合併や町名変更を判断できません。町字を扱う基礎情報にはデジタル庁のアドレス・ベース・レジストリが候補になります。公開範囲と整備状況を確認し、建物や部屋まで全国一律に確定できる住所辞書とは区別して利用します。

住所から緯度経度を得るでは、結果がどの粒度の位置かが重要です。都道府県、町域、街区、建物では配送や分析に使える精度が違います。道路の反対側や大きな敷地の中心点が返ることも想定し、用途に応じた許容誤差を決めます。座標を得られたという一点だけを、住所が正しい証拠や配送完了の保証にしないでください。

2026年10月11日確認。詳細な仕様・利用条件は末尾の公式資料を参照。
必要な処理候補利用開始・更新確認すること
郵便番号→町域候補日本郵便の郵便番号CSV公開データをダウンロード。毎月末の更新と差分を確認複数町域、事業所個別番号、例外表記。番地・部屋を自動確定しない
郵便番号・デジタルアドレス→住所日本郵便の公式API利用登録・認証が必要。公式FAQと規約を確認CSV利用とは条件が異なる。大量取得・独自DB化等の可否を確認
町字の識別・表記整理アドレス・ベース・レジストリデジタル庁のデータと仕様を確認町字以下の整備状況、試験公開、対象範囲を確認
住所→緯度経度対象地域と精度に合う変換サービス認証・費用・結果保存条件は提供元ごとに異なる建物・街区・町域のどの代表点かを保存

入力と出力をサンプルで確かめる

架空の郵便番号辞書で、全角・ハイフンの整理と候補数による分岐を試します。000から始まる番号と地名はサンプル専用で、実際の郵便番号データではありません。住所の正規化・座標変換・住所の実在確認をするプログラムではありません。

実行する前に

全て架空データです。Python 3があれば、APIキー・追加ライブラリ・外部通信なしで実行できます。ZIPを展開し、そのフォルダで下のコマンドを実行してください。入力はinput.jsonにあります。結果は画面に出るだけで、自動保存・送信はしません。

展開したフォルダで実行
Bash
python3 example.py# 結果をローカルファイルに保存する場合python3 example.py > result.json
同梱example.pyの全文。入力形式はサンプル専用です。
Python
import jsonimport reimport unicodedatafrom pathlib import Path
# 000から始まる番号・地名は検証専用。郵便番号辞書ではありません。data = json.loads(Path(__file__).with_name("input.json").read_text(encoding="utf-8"))result = []for raw in data["inputs"]:    normalized = unicodedata.normalize("NFKC", raw).strip()    normalized = re.sub(r"[-−‐ー\s]", "", normalized)    valid = bool(re.fullmatch(r"[0-9]{7}", normalized))    candidates = data["postal_candidates"].get(normalized, []) if valid else []    status = "invalid" if not valid else ("not_found" if not candidates else ("ambiguous" if len(candidates) > 1 else "candidate"))    result.append({"input": raw, "postal_code": normalized if valid else None,                   "candidates": candidates, "status": status})print(json.dumps(result, ensure_ascii=False, indent=2))
同梱の架空データを実行した出力
JSON
[  {    "input": "000−0000",    "postal_code": "0000000",    "candidates": [      "架空県サンプル市東町",      "架空県サンプル市西町"    ],    "status": "ambiguous"  },  {    "input": "000-0001",    "postal_code": "0000001",    "candidates": [      "架空県サンプル市南町"    ],    "status": "candidate"  },  {    "input": "9999999",    "postal_code": "9999999",    "candidates": [],    "status": "not_found"  },  {    "input": "abc",    "postal_code": null,    "candidates": [],    "status": "invalid"  }]

出力では、全角の入力を0000000にそろえたうえで二つの候補を返します。状態はambiguousで、確定した住所にはしません。候補が一つの場合もcandidateにとどめ、利用者が番地などを確認する前提です。形式が不正なabcはinvalid、辞書にない9999999はnot_foundになります。未登録を「その住所は存在しない」と説明しないことが大切です。

サンプルで入力と出力の形を確認した後に、本物の郵便番号辞書や公式APIを接続します。その際も、入力原文は変換結果とは別に残します。漢数字、長音、ハイフン、建物名などは一律に削ると意味が変わる場合があります。確認済みの入力を使って正解例と失敗例を作り、誤った候補を自動確定しないことを検証条件に含めます。

何をどこに保存するか

情報本実装での保存先の例残すべき状態
入力された住所アクセス権を設けた顧客マスタ原文を保持。公開ログや解析サービスに送らない
正規化した表記・候補元の住所とは別の列・候補表人が確認済みか、未確定かを記録
緯度経度と位置の粒度サービスの保存条件に沿った領域提供元・取得日時・代表点の種類を記録

日本郵便のダウンロードデータを社内で扱う場合は、対象ファイルを選び、更新の取り込み方法を決めます。郵便番号は数値ではなく文字列として扱い、先頭のゼロを失わないようにします。住所データの更新前後を比較してから切り替えれば、変更の影響を追いやすくなります。APIを使う場合も、同じ情報を無制限に保存・再配布できるとは想定せず、個別の規約を確認します。

デジタルアドレスは従来の郵便番号と同じ仕組みではありません。どの種類のコードを入力として受け付けるのか、登録された住所の変化をどう扱うのかを、利用する公式APIの現行仕様で確認します。住所の入力支援を目的とする段階で、電話番号、氏名、購買履歴まで外部に送る必要は通常ありません。目的に必要な項目を絞って連携内容を設計します。

実装を依頼するときは、対象地域、月間の処理件数、許容する位置の誤差、エラー時の手動確認方法を伝えると比較しやすくなります。問い合わせフォームには実際の顧客名簿を貼らず、匿名化した項目名や件数の目安から相談できます。納品時には、変換できた件数だけでなく未確定・未検出の一覧も確認できると、現場で運用できるかを判断しやすくなります。

導入前に確認する制約

  • 郵便番号検索・住所正規化・座標変換を同じ処理として扱わない
  • 一つ目の候補を自動採用せず、曖昧な結果を利用者に示す
  • 座標の保存・表示・第三者提供は提供元の条件を確認する
  • 実顧客の住所や認証キーを公開サンプルへ入れない

自社の業務で試すには

「住所入力・候補確認・地図表示を試作したい」という段階から相談できます。入力する項目、期待する出力、更新頻度、使う人、確認待ちになった場合の操作を整理すると、必要な試作範囲を具体的にできます。実データや秘密鍵をフォームに貼る必要はありません。まず匿名化した項目と困っている作業を教えてください。

データ活用の試作を相談する

この記事のテーマで相談する — 内容を確認して進め方を検討します。フォームを開いたり送信したりするだけで有料発注になることはありません。

関連する実装ガイド

確認した一次資料

比較の確認日は2026年10月11日です。提供元の利用条件・項目・認証・制限は変更されることがあるため、実装開始時にも公式資料を確認してください。このページのサンプルは結合や例外処理の動きを確かめるためのもので、外部APIの接続成功、実データの精度、事業成果を示すものではありません。

よくある質問

サンプルを動かすのにAPIキーは必要ですか?
不要です。架空データとPython 3の標準ライブラリで動き、外部通信を行いません。実APIへの接続試験は含みません。
実際の顧客データを送る必要はありますか?
サンプル実行や最初の相談には必要ありません。項目名、件数の目安、実現したい処理から相談できます。
シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

REVISION HISTORY

公開: 2026-05-10
  1. 2026-10-11内容拡充提供元の比較、架空データで動くサンプル、保存項目と実装の確認点を追加。取得範囲・更新条件の断定を見直しました。
シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp