郵便番号DBを利用するときに考慮すると幸せになれること


郵便番号DBを利用するときに考慮すると幸せになれること

はぁ?

Studio JamPack Public DB 郵便番号データベースについて、クエリを投げる場合に考慮すべき点をまとめてみました。開発をする人は読むと幸せになれるかもしれません。

郵便事業株式会社のデータは完全なデータではない

郵便事業株式会社の公開している郵便番号データダウンロードサービスでは、CSVを公開していますが、これを利用するに当たってそのまま利用できないことが指摘されています。

  • 住所の郵便番号と大口事業所個別番号が別データとなっている件
  • 全国地方公共団体コードが規格に沿っていない件
  • 1レコードが複数レコードに分割されている件

これらの理由や詳しい情報は https://jamfunk.jp/wp/?p=390

このため、郵便事業株式会社のデータを改良して利用する必要があり、JPDBやZipCloudさんのようなデータ提供サービスが必要になります。

差分データを収録すべきである

データとしては現行データのみの提供で十分ですが、実際にサービスに組み込んで利用する場合は差分データを収録すべきです。
例えばユーザ登録や発送先の入力をする際に、以下の例が考えられます。

  • 郵便番号はあっているけど、住所が間違っている人。
    →現行データだけで十分に対応できます。
  • 郵便番号が間違っている人
    →住所よみからの検索で対応できます。
  • 古い郵便番号や住所で覚えている人
    →差分データを利用して、郵便番号が廃止になったり、住所が変更になっていることを知らせる必要があります。

全国地方公共団体コードをチェックデジット(CD)1桁を含めていない

