Green key with wheelchair icon on white laptop keyboard. Accessibility disability computer symbol
目次

アクセシブルなデザインシステム実践ガイド:コンポーネント仕様・トークン設計・WCAG 2.1 AAの受け入れ基準・運用とガバナンスまで

概要サマリー(先に要点)

  • アクセシビリティは“頑張る人”ではなく、“仕組み”で守るほうが強いですの。デザインシステム化は、その最短ルートです。
  • 成功の鍵は ①デザイントークン(色・余白・文字・フォーカス)→ ②コンポーネント仕様(操作・状態・文言)→ ③受け入れ基準(テスト)→ ④運用(ガバナンス) の順で整えること。
  • すべてを一気にAAAへ、は疲弊します。まずは WCAG 2.1 AA の“事故が起きやすい箇所”(フォーム、モーダル、タブ、メニュー、表、動画)を標準コンポーネントに落とし込みます。
  • この記事には、コンポーネント仕様テンプレトークン例アクセシビリティ受け入れ基準(書き方の型)運用ルール5分スモークテストを収録しました。

対象読者(具体):UI/UXデザイナー、フロントエンドエンジニア、PM/ディレクター、QA、アクセシビリティ担当、制作会社の標準化担当、複数プロダクト運用チーム
アクセシビリティレベルWCAG 2.1 AA 準拠を目標(継続的改善の運用を含む)


1. はじめに:アクセシビリティは“標準化”すると、やさしく続く

アクセシビリティ対応は、丁寧にやろうとするほど、個人の気合いや経験に依存しやすい領域ですの。
「このフォームのエラーはどう通知する?」「モーダルのフォーカスはどこへ戻す?」「色の意味はどう重ねる?」——毎回ゼロから考えると、時間もコストも増え、しかも担当者が変わるたびに品質が揺れてしまいます。

そこで力を発揮するのが、アクセシブルなデザインシステムです。
トークン(色・余白・フォーカス)とコンポーネント(ボタン・フォーム・モーダル)に、アクセシビリティの要件を最初から組み込む。そうすると、プロダクトが増えても、ページが増えても、更新があっても、やさしさが崩れにくくなります。
本記事は、単なる理想論ではなく、実務で“回る形”として、設計から運用までを丁寧にまとめますね。


2. 全体像:アクセシブルなデザインシステムは4層で作る

アクセシビリティの標準化は、次の順に積み上げると迷いません。

2.1 層1:デザイントークン(Design Tokens)

  • 色(背景・本文・リンク・境界・フォーカス)
  • 文字(サイズ・行間・太さ)
  • 余白(スペーシング)
  • 角丸、影、境界線
  • アニメーション(動きの強さ、減らす設定)

狙い:見た目の一貫性だけでなく、コントラスト・フォーカス可視・ターゲットサイズの土台を固定すること。

2.2 層2:コンポーネント仕様(Component Specs)

  • 構造(HTML/ARIAの基本)
  • 操作(キーボード、フォーカス遷移)
  • 状態(hover/focus/disabled/error/selected)
  • 文言(ラベル、ヘルプ、エラー)
  • 例外(ローディング、空状態、0件)

狙い:実装者が変わっても、体験が同じになること。

2.3 層3:受け入れ基準(Acceptance Criteria)

  • “WCAG番号”ではなく、操作結果で定義
    例:
    「Tabのみで購入完了できる」「エラー要約にフォーカスが移動する」「Escで閉じ、トリガへ戻る」

狙い:レビューが主観にならず、QAと開発が同じ言葉で話せること。

2.4 層4:運用とガバナンス(Governance)

  • 変更管理(Breaking changes、バージョン)
  • 監査(四半期ごとの代表画面チェック)
  • 問い合わせ対応(アクセシビリティ窓口)
  • 教育(オンボーディング、チェックリスト)

狙い:“一回だけ頑張る”から“ずっと守れる”へ。


3. デザイントークン設計:アクセシビリティ要件を最初から埋め込む

