ケンオール通信第2号

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

今回は、郵便番号データ・パーサの更新、ケンオール公式JavaScriptクライアントライブラリ、新しいエコシステムツールのご紹介、APIプレビュー機能Pythonパッケージングについての講演、障害情報の紹介をします。

前号はこちらです。

郵便番号データ・パーサの更新

2020/02/26(金)に、日本郵便様の郵便番号データの更新に伴い、ケンオールのデータも更新しました。 また、パーサの処理内容も更新しました。 パーサの更新について、詳しくは 前回のケンオール通信、及び今回のケンオール通信をご参照ください。

ケンオール公式JavaScriptクライアントライブラリ

ケンオールの公式JavaScriptクライアントライブラリをリリースしました。 https://github.com/KEN-ALL/kenall-js

$ npm i @ken-all/kenall

で、簡単にインストールすることができます。

エコシステムツール紹介

Slackアプリ kenall-for-slack

1つ目は、Slackで動かすアプリの紹介です。 @seratch_ja さんが作成した、Slackのサンプルアプリです。 https://github.com/seratch/kenall-for-slack

READMEに書いてある通りに実行すれば、Slack上で簡単に郵便番号検索APIを実行できます。

Rust製CLIツール kenall-rs

2つ目は、 chansuke さんによる、 Rust製のCLIツールの紹介です。 https://github.com/chansuke/kenall-rs インストールして、 kenall-rs <郵便番号> と入力すると、住所をテーブルとして出力してくれます。

PHPクライアントライブラリ kenall.php

3つ目は、 @tadsan さんによる、PHPクライアントライブラリの紹介です。 https://github.com/zonuexe/kenall.php

APIドキュメントだけでなく、初心者・中級者・上級者向けに使い方のヒントを書き分けているなど、丁寧なREADMEを書かれています。

APIプレビュー機能

ダッシュボードでAPIの実行結果をプレビューできるようになりました。ログインしてお試しください。

住所対応のアップデート

前回のケンオール通信で予定していた対応は完了しました。 今回は、さらに追加で調査した結果について紹介していきます。

0993211 北海道網走郡大空町東藻琴(北1区)(更新)

前回のケンオール通信にてパースミスに対応するという報告を行いましたが、最新の調査結果に基づいて対応方針を決定しました。

まず、北海道において、(1区)あるいは(北1区)といった住所表記の郵便番号を持つ地名は以下の6ヶ所です。

これらの地域の集配を管轄する各郵便局様に問い合わせさせていただいたところ、以下のような回答をいただきました。

  • 1区、2区というのは通称であり、正式な住所ではない
  • これらの郵便番号は通常使っていない
  • 現在は町名 + 番地が正式な住所である

よって、ケンオールでは、(1区)などの表記は出力しないように対応しました。

なお、カッコ書きで記載されていない1区などの表記は、今まで通り出力しています。 少なくとも、 0910029 北海道 北見市 留辺蘂町旭1区 については、 留辺蘂町旭1区 という町名が正式に存在するとの回答を留辺蘂郵便局よりいただいております。

この区表記を見て、歴史に詳しい方は、明治30年に制定された「北海道区制」を思い浮かべるかもしれません。しかし、おそらく今回のような住所表記の経緯は、北海道区制ではなく、明治初期に制定されたものの、不評のため数年で廃止された「大区小区制」の名残であると思われます。 北海道庁の北海道市町村自治制の沿革概要には、以下のような記述があります。

(前略) 越えて明治9年9月従来開拓使の本支庁において随意定めた大小区画を廃し、新たに全道を30の大区に分ち、大区の下に166の小区を設け、明治11年6月には選挙によって町村は各2名、小区に2名ないし4名(町村総代人中より互選)の総代人を置き、次いで翌12年7月郡区町村編制法により大小区画を廃し…(以下略)

北海道においては開拓使時代より、各支庁が別個に大小の区画を作成していました。しかし、おそらく大区小区制の施行のために、明治9年に区画の再整備を行ったものと思われます。

このあたりの経緯については現在も調査中のため、また詳しいことが分かったら紹介します。

9398052 富山県 富山市 大泉1区南部