何の役に立つか知りませんが、規格は従うべきで、チェックデジットを含めた6ケタ表記とすべきです。ただ、それだけです。(^^;

データ構造の注意点

本JPDBは、前項でも書いたとおり、差分データを含んでいます。
そのままクエリを引くと、flag_update=’2’の廃止データも引っ張ってきますので、その点を考慮してください。
住所候補入力として使用する際は、flag_update!=’2’とするか、flag_update=’2’の場合は「廃止」と表示したり赤くしたりしてその番号やデータが既に使われていないことを利用者に明示し選択できないようにしてください。

町域で複数の町域を含む場合は、「共通の町域(複数の町域または丁目~丁目・番地~番地)」のような表記がなされています。
そのため、検索候補を表示するときはそのまま県・市区町村郡・町域・番地・事業所名を表示しますが、候補を入力欄に代入(転記)する場合は町域の括弧を省くことが望ましいようです。
特に、町域によっては250文字ほどに及ぶレコードがあるため、ユーザに削除させるのは些か困難かと思われますし、万が一削除しないまま入力された場合は郵便物に添付するラベルを印刷する場合に支障を来すかもしれません。
ただし、事業所個別番号(flag_type!-‘-‘)の場合は、私書箱番号や階数表記がほとんどのため、そのまま括弧ごと代入した方がよいかもしれません。

表記用テーブル

JPDBでは各flag項に対して表記用の文字列を納めた表記用テーブルを設けています。
flag項を表示する場合はこのテーブルを利用してみてはいかがでしょうか。

出てくるデータのパターン

作業を行っていたり、データを利用していた際に見つけたいくつかのパターンをあげておきます。たまたま見つけたモノですので、他にも妙なパターンが見つかるかもしれません。

1つのクエリに1つのレコードが返ってくる

zipcode addr_pref addr_city addr_town
8140143 福岡県 福岡市城南区 南片江

一般的な例です。

1つのクエリに2つ以上のレコードが返ってくる

zipcode addr_pref addr_city addr_town
8070042 福岡県 遠賀郡水巻町 吉田
8070042 福岡県 遠賀郡水巻町 吉田団地

flag_1town2code=’1’(1郵便番号に複数の町域)になっているレコードの典型的なパターンです。

zipcode addr_pref addr_city addr_town
8160812 福岡県 春日市 平田台
8160812 福岡県 大野城市 平田台

同様に flag_1town2code=’1′ になっているが、町域が同じで複数の市にまたがっているパターンです。

1つのクエリに2つ以上のレコードが返ってくるが、廃止レコードが含まれている

zipcode addr_pref addr_city addr_town addr_town_kana flag_update flag_reason update
8190053 福岡県 福岡市西区 城の原団地 ジヨウノハルダンチ 1(変更) 5(訂正) 2008/11/26
8190053 福岡県 福岡市西区 城の原団地 ジヨウノハラダンチ 2(廃止) 6(廃止) 2008/11/26

町域の読みが変わった例です。その他に市町村合併や事業所名変更などのパターンで廃止と変更が一緒に含まれていることが良くあります。

町域がやたら長い(括弧表記されている)

zipcode addr_pref addr_city addr_town
8260043 福岡県 田川市 奈良(青葉町、大浦、会社町、霞ケ丘、後藤寺西団地、後藤寺東団地、希望ケ丘、松の木、三井後藤寺、緑町、月見ケ丘)

データにはこのような1つのレコードで複数の町域を収録するパターンと、複数レコードに同一郵便番号で複数の町域を収録するバターンがあります。基準は不明です。個人的には後者のレコード数が多くなってもデータ長を短くして欲しいのですが。。。

zipcode addr_pref addr_city addr_town
6028368 京都府 京都市上京区 北町(上の下立売通天神道西入上る、上の下立売通御前西入、上の下立売通御前西入上る、上の下立売通御前西入2丁目、上の下立売通御前西入2筋目、下長者町通御前西入、天神道上の下立売上る、天神道仁和寺街道下る、天神道下立売上る、天神道妙心寺道上る、天神道妙心寺道上る西入、仁和寺街道天神道西入下る、仁和寺街道天神道東入下る、御前通上の下立売上る、御前通上の下立売上る西入、御前通下立売上る、御前通下長者町上る西入、御前通仁和寺街道下る西入、御前通妙心寺道上る西入、御前通西裏上の下立売上る、御前通西裏下立売上る)

もう何が何だかよく分からない例。しかも、郵便事業のaddr_town_kana(町域名半角カタカナ)データは漢字と全く違ったデータが入っており、JPDBの処理アルゴリズムでは「キタマチキタマチキタマチキタマチキタマチキタマチキタマチキタマチ」と、さらに誤ったデータが生成されてしまい、狂気を感じるパターン(^^; ちなみにこのパターンは「6028374」の「京都府 京都市上京区 西町(・・・」、「6020816」の「京都府 京都市上京区 毘沙門町」などの、「京都市上京区」で多く見られる。郵便事業に改善を要求したい。(2012年8月)

廃止レコードが複数ある

zipcode addr_pref addr_city addr_town addr_town_kana flag_update flag_reason update
8191131 福岡県 糸島市 篠原 シノワラ 1(変更) 1(行政施行) 2009/11/26
8191131 福岡県 前原市 篠原 シノハラ 2(廃止) 6(廃止) 2008/09/30
8191131 福岡県 前原市 篠原 シノワラ 2(廃止) 6(廃止) 2009/11/26

3行目から2行目へ町域名の読みが変更され、2行目から1行目へ市町村合併で変更になったパターンです。
事業所も会社名が二転三転したり、市町村合併や管轄郵便局の変更で変更になるパターンも多いようです。

同じ町域でも郵便番号が異なる

zipcode addr_pref addr_city addr_town
8190166 福岡県 福岡市西区 横浜(1~2丁目)
8190366 福岡県 福岡市西区 横浜(3丁目)

丁目毎に郵便番号が異なるパターンです。

zipcode addr_pref addr_city addr_town
8190033 福岡県 福岡市西区 橋本(大字)
8190031 福岡県 福岡市西区 橋本(丁目)

丁目を有する場合と有しない場合もあるようです。
ちなみにこのパターンでは flag_chome はどちらも1でした。

zipcode addr_pref addr_city addr_town addr_num office_kanji flag_num
8108655 福岡県 福岡市中央区 清川 2丁目22-8 株式会社 福岡放送 1
8108656 福岡県 福岡市中央区 清川 2丁目22-8 株式会社 福岡放送 2

2つの郵便番号をどう使い分けているのか知りませんが、1事業者で最大3つの個別番号を持っているパターンがあります。

やたら大量の件数を返す

zipcode addr_pref addr_city addr_town
4520961 愛知県 清須市 *

67愛知県清須市の各町域67件を返します。うち1件は廃止データです。(2012年8月)

ちなみに町域→郵便番号の逆引きだと「本町」が630件です。「以下に掲載がない場合」だと1987件返ってきます。(2012年8月)

新たなパターンを見つけたら追記するかもしれません。