3.1 色トークン:コントラストを「個別確認」から「仕組み」へ

色は、デザインの自由度が高いぶん事故も起きやすいです。そこでおすすめは、色を「用途」で分けることですの。

  • --color-bg(背景)
  • --color-fg(本文)
  • --color-muted(補助)
  • --color-link(リンク)
  • --color-border(境界線)
  • --color-focus(フォーカス)
  • --color-danger(エラー)
  • --color-success(成功)

そして、次の方針をトークンの“前提”として明文化します。

  • 本文は 4.5:1 以上(通常文字)
  • 大きい文字は 3:1 以上
  • 非テキスト(境界、アイコン、フォーカス)は 3:1 以上
  • リンクは「色だけ」にしない(下線などで重ねる)

3.2 フォーカストークン:見える輪郭を標準装備に

フォーカスリングを“各プロダクトの好み”にすると、すぐに消されますの。
だから最初からトークンにして固定します。

:root{
  --focus-color: #FF9900;
  --focus-width: 3px;
  --focus-offset: 3px;
}
:focus-visible{
  outline: var(--focus-width) solid var(--focus-color);
  outline-offset: var(--focus-offset);
}
@media (prefers-contrast: more){
  :focus-visible{ outline-width: 4px; }
}

3.3 スペーシングとターゲットサイズ:押しやすさは余白で作る

ボタンやチェックボックスは、見た目よりも“押せる面積”が大切です。

  • 目安:高さ44px相当(モバイルで特に重要)
  • クリック対象は余白込みで確保(テキストだけにしない)

3.4 モーション:動きは“弱め”をデフォルトに

スケルトンやローディングなど、動きが多い領域は、認知負荷や酔いにつながりやすいですの。

  • 既定:ゆっくり、低コントラスト、点滅しない
  • prefers-reduced-motion: reduce で止める

4. コンポーネント仕様:アクセシビリティを「設計図」にする

ここからは、仕様の“型”をご紹介します。どのコンポーネントにも共通するテンプレを先に置きますね。

4.1 仕様テンプレ(おすすめの章立て)

  1. 目的:何のためのコンポーネントか
  2. 構造:HTML要素の基本、ARIAを使う場合の前提
  3. 状態:default / hover / focus / disabled / error / selected
  4. キーボード操作:Tab、矢印、Enter/Space、Esc、Home/End
  5. フォーカス管理:初期フォーカス、復帰、トラップの有無
  6. 文言ルール:ラベル、ヘルプ、エラー文の書き方
  7. レスポンシブ:狭幅時の挙動
  8. 禁止事項:事故が起きるパターン
  9. 受け入れ基準:テスト可能な文章で
  10. サンプル:最小実装例、良い例・悪い例

この型で揃えると、レビューがとても楽になりますの。


5. 重点コンポーネントの“標準仕様”例(実務で一番効くところ)

5.1 ボタン(Button)

構造

  • 基本は <button> を使う(クリックできるdivを作らない)
  • アイコンボタンは aria-label を必ず付ける

キーボード

  • Tabでフォーカス
  • Enter/Spaceで発火

受け入れ基準(例)

  • ボタンはキーボードで実行できる
  • フォーカスが視認できる(ライト/ダーク両方)
  • 無効状態は disabled を使い、見た目だけにしない

サンプル

<button type="button">保存</button>

<button type="button" aria-label="閉じる">
  <img src="close.svg" alt="">
</button>

5.2 フォームフィールド(TextField / Select / Checkbox)

(フォームは事故率が高いので、標準化の効果が最大です)

構造

  • labelfor を必ず結ぶ
  • ヒントは aria-describedby で関連付け
  • エラーは aria-invalid="true" +エラーテキスト関連付け

文言ルール

  • エラーは「どこで・なぜ・どう直す」
  • 必須/任意はラベルで明示(色だけで伝えない)

受け入れ基準(例)

  • ラベルが可視で存在し、読み上げで項目名が分かる
  • エラー発生時、エラー要約が表示され、最初のエラーへフォーカス移動できる
  • autocomplete が適切(メール、住所、氏名など)

