BASEプロダクトチームブログ

ネットショップ作成サービス「BASE ( https://thebase.in )」、ショッピングアプリ「BASE ( https://thebase.in/sp )」のプロダクトチームによるブログです。

Pay ID 3回あと払いの開発をきっかけに知る住所の味わい深さ

本記事はBASEアドベントカレンダー2024の19日目の記事です。

はじめに

こんにちは、Pay IDのエンジニアの金子です。普段は「Pay ID あと払い」の決済サービスのバックエンドを中心に開発を担当しています。

10月末に「Pay ID 3回あと払い」の機能をリリースしました。「Pay ID 翌月あと払い」に続き、新たな決済手段として使用可能になっています。

今回は、Pay ID 3回あと払い機能の実装をきっかけに住所の深さを知ることになったので、それについて話せればと思います。

Pay ID 3回あと払いとは

「Pay ID 3回あと払い」とは、Pay IDアカウントでのお買いものを、分割手数料無料で3回に分けてお支払いいただける機能です。月々のお支払い負担を軽減しながらお買い物を楽しむことができます。

https://payid.jp/blog/3payより

この機能の利用にあたっては、

  • ショップの「Pay ID 3回あと払い」の審査
  • 購入者の「Pay ID 3回あと払い」の審査

が必要になります。

いずれも分割払いを使用するための審査となっていて、BASEから外部サービスに連携し、審査依頼を出しています。

住所問題

2023年、デジタル大臣が住所の表記ゆれにAIを使用して解決するといった趣旨の発言を発端に、「日本の住所がヤバい」問題がトレンド入りしました。当時の私はそこまで深く考えず、ふ〜んくらいにしか思っていなかったのですが、今回そのヤバさを少し垣間見ることになりました。

ショップ審査にあたっては、規約に同意のもと、ショップ情報を外部サービスへ連携する必要があります。そのうちの1つに「住所」の連携がありました。

ここで住所をそのまま連携できれば良かったのですが、BASEの住所は、都道府県以下が1つのカラムにそのまま保存されています。一方で、連携先には都道府県以下の住所を「市区町村(address1)」「丁番地以下(address2)」のように分割して送る必要がありました。

例えば、BASEの住所は、

〒106-6237 東京都港区六本木三丁目2番1号 住友不動産六本木グランドタワー 37F

となっているので、BASEのテーブルのaddressカラムには「港区六本木三丁目2番1号 住友不動産六本木グランドタワー 37F」が入っています。

これを「港区六本木」「三丁目2番1号 住友不動産六本木グランドタワー 37F」のように連携する必要がありました。

住所分割のイメージ図

これを実現する方法としては、ケンオールの郵便番号検索API郵便番号データ等から、郵便番号を元に「市区町村」「町域」を取得し、一致するところまでで区切るといった対応があります。BASEでは独自の住所ライブラリを作っており(データ元は郵便番号データと同様)、これを使用して住所分割を行いました。

  • 市区町村(address1) → 「市区町村」& 「町域」
  • 丁番地以下(address2) → それ以下

「市区町村」「町域」とショップが入力した住所が完全一致とならない場合は、前方一致で一致するところまでを「市区町村(address1)」とし、住所不備の場合はショップに住所情報を確認してもらうといったフローで実現することができました。実装自体はこの仕様で進めることができたのですが、これをきっかけあることを知りました。

1つの郵便番号に複数の「都道府県」「市区町村」「町域」が紐づく住所が存在する

恐らくこれは住所について少し知っている人からすれば当たり前すぎることかもしれないのですが、私はそれまで全く知らずに生きてきました。そして自分が住所の初心者であることを自覚しました。

せっかく住所の入り口に立てたので、その深さを味わいたくなり興味半分で少し調べてみました。以降の説明は2024年12月12日時点の郵便番号データを元に調査したものになります。 (データ元:https://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html

前提として、住所は郵便番号検索をすると大きく分けて「都道府県」「市区町村」「町域」と分かれて表示されます。 よくwebサイトで郵便番号を入れた際に自動補完されるのは、郵便番号から「都道府県」「市区町村」「町域」を特定できるためです。この際、1つの郵便番号に対して複数の結果が出てくる地域が存在するということになります。

1つの郵便番号に複数の町域が紐づくケース

1つの郵便番号に複数の「町域」が紐づくパターンがあり、このケースに該当する郵便番号は1,548件も存在することが分かりました。全体の約1.3%に当たります。

以下の表に紐づく町域が多い順TOP3を並べていますが、452-0961の「愛知県清須市〜」にはなんと66の町域が紐づいていました

紐づく町域の多い順 TOP3

郵便番号 都道府県 市区町村 町域 紐づく町域数
452-0961 愛知県 清須市 春日明河原、春日一番割など 66
480-1103 愛知県 長久手市 岩作石田、岩作井戸ケ根など 65
441-0302 愛知県 長久手市 御津町下佐脇、御津町下佐脇新屋など 46

1つの郵便番号に複数の市区町村が紐づくケース

今度は、1つの郵便番号に「市区町村」が紐づくケースです。「町域」よりも1段階大きい括りになります。このケースに該当する郵便番号は134件存在し、全体の約0.1%でした。

紐づく市区町村の多い順 TOP3

郵便番号 都道府県 市区町村 紐づく市区町村数
950-0000 新潟県 新潟市江南区、新潟市西蒲区など 6
861-0000 熊本県 熊本市西区、熊本市東区など 5
636-0000 奈良県 生駒郡三郷町、生駒郡平群町など 4

1つの郵便番号に複数の都道府県が紐づくケース

驚きだったのが、1つの郵便番号で複数の都道府県が紐づく地域が存在しました。郵便番号を入れただけでは都道府県を特定できないということです。これらの地域の場合、郵便番号入力後の自動補完に頼らず全て自分で入力しなくてはなりません、大変です。このケースに該当する郵便番号は3件で全体の約0.002%でした。

紐づく都道府県の多い順

郵便番号 都道府県 紐づく都道府県数
498-0000 愛知県、三重県 2
618-0000 京都府、大阪府 2
871-0000 大分県、福岡県 2

超高層ビル番号

今までのとは対照的に、1つのビルで複数の郵便番号を持つ場所もありました。このケースは同じビルにありながら階層によって郵便番号が異なります。

郵便区番号が3けたの郵便区内に所在し、配達物数が特に多い超高層ビル(テナントビルに限ります。)については、ビルと階層を表す郵便番号を設定することがあります。

引用:https://www.post.japanpost.jp/zipcode/zipmanual/p04.html

例えば、新宿区にある西新宿パークタワーは1つのビルに対して53の郵便番号が紐づいていました。

西新宿パークタワーから一部抜粋

郵便番号 都道府県 市区町村 町域
163-1001 東京都 新宿区 西新宿新宿パークタワー(1階)
163-1002 東京都 新宿区 西新宿新宿パークタワー(2階)
163-1003 東京都 新宿区 西新宿新宿パークタワー(3階)
163-1004 東京都 新宿区 西新宿新宿パークタワー(4階)

1つの郵便番号で都道府県を跨ぐ地域があるかと思えば、1つのビルに対して複数の郵便番号が紐づく場所もあるといったように、単純に郵便番号と地域が1対1の関係ではないということが分かっていただけたかと思います。

これまでの事例は、郵便番号を元に住所を分割したいとなった際に問題になりそうな例で、「日本の住所がヤバい」と言われている所以はもっとあります。

  • 春日部市八丁目〜の「八丁目」は固有名詞
  • 兵庫県明石市の「和坂」は隣接する地域でありながら「かにがさか」と「わさか」と読む地域が存在する

などなど…ここから先に足を踏み込むと更に険しい山道が続いていそうなので、この辺りで身を引くことにします。

おわりに

現状の住所分割に関しては、1つの郵便番号に複数の地域が紐づいているケースは件数が多くないこともあり、手動で対応をしていますが、今後システムで解決できるように調整していく予定です!

最後に、Pay ID では一緒にプロダクトを作るメンバーを募集しています。興味のある方はぜひ採用情報などもご覧ください。

binc.jp

明日はnojiさん、yanagawaさんによる記事です。お楽しみに!