浜松市の行政区の再編によるエンジニアの苦悩

静岡市でフリーランスでWebエンジニアをしている松永です。今回は静岡県の浜松市に関するお話です。

# 事の始まりは２月

2023年の2月22日、浜松市の市議会本会議で、浜松市の行政区の再編が発表されました。

2023年現在、静岡県の浜松市は以下の７つの行政区に分かれています。

・中区
・東区
・西区
・南区
・北区
・浜北区
・天竜区

これが2024年1月1日より、以下の３区に再編されることになります。

・中央区
・浜名区
・天竜区

再編の背景や目的、経緯などは、[浜松市の公式サイト](https://www.city.hamamatsu.shizuoka.jp/kikaku/kuseido/index.html)に詳しく記載されていますが、まず、このニュースを聞いたときにヤバイなと思ったのが、2024年1月1日から実施ということでした。

何かしらの住所を扱うWebサイトやシステムを保守しているエンジニアにとっては、場合によっては、正月返上の作業が発生する可能性があるからです（もちろんエンジニア以外でも、行政職員の方をはじめ、さまざまな方が正月返上になる可能性はあるわけですが）。

自分も住所を扱うWebシステムの保守や開発をしていることから、せめて年度替わりの4月だったらといいのになぁと思いつつ、なるべく正月返上を避けるべく準備をすることにしました。

# どう再編されるか

まず、要件の整理です。浜松市の行政区の再編は以下の通りです。

<table>
  <tr>
    <th>2023年12月31日まで</th>
    <th>2024年1月1日から</th>
  </tr>
  <tr>
    <td>中区</td>
    <td rowspan="5">→ 中央区</td>
  </tr>
  <tr>
    <td>東区</td>
  </tr>
  <tr>
    <td>西区</td>
  </tr>
  <tr>
    <td>南区</td>
  </tr>
  <tr>
    <td>北区 (三方原地区*)</td>
  </tr>
  <tr>
    <td>北区 (三方原地区以外*)</td>
    <td rowspan="2">→ 浜名区</td>
  </tr>
  <tr>
    <td>浜北区</td>
  </tr>
  <tr>
    <td>天竜区</td>
    <td>→ 天竜区 (区域の変更なし)</td>
  </tr>
</table>

注意点は、以下の通りです。
・「北区」は地域によって「中央区」と「浜名区」のいずれかに再編される。
・「天竜区」は区域の変更なし


三方原地区というのは、初生町、三方原町、東三方町、豊岡町、三幸町、大原町、根洗町です。したがってこれらの地区は「中央区」に変更、それ以外の「北区」は「浜名区」に変更になります。


# 自治体コード

住所を文字列で保存しているシステムであれば、住所を書き換えれば済んでしまいますが、住所の表記揺れを防ぐためにも、通常、都道府県や市区町村は自治体コード（全国地方公共団体コード）を使って管理しています。

一般的にはJIS X0401で定められている都道府県コード２桁とJIS X0402で定められている市区町村コードの３桁にモジュラス11でチェックディジット１桁を付加した6桁のコードで市区町村をコード化して管理します。

浜松市の市区町村コードは以下のように定義されています。

<table>
<tr>
<td>中区</td>
<td>221317</td>
</tr>
<tr>
<td>東区</td>
<td>221325</td>
</tr>
<tr>
<td>西区</td>
<td>221333</td>
</tr>
<tr>
<td>南区</td>
<td>221341</td>
</tr>
<tr>
<td>北区</td>
<td>221350</td>
</tr>
<tr>
<td>浜北区</td>
<td>221368</td>
</tr>
<tr>
<td>天竜区</td>
<td>221376</td>
</tr>
</table>


2024年以降はこのようになります。


<table>
<tr>
<td>中央区</td>
<td>221384</td>
</tr>
<tr>
<td>浜名区</td>
<td>221392</td>
</tr>
<tr>
<td>天竜区</td>
<td><b>221406</b></td>
</tr>
<tr>
</table>

注意点は「天竜区」が区名の変更がないのに、市区町村コードが変更されていることです。
ここはちょっと盲点でした。

恐らくですが、市区町村コード順にソートした場合に、「中央区」「浜名区」「天竜区」という並び順にしたかったのではないかと推測しています。


# どうシステムに反映するか

ここまでの情報から、以下の手順で対応していくと良さそうです。

#### マスタの変更

市区町村コードを管理しているマスタを以下のように更新する

・中央区(221384)と浜名区(221392)を追加する。
・天竜区のコードを221376→221406に変更する。


#### 住所データの一括変更

住所データのレコードの市区町村コードを以下の通り書き換えます。以下のようなロジックで変換するプログラムを書くことになります。

・「中区」「東区」「西区」「南区」→ 「中央区（221384）」
・「北区」の三方原地区 → 「中央区（221384）」
・「北区」の三方原以外の地区 → 「浜名区（221392）」
・「浜北区」→ 「浜名区（221392）」
・「天竜区」のコードを221376→221406に変更する。


#### 旧自治体コードの削除

住所データの一括変更が完了したら、旧７区の市区町村データをマスタから削除する。


理想を言えば、マスタデータにその各コードの有効期限を持ってマスタ参照をする時に有効期限によって結果を出し分ける実装も考えられます。そこまでやると影響範囲が大きそうなので、一旦このように考えます。

大規模なシステムで費用をかけられるならそこまでやるのが理想ですが、過去にさかのぼって旧住所で参照したいという要件がなければ、このような実装で及第点だと思います。

ただし、この方法の問題点もいくつかあります。

まず、このシステム変更をいつやるかです。理想から言えば住所が変更される1月1日です。あまりやりたくないですね。正月休みが明けてから実施できる案件であればよいですが。

あと、懸念事項としては、三方原地区の判定です。市区町村以下の住所は通常、コード管理ではなく文字列で登録されていると思います。きちんと登録されていればよいですが、誤字、表記揺れは大いに考えられるところです。正常に三方原地区判定ができない状態の場合の考慮が必要です。

このあたりは案件によっての判断になるかと思います。間違った住所になってしまったことでの影響が多いものであれば（配達に使っている住所など）、事前にデータ変換のテストを念入りに行ったり、表記揺れを事前に修正しておくなどの対応が必要になるでしょう。


# 住所の一括変換はやらないという選択肢

上記の理由から、住所の一括変更は諦めるというのもアリです。
その場合は、住所はシステムのフォーム画面から１件づつ更新していくことになります。

システムを利用しているクライアントや顧客自身が住所を変更できる画面があるのなら、新住所を変更できるようにしておいて、住所変更を自身でやってもらえるよう依頼すればよいと思います。

この方法をとった場合、以下の対応になるかと思います。

・旧７区のマスタは残しておく。
・「中央区」と「浜名区」をマスタに追加。
・「天竜区」のコードを221376→221406に変更する。

この場合、住所データの市区町村コードが天竜区に設定されているレコードは、新コードに一括して書き換える必要はあります。そうすれば。天竜区の住所データはフォーム画面から住所変更をする必要はありません。

![address-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39570/444c519a-8bf2-0d16-d43b-1c3319ce8cc1.jpeg)

このように浜松市の旧区と新区が選択できるようにしておく。

もう少し頑張って、このようにするとなお親切。

![address-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39570/e446bda0-404f-55db-6d1d-c437dcd46b40.jpeg)


このような対応で登録更新を促しながら、住所変更が完了したら旧マスタを削除します。


# 郵便番号の問題

もうひとつ住所データを扱うにあたり考えなければならないのは、郵便番号です。今回の浜松市の行政区再編においては郵便番号の変更はありません。

ただし、住所情報を入力させるにあたり、郵便番号検索機能を実装している場合対応が必要です。

郵便番号検索機能のデータは日本郵政が提供している[郵便番号データ](https://www.post.japanpost.jp/zipcode/download.html)が元となっています。

このデータを郵便番号データとしてシステムに組み込むか、無償で利用できる郵便番号検索APIもあるのでそれらを利用すると、郵便番号の変更があったときでも最新のデータが提供されるため利用するケースもあるかと思います。


日本郵政の郵便番号データは2023年11月30日の更新版で郵便番号データは浜松の新三区の住所に変更されました。
したがって、最新の郵便番号データを郵便番号検索機能のマスタに適用してしまうと、郵便番号の検索結果が新三区の住所が参照されてしまうため、市区町村マスタも新三区対応をしておかないと、浜松市の郵便番号の検索ができなくなる可能性があります。

また、郵便番号検索APIの提供サービスは、自動的に最新の郵便番号データを取り込む仕組みを取り入れているものもあるため、2023年12月現在、浜松市の郵便番号をAPI検索すると新住所が返ってきてしまうことが確認されています。この場合は2024年1月を待たずに、新３区の市区町村マスタを登録する必要があります（← これは予期していなかったのでちょっとあたふたしています💦）。



# まとめ

かつての平成の大合併ほどでないにしろ、最近でも少なからず、市区町村の再編成は実施されています。

<table>
<thead>
<tr>
<th>変更日時</th>
<th>旧名称</th>
<th>新名称</th>
<th>自治体コード変更</th>
<tr>
<td>
2016年10月10日
</td>
<td>
宮城県黒川郡富谷町
</td>
<td>
宮城県富谷市
</td>
<td>
あり
</td>
</tr>

<tr>
<td>
2018年10月01日 
</td>
<td>
福岡県筑紫郡那珂川町
</td>
<td>
福岡県那珂川市
</td>
<td>
あり
</td>
</tr>

<tr>
<td>
2019年05月01日 
</td>
<td>
兵庫県篠山市
</td>
<td>
兵庫県丹波篠山市
</td>
<td>
なし
</td>
</tr>
</table>

このように見ると、今回の浜松市の行政区再編は、やや複雑な再編を行っており、システム開発者にとってはそこそこ大変な対応が迫られるものだと思います。

最後にシステム開発者だけでなく、行政担当者の方々、その他の関係者の皆さんが大きな混乱がなく、無事再編の移行ができることを望みます。