サンプル

<div class="field">
  <label for="email">メールアドレス(必須)</label>
  <input id="email" type="email" autocomplete="email" aria-describedby="email-hint email-err" aria-invalid="true">
  <p id="email-hint">例:example@example.com</p>
  <p id="email-err" class="error" role="alert">形式が正しくありません。</p>
</div>

5.3 モーダル(Dialog)

構造

  • 可能ならネイティブ<dialog>、難しければ role="dialog" で実装
  • 背景は inert(対応外は代替)で操作不能に

フォーカス管理

  • 開いたら最初の操作要素へ
  • Tabはモーダル内で循環(トラップ)
  • Escで閉じる
  • 閉じたらトリガに戻す

受け入れ基準(例)

  • モーダル表示中、背景の要素へフォーカスが移動しない
  • Escで閉じ、元のボタンへ戻る
  • タイトルが読み上げられる(名前の提供)

5.4 タブ(Tabs)とメニュー(Menu)

標準ルール

  • Tab:領域間移動、矢印:領域内移動(ロービングTabIndex)
  • Home/Endで先頭/末尾
  • 選択状態は aria-selected などで露出

受け入れ基準(例)

  • 矢印で隣のタブへ移動できる
  • 選択中のタブが読み上げで分かる
  • パネルの内容が表示/非表示で破綻しない

5.5 テーブル(Table)

(以前の記事とつながる“標準部品”として強いです)

構造

  • 見出しセルは th
  • scope を基本、複雑表は headers/id または分割
  • caption で表の目的を示す

受け入れ基準(例)

  • スクリーンリーダーでセル移動したとき、見出しが分かる
  • モバイルで情報欠落が起きない(横スクロール等)

5.6 ローディング(Loading)と通知(Status/Alert)

標準ルール

  • 重要なエラーは role="alert"
  • 成功や完了は role="status"(割り込みすぎない)
  • スピナーは aria-hidden="true"、テキストで「読み込み中」を表示

受け入れ基準(例)

  • 読み込み状態がテキストで分かる
  • prefers-reduced-motion でアニメーションが止まる(または弱まる)

6. 受け入れ基準の書き方:WCAG番号より“操作結果”で

受け入れ基準は、チームの合意をつくる言葉です。
WCAG番号の羅列だけだと「で、何を確認すれば?」となりやすいので、次の型が効きますの。

6.1 受け入れ基準の型(おすすめ)

  • 前提:どの画面・どのコンポーネントか
  • 操作:何をするか(Tab、矢印、Enter、Escなど)
  • 期待:どうなるべきか(フォーカス、読み上げ、状態表示)
  • 例外:例外があれば明記(外部埋め込みなど)

例(モーダル)

  • 操作:設定ボタンをEnterで押しモーダルを開く
  • 期待:モーダル内の最初の操作要素へフォーカスが移動する
  • 操作:Esc
  • 期待:モーダルが閉じ、設定ボタンへフォーカスが戻る

この形にすると、QAもデザイナーも同じ言葉で話せます。


7. デザインレビューと実装レビュー:どこで何を見るか

7.1 デザインレビュー(Figmaなど)の観点

  • コントラスト(本文/リンク/非テキスト)
  • フォーカスリングの見え方(背景の上でも)
  • 状態(hover/focus/disabled/error/selected)
  • タッチターゲット(44px相当)
  • 文章(ラベル、ヘルプ、エラーの言い回し)
  • 色だけで意味を伝えていないか(アイコン・テキスト併用)

7.2 実装レビューの観点

  • ネイティブ要素優先(button、a、input)
  • ランドマークと見出し階層
  • キーボードで完遂できるか
  • aria-* の過不足(付けすぎも事故)
  • フォーカス遷移(モーダル、メニュー、エラー時)

8. 5分スモークテスト:デザインシステム側に“儀式”を置く

