ケンオール通信第4号

ケンオール開発チームです。

今回は、郵便番号データの更新、新機能の市区町村API、郵便番号10桁化対応、郵便番号データの複数レコード結合処理を紹介します。

前号はこちらです。

郵便番号データの更新

2021/03/31(水)に、日本郵政様の郵便番号データの更新に伴い、ケンオールのデータも更新しました。

新機能: 市区町村API

都道府県以下の市区町村を取得するAPIの提供を開始しました。

このAPIの利用には、総務省の提供する全国地方公共団体コードが必要になります。 全国地方公共団体コードは、都道府県コード2桁、市区町村コード3桁で構成されている、日本の地方公共団体に付与されたコードです。総務省の提供するデータでは、最後にチェックディジットが加わっているため、6桁のコードとなっています。 都道府県コードは、JIS X 0401で定義されている他、 国土交通省等の各種公的機関でもデータが公開されているため、すぐに取得可能です。

ケンオールのドキュメントでも、都道府県コードをJSON形式で公開しています。

以下のAPI例では、東京都(都道府県コード13)の市区町村の一覧を取得できます。

https://api.kenall.jp/v1/cities/13

このAPIリクエストからは、以下のようなレスポンスが返ってきます。

{
  "version": "2021-03-31",
  "data": [
    {
      "jisx0402": "13101",
      "prefecture_code": "13",
      "city_code": "101",
      "prefecture_kana": "トウキョウト",
      "city_kana": "チヨダク",
      "prefecture": "東京都",
      "city": "千代田区"
    },
    ...
}

市区町村APIは、こちらのデモページですぐに試すことができます。

詳細は、ドキュメントをご参照ください。

郵便番号データ処理の秘密(1)複数行のレコードの結合処理

日本郵便様が公開している郵便番号データを利用しやすい形にするためには、複雑な加工処理が必要になります。 今回は、そのうちの1つ、複数レコードの結合処理を紹介します。

郵便番号データの説明のページには、以下のように記載されています。

全角となっている町域名の文字数が38文字を超える場合、また、半角カタカナとなっている町域名のフリガナが76文字を越える場合には、複数レコードに分割しています。

郵便番号データを一般的なテーブル形式で扱うためには、まずこの複数レコードを結合する必要があります。

例として、郵便番号 9218046 (石川県金沢市大桑町、および三小牛町の一部)の町名部分を取り出してみましょう。この郵便番号は、以下の6行で構成されています。

大桑町(ア、イ、ヰ、ウ、上野、ヲ、オ乙、鐘搗山、上川原、上猫下、
ク、ケ、御所谷、小寺山、シ、下上野、下西欠、平、チ、ツ乙、ツ丙、テ、ト、
中上野、中尾山、中平、中ノ大平、西ノ山、猫シタイ、ノ、ハ、開、
法師山、坊山、マ、鱒川淵、ム、元末、元涌波庚、ヤ、リ、ル、レ乙、
レ甲、ロ乙、ロ甲、和)
三小牛町(ヘ)

このデータを結合するためには、レコードの前後を見て、同じ郵便番号のレコードであることを確認する必要があります。 しかし、それだけではうまく結合できません。 この郵便番号は、単に1つのレコードが複数レコードになっているだけでなく、2つのレコード(大桑町と三小牛町)に同じ郵便番号を付与しているという特徴があります。よって、そのまま全て結合してしまうと、2つの町が1つのレコードで表されてしまいます。

この問題に対する解決方法はいくつかありますが、ケンオールでは現在のところ以下の仮説を採用しています。

  • 全データを確認したところ、町域名が38文字を超える場合は、括弧が開いていて、括弧が閉じていないケースのみ
  • よって、括弧が閉じるまでのレコードを結合すれば、町名を正しく分割可能

この仮説は、括弧なしで38文字を超える町域名が生まれた場合は成り立ちません。その場合は別の方式を採用する必要があるでしょう。

ケンオールでこの郵便番号をどう処理したかを見たい場合は、こちらのデモ で郵便番号 9218046 を入力して試してみてください。

レコードの結合が完了したら、いよいよ本格的なデータ処理が始まります。 その話はまた別の機会に紹介します。

新機能?? 郵便番号10桁化対応

※4/2 0:15追記: 本機能は4/1のエイプリルフールにあたりご提示していたものであり、お客様の実運用を前提としてご提供していたものではありません。実サービスの提供に影響がないよう入念に注意を払って準備したものであり、実績値としても影響はございませんでしたが、不備があった場合には細かい点でも結構ですのでお問い合わせフォームよりお知らせください。謹んでご意見を賜ります。

日本の郵便番号は、郵便物数の増加に伴う業務量増加への対応として、1998年に5桁から7桁に拡張されました。しかし、インターネットの普及に伴い、郵便物の通数は2001年の262億通を境に減少に転じ、2017年には172億通と、大きく数を減らしています *1

しかし、郵便番号が用いられているのは郵便物だけではありません。宅配便の取扱個数は、同様にECの普及により取扱個数を大きく伸ばしており、1998年の18億万個から2019年には43億万個と、およそ2.3倍増加しています *2

こうした状況を背景に、郵便番号はサービス品質の向上を目的として、再び桁数を拡張することが予想されます。ケンオールは、独自の調査により、将来的に郵便番号は10桁になるとの情報を入手しました。

他のいかなる郵便番号検索サービスよりも先にお客様に価値をお届けしたいとの想いから、水面下で開発を続けてきましたが、新年度の始まる本日4月1日に郵便番号10桁化対応機能をリリースいたします。

なお、以前の7桁の郵便番号と10桁の郵便番号は互換性があり、7桁郵便番号の左を0で埋めて10桁にすることで10桁化することができます。 (例: 1000001→0001000001)

本サービスのエンドポイントは以下となります。

https://api.kenall.jp/v999/postalcode/10桁郵便番号

このAPIリクエストからは、以下のようなレスポンスが返ってきます。

{
  "version": "2021-03-31",
  "data": [
    {
      "jisx0402": "13102",
      "old_code": "1046001",
      "postal_code": "0001046001",
      "prefecture_kana": "トウキョウト",
      "city_kana": "チュウオウク",
      "town_kana": "ハルミオフィスタワーX",
      "town_kana_raw": "ハルミオフィスタワーX(1カイ)",
      "prefecture": "東京都",
      "city": "中央区",
      "town": "晴海",
      "koaza": "",
      "kyoto_street": "",
      "building": "オフィスタワーX",
      "floor": "1階",
      "town_partial": false,
      "town_addressed_koaza": false,
      "town_chome": false,
      "town_multi": false,
      "town_raw": "晴海オフィスタワーX(1階)",
      "corporation": null
    }
  ]
}

APIがみなさまの将来のシステム更改に備えるための礎石となることを願ってやみません。

※本機能は4/1バージョンのため、ドキュメントはご用意しておりません。また、突然存在を消すことがあります。

ケンオールについて

ケンオールは、多くの開発者にとって悩みだった郵便番号住所検索機能をメンテナンス不要で簡単に使えるようにするためのAPIサービスです。

以下のリンクからサービスを利用することができます。

kenall.jp

この記事はShodoで執筆されました