エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

市区町村マスタを手に入れろ、そして更新し続けろ

全国の市区町村の名前とコードをデータベーステーブル化したもの、すなわち市区町村マスタはITシステムを作っていれば何かしらの場面で必要になるものです。 ではその市区町村マスタを作るための元データはどこから手に入れたらいいものか。 そして「作る」というのもありますが、市区町村は再編されるものですから最新の変更にどう追従するか、しかもそれを自動化できるかというのも大いに気になるところですね。

エムスリーエンジニアリンググループ三浦(@[email protected]) [記事一覧 ]です。 Unit1(製薬プロモーション)およびUnit9(治験臨床研究支援)のエンジニアです。 今回は私も皆様とまったく同じように市区町村マスタのデータ源に悩んでいろいろ調べましたので、それで得た知見を共有させていただこうと思います。今回は代表的な3つのデータソースをご紹介し比較していきます。

ほしいのはこんな感じのデータソースですよね

  • 公共機関によって提供されている
  • 認証なしでアクセスできる

公共機関によって提供というのは、一次情報であるかそれに近いというデータの信頼性もさることながら、今後も安定してデータを提供し続けてくれるという期待があります。 前書きにも書いたとおり、更新し続けなければなりませんからね。

認証なしでアクセスできるというのは、まあプログラマ都合ですね。 更新を自動化するコードを書くにしても、HTTP GET一発で取得できるのと比べるとログインセッション作ってからアクセスしろってのでは急に手間が増えてしまいます。 それに認証の前提として利用申込をしたり決裁取って年間払い契約したりが必要だと、仕事がプログラマで完結しないんですよね。それでクイックに試作できなくて話が進まないなんてありがちなことです。

さてそんな思いを胸にWeb検索してみましょう。 すると出てきた上位は…

「市区町村名マスタ」のWeb検索結果

  • 2番目、公益財団法人国土地理協会は公共団体と言っていいでしょう。ただ、ここのマスタはCDメディアによる販売です。自動化には向きません。
  • 4番目、総務省は有望ですね! なにしろ地方自治体を所管する省庁ですから一次情報源そのものです。そしてもちろん、最新データを.xlsxファイルで公開しています*1。

というわけで総務省データが第一の候補、 そしてこのWeb検索では出てこないのですが、日本郵便の配布している郵便番号簿データ、いわゆる「KEN_ALL.CSV」ならすべての市区町村を含んでいるんでは? と思い当たる方もいらっしゃるんじゃないでしょうか? まったくその通りですね、日本郵便データが第二の候補です。

日本郵便データ、「KEN_ALL.CSV」の取り扱いには苦手意識をお持ちの方も多いかもしれません。しかし以前に比べると今は性質の良いCSVとして再編されたUTF版が出ており、これは自動化処理にも向いています*2。

どちらが決定版とは言えない、そこで出てくる第三の候補、それは…

総務省データと日本郵便データ、両方から市区町村マスタを作ったらそれらは一致するか!?  diffを取ってみると、意外な点で相違点が出てくることがわかりました。

  • 総務省データは郡名がありません。また、政令指定都市の区名がありません。
  • 日本郵便データは郡名も区名も含んでいますが、結合していてカラムとしては分かれていません。 パースして分離する必要があるってことですが、「大和郡山市」のように郡でないのに「郡」の字を含んでいる市町村もあることを思い出すと、機械的に分割する難しさがわかると思います。
  • 日本郵便データは北方領土の市区町村を含んでいません。
  • 日本郵便データは、正式名と違う町村名があります。八丈島八丈町と三宅島三宅村。*3

こうしてみると、特に郡名や区名がほしい場合に総務省データでは足りないし日本郵便データでも機械的には難しそうな分割が必要で、最初から分割されているデータはないものか、と欲が出てきます。

そこで、ウェブ検索では上位に出てこないのですがもしかしてあそこなら⋯ と思い起こすのが、そう、デジタル庁です。

デジタル庁のサイト内を探してみると、ありました第三の候補。 https://catalog.registries.digital.go.jp/rc/dataset/ba-o1-000000_g2-000002/resource/07b45993-c322-46e9-8010-bc54612bb67c

  • 郡名、区名も含まれている
  • それらが市町村名と別カラムに分かれている

Google検索で上位に出てこないので知名度は低いかもしれませんが、大変有用なデータソースですので、皆様是非頭の片隅にとどめおかれれば。

3つのデータソースを大比較します!

いずれも大変に有用なるデータソースを提供していただいている総務省、日本郵便、デジタル庁に感謝しつつ、あらためてそれぞれのdiffを取って相違点を調べてみます。 上の解説で書いた以外にもいくつか違いがありますので、それも含めて比較表を作りました。

総務省データ 日本郵便データ デジタル庁データ
郡名 なし 含む
(町村名と連結)
含む
区名 なし 含む
(市名と連結)
含む
八丈町/
三宅村
自治体名
(八丈町/三宅村)
住所
(八丈島八丈町/三宅島三宅村)
自治体名
(八丈町/三宅村)
檮原町*4/
須恵町*5
新字体
(梼原町/須恵町)
旧字体
(檮原町/須惠町)
正式な自治体名
(檮原町/須恵町)
北方領土 含む なし 含む

まとめ

Web検索で引っかかりにくいので見落とされがちですがデジタル庁の市区町村マスタデータは収録内容・形式において決定版と言ってもよいものです。マスタが必要になったときには是非ご利用を。

しかし正式な自治体名以外が住所で使われている自治体があり、総務省データと日本郵便データの両方まで参照することではじめてすべての表記パターンが得られることもわかりました。 3つのデータソースともすべて使って収集することにしましょうか、それとも正式な表記以外の住所表記はアドホックに追加するコードを書きましょうか、実装上の選択肢ですね。

ともあれ良いマスタの維持は良いデータソースからです。 データソースの性質をしっかり押さえて利用していきましょう。

We are hiring

私達エムスリーのエンジニアのお仕事は、降ってきた仕様をただ実装するようなものではなくそれで本当に実現したい世界とは何かを考えて議論して合意してまでを含むものです。 市区町村マスタというほしいものがあったとき、市区町村って変わりますよねとかその追従はある程度自動でできてないとしんどいですよねとまず考えるのはその典型ですね。 そんな「要求の向こう側を見る」エンジニアリング、私達と一緒にやっていきませんか? カジュアル面談もやっています。 jobs.m3.com

*1:https://www.soumu.go.jp/denshijiti/code.html

*2:https://www.post.japanpost.jp/zipcode/dl/utf-zip.html

*3:これは大変興味がありますので経緯をご存じの方いらっしゃったら教えていただきたいのですが、どうもこの2つの町村では自治体名が「八丈町」「三宅村」だけれど住所としては「八丈島八丈町」「三宅島三宅村」を使うというねじれがあるようなのです

*4:高知県。正式な自治体名は檮原町だが町役場も略記の梼原町を使っている

*5:福岡県。正式な自治体名は須恵町だが住民基本台帳や戸籍では須惠町