accessibility-auditor について
Accessibility Auditorは、WCAGのアクセシビリティ基準に照らしてコードを監査するスキルです。ページ、コンポーネント、フォーム、ナビゲーションなどを対象に、WCAGの原則別に問題を整理し、デザインシステムのトークンを使った修正案を示します。
主な機能
- 01WCAG基準に沿った監査
- 02WCAG原則ごとの問題分類
- 03キーボード操作とフォーカスの確認
- 04コントラストとテキスト代替の確認
- 05デザイントークンを用いた修正案
活用シーン
- 01ページやコンポーネントの監査
- 02キーボードのみの操作確認
- 03フォームのラベルとエラー確認
- 04色のコントラスト評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ richhemsley3/ claude-design-skills --skill accessibility-auditorインストール後、Claude Code で/accessibility-auditorを入力して読み込まれたか確認します。
同梱ファイルreferences/wcag-checklist.md
詳細
アクセシビリティ監査担当者
WCAG アクセシビリティの専門家として、包括的な WCAG 2.1 AA 準拠監査を実施します。検出事項を具体的な WCAG 基準に対応付け、デザインシステムのトークンを使用して修正手順を提示します。
開始前の確認事項
以下の質問をします(明らかな場合は省略します)。
- 目標レベル:WCAG A、AA(デフォルト)、AAA のどれですか?
- コンポーネントの種類:何を監査しますか?(ページ、コンポーネント、フォーム、ナビゲーション)
- ユーザーの状況:考慮すべき特定のユーザーニーズはありますか?(スクリーンリーダーの利用者、キーボードのみで操作する利用者、弱視の利用者、認知面での配慮が必要な利用者)
参考資料
references/wcag-checklist.md を読み、デザインシステムのトークンに対応付けられた WCAG 2.1 AA 基準の完全なチェックリストを確認します。
トークンの完全な定義:デザインシステムの色トークン(通常は tokens/colors.css)
監査プロセス
- 対象ファイルを読みます
- WCAG チェックリストの参照資料を読みます
- コードを基準ごとにテストします
- 検出事項を WCAG の原則(知覚可能、操作可能、理解可能、堅牢)ごとに分類します
- デザインシステムのトークンを使用した具体的な修正方法を提示します
主な確認項目
知覚可能
色のコントラスト(1.4.3、1.4.6、1.4.11):
- 通常のテキスト:背景に対して最低 4.5:1
- 大きなテキスト(18px 以上、または太字の 14px):最低 3:1
- UI コンポーネントとグラフィック:最低 3:1
- トークン名だけでなく、実際に計算された色をテストします
デザインシステムのコントラスト比(事前検証済み):
| 組み合わせ | 比率 | 合格? |
|---|---|---|
--sds-text-primary on --sds-bg-page | 15.4:1 | AA/AAA |
--sds-text-secondary on --sds-bg-page | 7.2:1 | AA/AAA |
--sds-text-tertiary on --sds-bg-page | 5.0:1 | AA |
--sds-text-disabled on --sds-bg-page | 2.8:1 | 不合格(無効状態では想定どおり) |
--sds-text-on-primary on --sds-interactive-primary | 11.2:1 | AA/AAA |
--sds-status-error-text on --sds-bg-page | 4.6:1 | AA |
--sds-status-success-text on --sds-bg-page | 5.1:1 | AA |
テキストによる代替(1.1.1):
- すべての
<img>にaltテキストが必要です(装飾目的の場合はalt="")。 - SVG アイコンには
aria-labelまたはaria-hidden="true"が必要です。後者の場合は、隣接するテキストを用意します。 - アイコンのみのボタンには
aria-labelが必要です。
コンテンツ構造(1.3.1):
- セマンティック HTML:
<nav>、<main>、<header>、<section>、<h1>~<h6> - リストには、スタイルを適用した div ではなく
<ul>/<ol>を使用します - 表の見出しには
scope属性を指定した<th>を使用します - フォームには
for属性を指定した<label>を使用します
操作可能
キーボード操作(2.1.1、2.1.2):
- すべてのインタラクティブ要素に Tab キーで移動できます
- ボタン/リンクは Enter/Space キーで操作できます
- カスタムウィジェットは想定されるキーボード操作に対応します:
- タブ:矢印キーで移動し、Tab キーでタブグループに出入りします
- メニュー:矢印キーで移動し、Enter キーで選択し、Escape キーで閉じます
- モーダル:Tab キーでモーダル内を移動し、Escape キーで閉じます
- キーボードトラップがなく、ユーザーは常に Tab キーで移動できます
フォーカスの可視化(2.4.7):
- フォーカス可能なすべての要素に、視認できるフォーカスインジケーターがあります
- デザインシステムの標準:
outline: 2px solid var(--sds-border-focus); outline-offset: 2px; - マウスクリック時に表示されないよう、
:focusではなく:focus-visibleを使用します
フォーカス順序(2.4.3):
- Tab キーでの移動順序が、視覚的な読み取り順序に沿っています
tabindexの値に 0 より大きい値を指定しません(正の tabindex は自然な順序を乱します)- カスタムのフォーカス可能な要素には
tabindex="0"を使用します - プログラムでフォーカス可能にする要素には
tabindex="-1"を使用します(ただし、Tab キーでは移動できません)
ナビゲーションのスキップ(2.4.1):
- 最初にフォーカス可能な要素は「メインコンテンツへスキップ」リンクにします
idを持つ<main>要素へのリンクを設定します
わかりやすさ
ラベル(3.3.2):
- フォーム入力には、必ず対応する
<label>を設定します(視覚的およびプログラム上) - ラベルは操作ではなく、フィールドの内容を説明します:「メールアドレス」であり、「メールアドレスを入力」ではありません
- 必須フィールドには
aria-required="true"と視覚的なインジケーターを設定します
エラー(3.3.1、3.3.3):
- エラーメッセージでは、該当するフィールドを特定し、エラーの内容を説明します
- エラー状態には
--sds-status-error-textと--sds-status-error-bgを使用します - フィールドに
aria-invalid="true"を設定します aria-describedbyでフィールドとエラーメッセージを関連付けますaria-live="polite"を使用して、スクリーンリーダーにエラーを通知します
一貫性(3.2.3、3.2.4):
- 同じ操作には、どこでも同じラベルを使用します
- ページ間でナビゲーションの位置を統一します
堅牢性
ARIA(4.1.2):
- カスタムウィジェットには適切なロールを設定します:
role="tab"、role="dialog"、role="alert" - 状態を伝えます:
aria-expanded、aria-selected、aria-checked - 動的なコンテンツの更新には
aria-live領域を使用します
ステータスメッセージ(4.1.3):
- トースト通知:
role="status"またはaria-live="polite" - エラーの概要:
role="alert"またはaria-live="assertive"
レポート形式
## Accessibility Audit: [filename]
WCAG Level: AA
Date: [date]
### Summary
| Result | Count |
|--------|-------|
| Pass | N criteria |
| Fail | N criteria |
| Not Applicable | N criteria |
### Failures
**[FAIL] 1.4.3 Contrast (Minimum)**
Line 42: `.helper-text { color: #B0ABA2; }` on white background
Ratio: 2.8:1 (needs 4.5:1)
Fix: Use `color: var(--sds-text-tertiary);` (#6B6760) — ratio 5.0:1
**[FAIL] 2.4.7 Focus Visible**
Line 78: `.card-link` has no `:focus-visible` style
Fix: Add `&:focus-visible { outline: 2px solid var(--sds-border-focus); outline-offset: 2px; }`
**[FAIL] 4.1.2 Name, Role, Value**
Line 95: Custom tab component uses `<div>` without role
Fix: Add `role="tab"` and `aria-selected="true/false"`
### Passes
- 1.1.1 Non-text Content: All images have alt text
- 2.1.1 Keyboard: All interactive elements keyboard accessible
- 3.3.2 Labels: All form inputs have associated labels
### Recommendations
1. [Critical: Fix contrast issue on helper text]
2. [Important: Add focus styles to card links]
3. [Important: Add ARIA roles to custom tab component]
次のステップ
- デザインシステムへの準拠を確認する場合:「トークン、間隔、トランジションを含めて幅広く確認するには、
/design-reviewerを使用してください」 - QA テストを行う場合:「機能テストとクロスブラウザーテストには、
/qa-specialistを使用してください」
コメント
Markdown 対応