デザインシステムに、コンポーネント共通の最小テストを“儀式”として固定すると強いです。

  1. Tabのみで主要操作が完遂できる
  2. フォーカス可視(ライト/ダーク)
  3. モーダル:開く→操作→Esc→復帰
  4. フォーム:ラベル・必須明示・エラー要約・個別エラー関連付け
  5. 色だけに依存しない(リンク、エラー、状態)
  6. 200%拡大で破綻しない(表・コード除く)
  7. prefers-reduced-motion で動きが抑制される
  8. スクリーンリーダーで名前・役割・状態が把握できる(最低限)

9. 運用とガバナンス:デザインシステムを“使われ続ける”状態へ

9.1 変更管理(バージョニング)

  • 破壊的変更(例:モーダルAPI変更)はメジャーアップ
  • 小変更(文言追加、軽微改善)はマイナー/パッチ
  • 変更点は「何が良くなったか」を先に書く(採用されやすいですの)

9.2 例外処理(どうしても守れない時)

例外はゼロにできません。大切なのは“例外の扱いを標準化”すること。

  • 例外申請(理由、影響、代替手段、改善予定)
  • 期限を付ける(永遠の例外にしない)
  • アクセシビリティ声明や窓口と連携(置き去り防止)

9.3 役割分担(最小の体制)

  • オーナー:方針と優先度の決定
  • メンテナー:コンポーネントとドキュメント更新
  • レビュー担当:受け入れ基準のチェック
  • 窓口:利用者の困りごとを拾い、改善に繋ぐ

小さく始めても構いません。役割がゼロだと、必ず腐りますの。


10. 対象読者にとっての価値(具体)

  • デザイナー:状態・フォーカス・文言の型があり、迷いが減って制作が早くなる。
  • エンジニア:ARIAやフォーカス管理の“定石”が標準化され、回帰バグが減る。
  • QA:受け入れ基準が操作結果で定義され、検証が再現可能になる。
  • PM/運用:プロダクトが増えても品質が揺れにくく、説明責任と信頼が積み上がる。
  • 利用者:どの画面でも操作が一貫し、困ったときの導線も確保され、安心して使える。

11. アクセシビリティレベルの評価(本記事の到達点)

  • **WCAG 2.1 AAを“継続的に満たすための設計と運用”**を中心に構成しています。主に次の達成基準と結びつきます。
    • 1.1.1 非テキストコンテンツ:アイコン・画像の扱いを標準化
    • 1.3.1 情報及び関係性:フォーム、表、見出し、ランドマークの構造化
    • 1.4.1 色の使用 / 1.4.3 コントラスト / 1.4.11 非テキストコントラスト:トークンで担保
    • 1.4.10 リフロー:レスポンシブ方針を仕様へ
    • 2.1.1 キーボード:コンポーネント操作の標準化
    • 2.4.3 フォーカス順序 / 2.4.7 フォーカス可視:フォーカストークン+仕様で固定
    • 3.3.x 入力支援:エラー通知・提案・誤入力防止の標準化
    • 4.1.2 名前・役割・値:ARIAの最小正確運用
  • さらに、テストとガバナンスを含めることで、**“一度の準拠”ではなく“維持できる準拠”**に近づける内容です。

12. まとめ:やさしさを“部品”にして、チームの力にする

  1. アクセシビリティは、トークンとコンポーネントに埋め込むと強い。
  2. 仕様は「構造・操作・状態・文言・受け入れ基準」をセットで書く。
  3. 受け入れ基準はWCAG番号より、操作結果の文章で定義する。
  4. 5分スモークテストを“儀式”にして回帰を防ぐ。
  5. 例外は申請と期限で管理し、置き去りを作らない。
  6. 運用とガバナンスがあると、アクセシビリティは続き、信頼が積み上がる。

アクセシビリティは、特別な機能ではなく、日々の標準の中にあるほうが美しいですわ。
あなたのチームの“やさしさ”が、プロダクトの成長と一緒に、ずっと自然に続いていきますように。心を込めて応援しますね。

投稿者 greeden

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)