【完全解説】デジタル庁デザインシステムに学ぶテキスト入力(インプットテキスト)のアクセシビリティ指針!やりがちなNG実装8選と改善策

Web技術

Webフォームや入力欄(インプットテキスト)は、問い合わせ、会員登録、行政手続き、ECサイトでの決済など、ユーザーがサービスを利用する上で最も重要なタッチポイントです。

しかし、良かれと思って施したUIの工夫が、障害を持つ方や高齢者、スクリーンリーダー(音声読み上げソフト)の利用者、さらには一般のユーザーにとっても「極めて使いづらい致命的な障壁(バリア)」になってしまっているケースが後を絶ちません。

そんな中、Webアクセシビリティの国内最高水準の指針として、すべてのWebディレクターやフロントエンドエンジニアが必読とすべきドキュメントが、デジタル庁が公開している『デジタル庁デザインシステム(DADS)のインプットテキスト(アクセシビリティ)ガイドライン』です。

デジタル庁の指針には、「プレースホルダーに頼らない」「不用意にdisabledを使わない」「maxlengthで文字数を切り落とさない」など、これまでのWeb制作で無意識に行われてきた“バッドノウハウ”に対する痛烈かつ本質的な改善策が凝縮されています。

本記事では、デジタル庁デザインシステムのガイドラインをもとに、インプットテキスト設計でやってはいけない「8つのNG実装」と、誰にとっても迷わず入力できるアクセシブルな代替実装アプローチについて、現場のフロントエンド視点を交えて徹底的に解説します!


1. なぜテキスト入力のアクセシビリティが重要なのか?

Webアクセシビリティ(JIS X 8341-3 / WCAG 2.2)において、フォーム入力の改善は最優先事項のひとつです。

ユーザー層・シチュエーション テキスト入力で直面する代表的なバリア
視覚障害・ロービジョンの方 コントラスト比が低くて読めない、文字拡大で見切れる、入力条件が見えなくなる
スクリーンリーダー利用者 プレースホルダーが読み上げられない、突然のエラー通知に読み上げが遮られる
認知・記憶特性のある方 入力例が消えてしまい何を入力すればいいか忘れる、複雑な形式を強制される
パスワード管理ツール利用者 コピペ禁止やフィールド分割によって自動入力・自動生成ツールが弾かれる

アクセシビリティを確保することは、特定の障害者支援にとどまらず、スマートフォンで急いで入力しているユーザーやITリテラシーに不安のあるユーザーなど、「すべての利用者の入力離脱(カゴ落ち)を防ぐ」ことへ直結します。


2. デジタル庁が警鐘を鳴らす「8つのNG実装」と改善策

デジタル庁のデザインシステムで明確に「避けるべき」と指定されている8つの重要ポイントを、理由と改善策とともに深掘りしていきます。

NG①:プレースホルダーテキストを入力条件や入力例に使う

入力欄の中に薄いグレーで「例:山田太郎」や「半角英数8文字以上」と表示させる placeholder 属性。多くのWebサイトで見られますが、デジタル庁は「原則として使用しないでください」と強く明記しています。

  • 理由1(視認性の低さ):プレースホルダーの文字色はコントラスト比が低く設定されがちで、ロービジョンの方や屋外の直射日光下ではほとんど視認できません。
  • 理由2(入力中に消える):文字を入力し始めた瞬間に消えてしまうため、ユーザーは入力例やパスワード条件を記憶に頼らざるを得なくなります。エラーが出ても見比べることができません。
  • 理由3(支援技術の課題):スクリーンリーダーによっては読み上げをスキップしたり、すでに入力された値と誤認させたりします。

【改善策】:
入力例や必須条件は、入力欄の「外側(ラベルの下など)」に独立したサポートテキストとして常時表示させます。必要に応じて aria-describedby で入力欄と紐付けましょう。

NG②:無効フィールド(disabled)を安易に使う

