情報セキュリティの啓発を目指した、技術系コメディー自主制作アニメ「こうしす!」の@ITバージョン。第40列車は「住所の整合性」です。※このマンガはフィクションです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
ここは姫路と京都を結ぶ中堅私鉄、京姫鉄道株式会社。
その情報システム(鉄道システムを除く)の管理を一手に引き受ける広報部システム課は、いつもセキュリティトラブルにてんてこ舞い。うわーん、アカネちゃーん。
「こうしす!」制作参加スタッフが、@IT読者にお届けするセキュリティ啓発4コマ漫画。
マンガのテーマは、「住所」です。
自動処理では一筋縄ではいかないのが、住所の入力チェックや照合です。マイナンバーカードに関わる諸問題により、住所の正規化の難しさが注目されました。
こうした正規化の問題だけではなく、マンガで取り上げた「部分一致」と「同音異字」のような問題も、住所の難しさの一つです。
日本語表記で正しく都道府県名から入力されていたとしても、部分一致で偶然他県の住所が一致してしまうことがあります。例えば、「京都府」は「東京都府中市」に部分一致します。その結果、京都府で検索したはずなのに東京都府中市の店舗が現れるというのは、よくある不具合です。場合によっては、マンガのように京都府民チェックをすり抜けたりすることもあるかもしれません。
もし住所が必ず都道府県名から始まっているという前提があるのならば、先頭一致の条件で検索やチェックを行う必要があります。
同じ読みで字が異なる自治体は、思いの外多くあります。例えば、「さすがに『やまがたし』は1つしかないだろう」と思っていても、「山形市」(やまがたし)と「山県市」(やまがたし)のように同じ読みの市区町村名が存在します。「都道府県名が省略された住所の可能性や、漢字の書き間違いも考慮して、住所のフリガナをチェックしたらいいだろう」と思っていたら、思いも寄らない自治体と一致(部分一致)してしまいます。
さらに、同音同字の自治体が存在していることも有名です。
マンガに登場した「府中市」も、広島県と東京都に存在します。北海道と福島県の「伊達市」の例もあります。
このように、単純にどこの都道府県かをチェックするだけでも、住所にまつわる処理は横着できません。
住所の正規化のためのオープンソースのライブラリが存在しますが、その「都道府県名が省略されている住所の正規化」というプルリクエストの内容を読むだけでも、文字列一致だけで確認できるような単純な処理ではないことが分かります。
マンガの事例では、先述のような住所正規化ライブラリを使用するのも1つの方法ですが、そもそもとして、申し込みフォームでは、都道府県名、市区町村名の部分をあらかじめ決まった選択肢のドロップダウンリストからユーザーに入力してもらうという方法もあります。ただ、都道府県名に「京都府」を選んだ際に、市区町村名の選択肢に「東京都府中市」が現れては意味がありません。それを防ぐためには、ドロップダウンリストの抽出条件に全国地方公共団体コードを用いるという方法があるかもしれません。
マンガは比較的簡単な事例ですが、住所には他にもいろいろなワナがあります。幾つかの例を紹介しましょう。
「都道府県名が含まれていること」をチェックする場合、ありがちなのが、「都」「道」「府」「県」のいずれかの文字が存在すること、という条件で横着してしまうケースです。
これはうまくいきません。なぜなら、「京都市」には「都」、「尾道市」には「道」、「府中市」には「府」、「山県市」には「県」の文字が含まれるからです。
このワナは、慎重に条件を絞り込むことにより、ある程度簡単に回避できるかもしれません。
しかし、簡単に回避できるワナばかりとは限りません。もし「同じ住所の人は一度しか申し込めない」という申し込み制限が要件の場合はどうでしょうか?
これを実現するのは相当に困難です。
まず問題となるのが、京都市内の通り名を含む住所です。どの通りを基準にするかで「西入」か「東入」、「上る」か「下る」を複数通りの表記にでき、さらに角の建物であれば「角」の表記があります。極論としては、もし東西南北の通りに囲まれたブロックが丸ごと1つの建物であれば、理論上は同じ建物に少なくとも16個の住所表記が存在します。
しかし、町名と番地さえ合っていればいいだろうと考えて、単純に通り名を除去し「X京区Y町123」としてしまうと、別の問題を引き起こします。「X京区」には同名で異なる「Y町」が複数存在するために、通り名なしでは場所を一意に特定できなくなってしまう可能性があるからです。それによって、異なるY町の同じ番地の住所に住む別人が申し込み制限を受けてしまうかもしれません。
表記揺れは京都市内以外でも起こり得ます。例えば、地番と住居表示による表記揺れ問題です。
番地の表記にはいろいろありますから、ハイフン区切りの住所表記にそろえて比較するという方法を真っ先に思い付きます。例えば「○○1丁目2-3」などの表記を「○○1-2-3」にそろえるなどです。
しかし、「○○1番地2 ハイツ3号室」という意味の「○○1-2-3」と、「○○1丁目2番3号」という意味の「○○1-2-3」は別の場所を意味します。前者は土地の地番、後者は住居表示であり、住居表示は地番とは関係なく後から割り振られるためです。
住居表示が設定された後は、新しい住所を使わなければなりませんが、実際の所、住居表示設定前の地番表記の旧住所を使い続けても郵便物は届くために、住所変更手続きなどを怠って、旧住所を使い続けてしまう人もいるようです。もしそのような人が住居表示設定前の地番表記の旧住所で申し込んでしまうと、同じ番号の住居表示の住所に住む別人が申し込み制限を受けるという事態が発生してしまうことでしょう。
このような事態を自動的に防ぐことは容易ではありません。一定の精度で妥協して運用でカバーするか、要件自体を再検討する必要があるかもしれません。
本稿で全ての事例を取り上げることは不可能ですが、数限りないこうしたワナが存在するのが、住所の奥の深さです。住所をチェックしたり、住所で名寄せしたりするプログラムを開発する際は、簡単な方法はどこにもないと肝に銘じ、横着しないように心掛けましょう。
アニメ「こうしす!」監督、脚本。情報処理安全確保支援士。プログラマーの本業の傍ら、セキュリティ普及啓発活動を行う。
著書:「こうしす!社内SE 祝園アカネの情報セキュリティ事件簿」(翔泳社)
「ハックしないで監査役!! 小説こうしす!EEシリーズ 元社内SE祝園アカネ 監査役編 [1]」(京姫鉄道出版)
dアニメストアにて、アニメ『こうしす!EE』配信中。
「物語の力でIT、セキュリティをもっと面白く」をモットーに、作品制作を行っています。
オープンソースなアニメを作ろうというプロジェクト。現在はアニメ「こうしす!」を制作中。
Copyright © ITmedia, Inc. All Rights Reserved.