![見出し画像](https://assets.st-note.com/production/uploads/images/105327329/rectangle_large_type_2_97477b1c6ccb6d979d273fa8b3d30d19.png?width=1200)
ブラッシュアップ!川崎市の戸籍証明書交付システム〜1ヶ所の改良点〜
2023年5月10日、以下の出来事がニュースになった。
![](https://assets.st-note.com/production/uploads/images/105275518/picture_pc_3ee5828772f089d7ee1d6e59143efc07.png?width=1200)
川崎市のコンビニの、マイナンバーカードを用いて戸籍証明書を発行するシステムにおいて、2人が1秒以内に同時申請した場合、あとから申請した人の証明書が発行されてしまうという現象である。
開発会社からも同内容の発表があった。
私が住んでいる市ということもあり、この現象について少し考えてみようと思う。どういう仕組みで発生したのか、どうすれば改良できるのかを、技術的視点で考察する。
尚、私自身はこのシステムの開発に関与していないし、マイナンバーや戸籍交付のシステムのことも分からない。あくまで部外者による、一般的なシステム設計の感覚で勝手に予想した内容なので、間違っていることや根本的に勘違いしていることもあるだろう。お気づきの点はコメントで教えていただけると嬉しいです😂ヒントが増えると正確な予想ができると思います。
現状のシステムの仕組み予想
【表記】
交付システム:コンビニに設置された戸籍証明書の交付ができるシステム
利用者:交付システムの端末を利用する川崎市在住のマイナンバーカード所持者
川崎市システム:川崎市の、マイナンバーから本籍地等を取得できるシステム
本籍地システム:利用者の本籍地の、利用者の戸籍証明データを取得できるシステム
【処理フロー】
![](https://assets.st-note.com/img/1683814395386-moTZwSTaHi.png?width=1200)
利用者aがマイナンバーカードを用いて、交付システムの端末Aで戸籍証明書を申請する。
交付システムで、利用者aのマイナンバー等をデータベースに保存する。このとき、申請番号を発行し併せて保存する。申請番号は、申請した日時を数字で表現したもの(例:2023年5月1日12時34分56秒に申請した場合、申請番号は20230501123456)。
交付システムから川崎市システムに、利用者aのマイナンバーを送り本籍地の情報をもらう。
交付システムから本籍地システムに、利用者aのマイナンバーを送り戸籍証明データをもらう。
受け取った戸籍証明データを、交付システム内で一時的に保存する。このとき、戸籍証明データのファイル名には、②で発行した申請番号をつける。
交付システムから端末Aに、申請の申請番号を伝える。
利用者aが交付システムの端末Aで、戸籍証明書の印刷を選択する。
申請番号がついた戸籍証明データのファイルを印刷する。
問題が発生した原因予想
上記の処理フローは利用者が1人の場合なので、このフローでも成立する。
しかし、同じタイミングで別の端末Bから同じ操作をした利用者bがいたらどうなるだろうか。
利用者aは"2023年5月1日12時34分56秒789"で申請し、利用者bは"2023年5月1日12時34分56秒890"で申請したとする。
![](https://assets.st-note.com/img/1683814408995-y59RnodhHx.png?width=1200)
このように、申請番号は秒までしか有効でないので、二人の申請番号が同じになる。そのため、利用者aの戸籍証明データファイルが、あとから申請した利用者bのファイルで上書き保存され、利用者aに利用者bの戸籍証明が印刷されるという現象が起こったのではないだろうか。
システムの改善案
ほんとにこれだけの原因であれば、改善方法は極めて簡単である。
申請番号を日時から生成するのではなく、1から始まる連番にすれば良いだけだ。申請番号が重複しなければ、戸籍証明データが上書きされることはない。
申請履歴は保存されているのだから、今回が何件目の申請なのかは数えることができるはず。
もし申請履歴が保存されない設計の場合であっても、ランダムな文字列(ハッシュ値など)を申請番号として使用すれば、重複する可能性は限りなくゼロになる。
考察
今回の現象について、記事にはバグと書かれているが、バグではなく設計ミスだと考える。バグというのは設計通りに作られていないことなので、今回はその設計そのものが破綻していると思う。
2人以上の利用者が同じ時刻に申請するというのは、川崎市の人口(約150万人)から考えたら、全然起こり得ることだ。いや、もし起こり得ない条件であったとしても、0.001秒のズレもなく複数の利用者が申請しても問題のないようなシステム設計をしないといけない。それがシステム設計者の仕事だ。
と、好き勝手な想像を並べてみたが、実際はそんな単純な問題ではないと思う。開発段階で、この設計のリスクに誰も気付かなかったはずがない。でもこのままリリースしてしまったのは、技術的視点の綺麗ごとだけでは解決できない要因があったからだろう。
経験上、こういった行政や官公庁のシステムは、驚くような手落ちがあったり質が低かったりする。オンラインゲームとか通販サイトとかのシステムのほうがよっぽどちゃんとしている(※個人の感想です)
日本がIT後進国と馬鹿にされる象徴のような構図。ITの技術者でなくとも、もっとITの知識を身につけ、日本全体のITリテラシーを高めていきたい。
この記事が気に入ったらサポートをしてみませんか?