「条件を満たすまで入力欄やボタンを灰色にして操作不能にする」という実装(disabled)も避けるべきです。

  • 理由:disabled が付与された要素は、Tabキーによるキーボード操作でフォーカスすら当たりません。そのため、全盲のスクリーンリーダーユーザーは「そこに次の入力欄が存在すること」自体を認識できず、迷子になってしまいます。

【改善策】:
あらかじめ無効化して塞ぐのではなく、操作可能な状態にしておき、未入力や不備がある場合は適切なエラーメッセージを添えて誘導する設計へ見直します。

NG③:編集不可フィールド(readonly)を使う

変更させたくない固定データ(会員IDやログイン中のメールアドレスなど)を readonly な入力欄として配置するのも基本NGです。

  • 理由:なぜ編集できないのか理由が伝わらず、フォーカスしてもカーソルが出ないためユーザーを混乱させます。また、文字が枠からはみ出している場合、スクロールして全文を確認することが困難です。一部の音声読み上げ環境では「クリック可能」とだけ通知され、編集不可であることが伝わりません。

【改善策】:
編集できない情報は入力枠に閉じ込めず、「地の文(通常のテキスト段落)」として静的に表示します。
※どうしてもシステム都合で readonly を使う場合は、「編集不可」である理由を明記し、枠線を点線にするなど通常入力欄と明確に区別する工夫が必要です。

NG④:最大文字数の制限に maxlength 属性を使用する

「10文字まで」の入力欄に maxlength="10" を設定し、それ以上の文字入力をブラウザ側で強制遮断する手法です。一見便利に思えますが、重大なユースエラーを引き起こします。

  • 理由1(パスワードの欠損):安全な長いパスワードを入力した際、末尾が勝手に切り落とされていることに本人が気づかず、意図しない短いパスワードが登録されてしまう事故が多発します。
  • 理由2(日本語入力の阻害):漢字変換のために「かな」を入力している最中に最大長に引っかかり、変換候補すら選べなくなるトラブルが生じます。
  • 理由3(コピペの分断):メモ帳から全体を貼り付けて後から微調整しようとしても、超過分が自動破棄されてしまいます。

【改善策】:
HTMLで入力をブツ切りにするのではなく、超過していても一度すべて入力させます。その上で「2文字超過しています」といった親切なエラーテキストを表示し、サーバーサイドと連携して修正を促すのが正しい設計です。

NG⑤:コピー&ペーストを禁止する

「メールアドレス(確認用)」や「パスワード」の入力欄で、JavaScriptを使って右クリックや Ctrl+V による貼り付けを禁止するサイトが存在します。デジタル庁はこれを固く禁じています。

  • 理由:1Password等のパスワードマネージャーによる自動生成・安全な入力を阻害します。さらに、手動入力によるタイピングミスを誘発し、認知機能や記憶に困難を抱えるユーザーの利用を完全に排除してしまいます(WCAG 2.2 達成基準 3.3.8 / 3.3.9 違反)。

【改善策】:
すべての入力フィールドでコピー&ペーストを完全に許可してください。二重入力(確認用入力)を強いるより、入力値のマスキング解除(目のアイコンでパスワードを表示する機能)を設ける方が遥かに安全で親切です。

NG⑥:メールアドレスを「@」の前後で2つの枠に分割する

「アカウント名」と「ドメイン名」を別々の入力枠に分け、間に「@」をテキストで挟む古いフォームUIです。

  • 理由:ブラウザのオートフィル(自動補完機能)やパスワード管理ツールがメールアドレスとして正常に検知できなくなります。辞書登録やIMEの予測変換による入力も妨害されます。

【改善策】:
メールアドレスは必ず「1つの単一テキストフィールド」で入力させます。入力ミスを防止したいなら、入力欄を分割するのではなく、登録後に実際に「認証メール」を送信して到達確認を行うのが正当なアプローチです。

NG⑦:値の変更をトリガーに予測できない画面変化を起こす

