AGOV 登録バグ:キーボードレイアウトがいかにデジタル・アイデンティティ・システムを破壊するか

AGOV 登録バグ:キーボードレイアウトがいかにデジタル・アイデンティティ・システムを破壊するか

AGOV 登録における Shift キーのバグ

スイス政府のログインシステムである AGOV において、アクセシビリティに関する重大なバグが発生し、AZERTY キーボードレイアウトを使用するユーザーがアカウント登録を行えなくなる問題が発生しました。この問題は、検証コード入力のためのカスタム JavaScript 実装が、Shift キーを含む修飾キーを明示的にブロックしていたことに起因します。AZERTY キーボードでは数字を入力するために Shift キーが必要であるため、これらのユーザーは登録プロセスから完全に締め出されてしまいました。

技術的な根本原因:キー入力のインターセプト

AGOV の登録プロセスでは、ユーザーが6つの個別の入力ボックスに検証コードを入力する必要があります。標準的な HTML 入力フィールドを使用するのではなく、システムは複雑な JavaScript メカニズムを採用してキー入力をインターセプトし、コードをローカル変数に保存しています。

難読化された JavaScript の解析により、入力ロジックを処理する verificationCodeEntered 関数が判明しました。この関数には、S.key が "Shift", "Control", "Meta", または "v" の場合に、入力を明示的に return(無視)する switch 文が含まれています。

verificationCodeEntered(_, S) {
    if ("Shift" === this.lastKeyPressed) return;
    switch (S.key) {
      case "Control":
      case "Meta":
      case "Shift":
      case "v":
      case "r":
        return;
      // ... other cases
    }
    S.preventDefault();
    const O = Number(S.key);
    isNaN(O) ? (this.getInput(_).value = "") : this.setCode(_, String(O));
}

S.preventDefault() を呼び出し、手動でキーマッピングを処理することで、開発者はブラウザのネイティブな文字処理をバイパスしています。AZERTY レイアウトでは、数字はプライマリキーではなく、Shift + [key] を介してアクセスされます。コードが Shift キーを明示的に無視するため、結果として得られる文字は決して数字として処理されず、入力フィールドが空のままとなり、「フィールド必須」エラーがトリガーされます。

「鶏と卵」のサポート問題

このバグの影響は、システムのサポート・アーキテクチャの欠陥によってさらに悪化しました。登録できないユーザーは、バグを報告することができませんでした。なぜなら、公式のサポートチャネルは、メインの登録プロセスと同じメール検証プロセスを必要とするウェブフォームであるためです。

AGOV の FAQ によると、サポートは「オンラインでのチケット作成を通じてのみ」提供されます。

これにより、登録を妨げるバグが、ユーザーがバグを報告するためにサポートに連絡することを妨げるという、循環的な依存関係が生態み出されました。

UI/UX デザインにおける広範な影響

この事例は、現代のウェブ開発とアクセシビリティにおけるいくつかのシステム的な失敗を浮き彫りにしています。

単純な入力を過剰に設計(Over-Engineering)すること

カスタム JavaScript で管理される6つの個別の入力ボックスの使用は、一般的ではありますが脆弱なパターンです。開発者の間での技術的なコンセンサスは、単一のネイティブなブラウザ・フォーム・フィールドを CSS でスタイリングして個別のボックスとして見せる方が、はるかに弾力性がありアクセシビリティも高いというものです。

ロジックを DOM から切り離すこと

AGOV システムは、検証コードを DOM から直接読み取るのではなく、 JavaScript 変数に保存していたため、入力値はブラウザ拡張機能や、フィールドに値を手動で注入しようと試みる高度なユーザーにとって「不可視」なものとなっていました。

オープンソース公開の遅れ

スイス政府は法律により AGOV のソースコードを公開することが義務付けられていますが(2026年12月に予定)、システムはコードが公開される前に、いくつかのサービスでの使用が義務付けられていました。

早期に公開されていれば、コミュニティティがデプロイ前にこのキーボードレイアウトの不整合性を特定し、トラブルシューティングを行えたはずです。

コミュニティの視点

この失敗に関する開発者間の議論では、これらの間違いが繰り返される性質が強調されています。ある貢献者は、数字に Shift キーが必要な Programmer Dvorak レイアウトを使用するユーザーにも同様の問題が発生すると指摘しました。

他の批判者は、カスタムバリデーション・ロジックの非効率性を指摘しています。

"Web 開発者の典型的なパターン:ネイティブで動作し、国際的にサポートされている標準的な入力メカニズムニを、動作しない異なる入力メカニズムに JavaScript で置き換えてしまうこと。"

また、日付や電話番号のための「独創的な」 UI ウィジェットが、<input type="date"> のようなネイティブ HTML5 入力を無視していることに対しても、、繰り返される不満が寄せられています。これらは、すべての現代的なブラウザにおいて、すでに解決済みの問題です。

Sources