防衛省のワクチン接種システムの欠陥を指摘したAERAの記事が話題になっています。記事の内容があまりにもひどかったので、ITエンジニアとして反論したいと思います。
・システム開発歴8年目のエンジニアが書いています。
・基本情報技術者/応用情報技術者保持。
AERA記事の要約
AERA記事で指摘されている内容は以下のとおりです。
- 架空の接種券番号を入力しても登録できる。
- 今回の予約は65歳以上の高齢者で東京センターは東京、埼玉、千葉、神奈川の1都3県の居住者が対象なのに、誰でも登録できてしまう。
- ゆえにセキュリティ上の“欠陥”がある。
言い換えるとワクチン予約システムは以下の3要件を満たす必要があると言っていますね。
- 接種券番号は、実在する番号のみ入力可能にすべき
- 65歳未満は予約不可とすべき
- 東京のセンターには東京、埼玉、千葉、神奈川の居住者のみ予約可能にすべき
この要件を満たしたシステムを作るのがどれだけ難しいかを次から説明します。
AERA記事への反論
大前提として、防衛相のワクチン予約システムは超短期間で作られています。
菅首相が大規模接種センターの設置を指示したのが4/27で、ワクチン予約サイトがオープンしたのが5/17ですから、2週間ほどで作ったシステムかと思います。
2週間で、3要件を満たしたシステムを作るのがどれだけ難しいかを説明します。
接種券番号は、実在する番号のみ入力可能にすべきか?
まず「接種券番号は、実在する番号のみ入力可能にすべき!」という主張ですが、簡単に入力チェックを実装するのは難しいです。
予約番号が実在するかを確認するには、データベースの接種券番号と突合が必要になります。
突合する場合、何千万件と存在する接種券番号と入力された接種券番号を突合し、実在する番号であるかを確認する必要があります。
何千万件とあるデータの中から1つのデータを取ってくる処理は非常に時間がかかります。性能面で現実的ではないのです。
また、入力誤りで接種券番号が登録されたとしても、接種会場で改めて接種券番号を確認すれば、予約をした人は問題なくワクチン接種を受けることができます。
誤入力されたとしても、事務運用で対応可能なため、開発期間の観点から架空の予約番号が登録できる点は妥協したものでしょう。
65歳未満は予約不可とすべきか?
次に、「65歳未満は予約不可とすべき!」という主張ですが、これも安易に実装できるものではありません。
まず、何をもって満65歳か?を考える必要があります。
防衛省のHPには、
「令和3年度中に65歳に達する、昭和32年4月1日以前に生まれた方」
と書いてあるため、現状は予約者の生年月日が昭和32年4月1日以前かどうかのチェックをするだけで済みます。
が、突如政府が接種年齢の引き下げをするかもしれません。
その場合、都度入力チェックを改修してリリースする手間が必要になります。※もちろんコーディングやテストも必要になります。
また、開発側としては65歳以上の人にのみ接種券が届いているはずなので、予約する人=65歳以上の想定で作ったのだと思います。
以上のことから、対象者が65歳以上か?を確認する入力チェックは必須とはいえず、突如政府が接種可能年齢を変更した際に足かせとなるリスクがあります。
東京、埼玉、千葉、神奈川の居住者のみ予約可能にすべき?
次に、「東京、埼玉、千葉、神奈川の居住者のみ予約可能にすべき!」という主張ですが、
防衛省のHPに予約能力の範囲であれば、対象都府県以外の方々の接種も行える記載があります。これは記事を書いた記者の凡ミスですね。
以上、反論からAERAの指摘がどれ程的外れかをご理解いただけると嬉しい限りです。
致命的な欠陥への指摘は大歓迎
AERA記事には少し感情的になってしまいましたが、致命的な欠陥への指摘は歓迎です。
致命的な欠陥とは「システムのデータを補正しない限り事務が進められなくなるような」欠陥です。
残念ながら、ワクチン予約システムには致命的な欠陥も見つかっているようです。
上記の例だと、データベースのデータを補正しないと「ワクチン予約」が進められなくなるため、致命的なエラーとなります。
データベースの一意制約エラーかと思いますが、データベース設計した人もかなりのポンコツの可能性が出てきましたね。
短期間の開発とは言え、致命的なエラーを発生させてしまうのは論外ですね。
まとめ
一連の騒動で、報道する側のITの知識が全く足りていないことと、ワクチンシステムを作る側も技術力不足は否めない一面が浮き彫りになったかと思います。
デジタル庁の発足もあり、今後システム開発への報道と政府系システムの開発力双方が改善することを望みたいと思います。
色々偉そうなこと言ってすみません。
AERAの記事は上から目線の文章で結ばれていました。
貴重なワクチン接種だけに慎重にやってもらいたい。
防衛省で一生懸命システム開発している人がこの言葉を見たらどう思うでしょうか。
傷つくと思います。ワクチン予約システムを開発した人はゴールデンウィークも休まずに作ってくれたのではないかと思います。
今回はシステムエンジニアとしてつい感情移入してしまい、記事を書きました。
失敗を繰り返しながらでも良くなっていくと良いですね!
データベースって何?って方はこちらの記事もどうぞ。
初心者必見!プログラミング学習でデータベースを学習すべき理由を力説します
では!