セレクトボックスやテキスト入力欄からフォーカスが外れた(change / blur)瞬間に、勝手に別ページへリダイレクトしたり、ダイアログをポップアップさせたりする設計です。

  • 理由:視覚障害者やキーボード操作ユーザーは、自分がどこに移動したのか把握できずパニックに陥ります(WCAG 2.2 達成基準 3.2.1 / 3.2.2 違反)。

【改善策】:
画面遷移やダイアログの表示など、大きなコンテキスト変化を引き起こすアクションは、値の変更ではなく「送信ボタンや確定ボタンの明示的な押下」をトリガーにしてください。

NG⑧:エラーメッセージの読み上げに aria-live や role=”alert” を使う

エンジニアがアクセシビリティを意識し始めた際、最もやってしまいがちなのが「エラー通知だから aria-live="assertive" や role="alert" を付けよう!」という過剰な実装です。デジタル庁はこれに明確なストップをかけています。

  • 理由:入力の途中でエラーが発生するたびに、スクリーンリーダーが現在読み上げている内容を強制的に中断し、エラーメッセージを割り込んで読み上げてしまいます。これは音声操作ユーザーの集中や思考を著しく妨害するノイズとなります。

【改善策】:
エラーメッセージは静的なテキストとして画面に表示させるだけで十分です。どうしても入力欄とエラーを関連付けたい場合は、aria-describedby="error-id" を使って入力欄に紐付け、ユーザーがその入力欄にフォーカスを当てた際に自然に読み上げられるようにするのがベストプラクティスです。


3. デジタル庁基準を満たす「理想的なインプットテキスト」の実装例

以上の指針を踏まえ、アクセシビリティに完全に準拠した理想的なHTMLコーディング例を提示します。

<div class="form-group">
  <!-- 1. ラベルと入力欄を明確に紐付け -->
  <label for="user-email" class="form-label">
    メールアドレス <span class="badge-required">必須</span>
  </label>

  <!-- 2. サポートテキスト(入力例や条件)を入力欄の直前に配置 -->
  <p id="email-hint" class="form-hint">
    半角英数字で入力してください(例:name@example.com)
  </p>

  <!-- 3. プレースホルダーを使わず、aria-describedby でヒントとエラーを紐付け -->
  <input
    type="email"
    id="user-email"
    name="email"
    class="form-input"
    autocomplete="email"
    aria-describedby="email-hint email-error"
    aria-invalid="true"
  />

  <!-- 4. エラー表示は静的なテキストで配置(aria-liveは使わない) -->
  <p id="email-error" class="form-error">
    有効なメールアドレスの形式で入力してください。
  </p>
</div>

コードの解説ポイント

  • placeholder は一切使わず、ヒントは #email-hint として常時可視化。
  • aria-describedby="email-hint email-error" を指定することで、音声読み上げ時に「ラベル名 → 入力値 → ヒント → エラー内容」が論理的かつスムーズに通知されます。
  • autocomplete="email" を付与し、ブラウザの自動補完やパスワード管理ツールとの連携を最大限にサポートしています。

4. まとめ:親切なUIとは「制約」ではなく「道案内」である

デジタル庁デザインシステムが提唱するインプットテキストのアクセシビリティ指針を総括すると、ひとつの明確な哲学が見えてきます。

  1. ユーザーを型にはめようとしない:maxlength やコピペ禁止、入力欄分割で無理やり制限するのではなく、自由に入力させてから検証する。
  2. 記憶に頼らせない:プレースホルダーで隠すのではなく、サポートテキストで常に条件を示す。
  3. 支援技術を尊重する:disabled でフォーカスを奪ったり、aria-live で無理やり割り込んだりせず、標準的なHTMLセマンティクスで整える。

Web制作において、「見た目をスッキリさせたいからプレースホルダーに全部詰め込む」「入力ミスを防ぎたいからコピペを禁止する」といった独りよがりな実装は、今すぐ見直すべき時代に来ています。
すべてのユーザーがストレスなく情報を届けられるフォームを目指し、ぜひデジタル庁のアクセシビリティ基準を日々の実装に取り入れてみてください!

(Visited 1 times, 1 visits today)
タイトルとURLをコピーしました