富山南郵便局様より、行政区としては残っていないものの、大泉1区南部までが正式な町名であるという回答をいただきました。 よって、この住所においては町名と小字の分割を行わず、大泉1区南部として出力します(現行から変更なし)

9480012 新潟県十日町市新座(第1、2)(更新)

前回のケンオール通信にてパースミスに対応するという報告を行いましたが、最新の調査結果に基づいて対応方針を決定しました。

十日町郵便局様より、行政区としては第1、第2という表記は残っているものの、正式に住所表記をする場合は新座 + 番地などの形で記載をする(第1、第2と記述しない)という回答をいただきました。

よって、この住所については 第1、第2 という出力は行わないよう対応しました。

Python Charity Talks in Japan 2021.02

Python Charity Talks in Japan 2021.02にて、弊社@aodagが、Pythonのパッケージングの最新情報について講演しました。

ケンオールでも、Pythonコードの部分はpoetryを使ってパッケージ管理を行っています。

障害報告

2/20(土)の深夜1:04から2:13の間、APIの接続ができない状態となっておりました。ご迷惑をおかけして申し訳ありません。詳細については、障害報告をご参照ください。

先週のケンオール通信でお伝えした通り、現在のスタンダードプランではSLAは設けておりませんが、迅速な障害対応および障害報告などを提供できるよう、今後も努力して参ります。

なお、サービスの最新のステータスについては https://status.kenall.jp/ で確認できます。

この記事はShodo (https://shodo.ink) で執筆されました。

サービス障害のご報告 (2021年2月20日)

平素よりケンオールをご利用いただきまして誠にありがとうございます。

日本時間の2021年2月20日0時ごろよりサービス運営に利用しているパブリッククラウドにて障害が発生しており、1時ごろには全く接続ができない状況となりましたが、2時13分ごろに復旧いたしました。この度は大変ご迷惑をおかけし、申し訳ございませんでした。

時刻 (日本時間) 内容
2021年2月20日0時ごろ パブリッククラウドにて障害が発生
2021年2月20日1時4分 API接続が不可能となる (ダッシュボードは稼働)
2021年2月20日1時10分 障害の原因となっている箇所の復旧を試みる
2021年2月20日2時10分 復旧せず、問題箇所をバイパスするようDNSの設定を変更
2021年2月20日2時13分 APIサービス復旧
2021年2月20日6時ごろ 障害原因箇所が復旧
2021年2月20日9時ごろ 手動にて暫定的な変更の切り戻しを行う

現在ご提供中のスタンダードプランではSLAは設けておりませんが、今後も高い品質でのご提供を目指してシステムや体制を改善していく予定ですのでご期待ください。

ケンオール通信第1号

2/8にケンオールをリリースしてから一週間が過ぎました。たくさんの方のご登録、ありがとうございます!

我々の想像を遥かに超えた反響の大きさに驚いています。

中には、早くもケンオールを活用するためのツールを開発してくれた方もいらっしゃいました。

次に、いただいたコメントから、いくつかピックアップして解説したいと思います。

ケンオールという名前がいい!

思った以上に名前が好評で大変嬉しいです。

対応していない住所がある

ユーザの皆様から、いくつかの住所に対応していないという報告をいただきましたので、調査いたしました。

もし他にも対応していない住所を発見しましたら、お問い合わせフォームからご報告ください。

7660001 香川県仲多度郡琴平町琴平町(427番地以上、川西)

こちらの住所ですが、以下の指摘をいただきました。

  • 琴平町が二重になっているのはおかしい
  • 川西という小字は存在しない。これは単に「川の西」という意味を示しているに過ぎない

指摘と同様の内容は、 wikipediaの琴平町のページにも記載されていました。

町内には大字がある地域と無い地域が混在し、大字の無い地域では町名に続いて直接番地が来る表記となる(例えば金刀比羅宮は(琴平町)892番地1である)。大字の無い地域の郵便番号は、1~426番地(金倉川以東)が766-0002、427番地以上(金倉川以西)が766-0001となる。

元データをそのまま解析した場合、上記の結果になるのは正常な結果となります。すなわち、郵便番号データとしてはこの結果が正となります。しかし、琴平町郵便局様に電話して確認したところ、指摘内容の方が正しい住所であることがわかりました。

琴平町郵便局の方によれば、平成10年の郵便番号7桁変更の際に、もともと琴平町全体で1つの郵便番号だったものを2つに分割しなければならなくなったときの名残だろうと推測されていました。

琴平町は非常に小字の多い地域なので、2つの郵便番号の間で全ての小字を列挙するわけにいかず、しかし、当時のシステムがなぜか小字を入力することが必須だったらしく、色々苦慮した結果、「(金倉)川の西」「川の東」という仮の小字を入力したのではないか、とのことでした。

上記調査結果に基づき、今後のバージョンアップデートでは、指摘通り、「琴平町を二重出力しない」「川東、川西を出力しない」ように対応いたします。

このように、ケンオールでは、郵便番号データ上では判別できない住所については、各地の郵便局様及び自治体様に問い合わせさせていただいたり、関連書籍を調査することで、可能な限り正しい住所を返すように精度の向上に努めています。

各郵便局様、自治体様にはこの場を借りて御礼申し上げます。

4850801 愛知県小牧市大山(篠岡大山)

こちらの住所ですが、以下の指摘をいただきました。

  • 篠岡大山という小字は存在しない

実際に小牧池之内郵便局様に問い合わせさせていただいたところ、以下の回答をいただきました。

  • 小牧市には、もう一つ大山という大字が存在する。4850026 愛知県小牧市大山(小牧大山)
  • 篠岡大山、小牧大山というのは区別のために記載されているだけ

上記調査結果に基づき、今後のバージョンアップデートでは、篠岡大山、小牧大山を出力しないよう対応いたします。

7614103 香川県小豆郡土庄町甲、乙(大木戸)

こちらの住所ですが、 甲、乙 がパースされていませんでした。類似表記の 甲・乙 は対応済みだったのですが、読点区切りの表記は対応が漏れていました。今後のバージョンアップデートで対応いたします。

なお、 甲、乙 形式を使用しているのは香川県小豆郡土庄町のみで、他の自治体には存在しません。

(大木戸) の処理ですが、こちらについて土庄郵便局様に確認したところ、以下の回答をいただきました。

  • この地域において、住所は 土庄町甲XXX(番地) で送るのが通常で、大木戸などの小字は使わないし重要視していない
  • 甲、乙で住所を判断している。甲、乙が大字と考えて差し支えない

上記調査結果に基づき、 土庄町において括弧表記されている小字は出力しないように対応いたします。

0993211 北海道網走郡大空町東藻琴(北1区)

北1区 とパースされていました。今後のバージョンアップデートで修正いたします。

4411336 愛知県新城市富岡(○○屋敷)

この地域には、屋敷 大屋敷 西屋敷 中屋敷 東屋敷 などの地名があるのですが、これらをまとめてこのような表記にしています。この形式の住所表記はこの地域のみで、他の自治体には存在しません。

八名郵便局様に問い合わせしたところ、なぜこの様になっているのか全くわからないとのことでした。なお、これらの小字は飛び地になっていて、地理的にまとまっているわけではなく、なぜこのようになっているのかは不明です。

明治初期に4年だけ存在した半原藩の藩邸が大屋敷に存在していたので、おそらく屋敷というのはこの半原藩の藩邸だと思うのですが、確実なことは分かっていません。

いずれにせよ、現在の出力では 屋敷 のみを出力しているのですが、これだけを出力してもあまり価値がないと思われるので、一旦出力しないように修正いたします。

9390321 富山県射水市流通センター流通センター(青井谷1、2丁目)

青井谷1丁目のみ出力されていなかったので、今後のバージョンアップデートで修正いたします。

9480012 新潟県十日町市新座(第1、2)

とだけパースされていました。今後のバージョンアップデートで修正いたします。

サービスレベルについて

ケンオールのサービスレベルについて何件かお問い合わせをいただきました。現在のところ、ケンオールではサービルレベルの保証 (SLA) は定義しておりません。ベストエフォートでの対応となりますので、ご了承ください。

急激なアクセスが発生しないような一般的なサービスで利用する分には、特に問題なく利用できるかと思います。もし、ECサイト等でのご利用で、急激なアクセスが想定されるサービスに適用をご検討の場合には、こちらのフォームからお問い合わせください。

この記事はShodo (https://shodo.ink) で執筆されました。

郵便番号APIサービス、ケンオールをリリースしました。

f:id:moriyoshi:20210206002717j:plain Photo by Yu Kato on Unsplash

prtimes.jp

Webエンジニアの中には、郵便番号を住所に変換する機能を実装したことがある方は少なくないのではないでしょうか。

そして、実装のたびに、以下のようなことを感じた方も多くいるのではないかと思います。

  • KEN_ALL.CSVの中身を覗いて (ウッ) となった経験

    郵便番号データとしてよく利用されるのが、日本郵便の「郵便番号データダウンロード」ページよりダウンロードできる KEN_ALL.CSV ですが、このファイルがかなりの曲者で、一見CSVという形式ではあるものの、同じ郵便番号のデータが複数行に渡って収録されているなど、単純に読み込んで利用することが難しいものとなっています。また、地域によっては住所の重要な構成要素となっている部分 (例えば京都市の住所に見られる「通り名」) が、データとして独立した形で収録されておらず、「町域」の中にカッコ書きで列挙されているなど、機械的に一貫して取り扱うのが難しいデータとなっている特徴があります。

  • どの郵便番号変換ライブラリを使えばいいのか毎回調べてしまう

    GitHubなどを覗いてみても、KEN_ALL.CSVをプログラムから使いやすいように変換してオープンソースのライブラリ化したものがいくつもありますが、適切にメンテナンスされていなかったり、使っている技術が古くて自分のプロジェクトにフィットしないものもあったりするため、都度調べる必要に迫られたりします。

  • ライブラリを使い始めたがデータの更新をサボっていて、いつの間にか数年前のデータで運用されており、たまに住所が見つからないと苦情を受ける

    ライブラリの中に郵便番号データが含まれている場合、郵便番号データの更新のためにはライブラリそのものを更新する必要がありますが、そのための動作チェックなど、やることが少なくないので、ついサボってしまいがちになります。一方で、郵便番号は毎月更新されています。

上記のようなこともあり、開発者自身も (誰かがデファクトとなるサービスをリリースしてくれないかな...) などと思ってきました。しかし、自分が使いやすいと思えるサービスが現時点では見つからなかったため、きっと他の方々も同じに違いないと思い企画したのがこのケンオールというサービスです。

そうして軽い気持ちで開発作業を始めてみましたが、KEN_ALL.CSVの中身についてや住所について調べれば調べるほど、なかなかすごいところに首を突っ込んでしまったな、と思うことが多くありました。

KEN_ALL.CSVのデータをただそのまま返すだけのサービスを作るのであれば難しいことはないのですが、できるだけ幅広いニーズに応えようと周りのサービス運営者たちに色々ヒアリングしてみると、上で述べたような困ったデータ構造や不完全なデータにより、様々な問題が発生していることがわかりました。その中には、顧客に郵送物がうまく届かないことが多くある、など、ビジネス上のKPIに直結する課題もありました。

これらをなんとか解決できないものかと、弊社のデータ解析班はKEN_ALL.CSVのアマゾンの奥地まで切り開き、まだまだ改良する余地はありますが、下記のようにパースしてAPIとしてデータを返却しています。

KEN_ALL.CSV ケンオール
東京都 江戸川区 西瑞江(3丁目、4丁目3~9番) 東京都 江戸川区 西瑞江
東京都 江戸川区 西瑞江 3丁目
東京都 江戸川区 西瑞江 4丁目
京都府 京都市上京区 栄町(大宮通一条上る西入、大宮通中立売下る、智恵光院通一条上る東入) 京都府 京都市上京区 栄町
京都府 京都市上京区 大宮通一条上る西入 栄町
京都府 京都市上京区 大宮通中立売下る 栄町
京都府 京都市上京区 智恵光院通一条上る東入 栄町

現時点でもかなり満足のいく変換結果をご提供できている自負はあるものの、同時にまだカバーできていない住所があることも把握しております。今後は、以下のような機能の拡充を予定しています。

  • カッコ書きで表現される小字や丁目情報の抽出精度の向上
  • 精度の高い住所変換を提供する地域の拡大
  • 住所から郵便番号を引く逆引き機能のご提供

今後も、ケンオールのアップデートにご期待ください!

kenall.jp

f:id:moriyoshi:20170430235850j:plain

Photo by Vista Wei on Unsplash