mcpField
A
a11y-audit

a11y-audit

github.com/alirezarezvaniテスト・品質28.9k980 回インストール2 日前に更新
リポジトリ

a11y-audit について

a11y-auditは、Webアプリを保守するチーム向けのアクセシビリティ監査スキルです。スキャン、修正、検証の手順でWCAG 2.2のレベルAとAAを確認し、フレームワーク別の修正案とレポートを作成します。

主な機能

  1. 01WCAG 2.2 A/AAのスキャン
  2. 02フレームワークの検出
  3. 03重要度による分類
  4. 04フレームワーク別の修正例
  5. 05色のコントラスト検査
  6. 06コンプライアンスレポートとCI出力

活用シーン

  1. 01Webプロジェクトのアクセシビリティ監査
  2. 02検出した違反への修正案を作成
  3. 03変更を検証しリグレッションを確認
  4. 04コンプライアンス関係者向けレポート作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alirezarezvani/claude-skills --skill a11y-audit

インストール後、Claude Code で/a11y-auditを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
sample-component.tsx
expected_outputs/
sample-contrast-output.txt
sample-scan-output.json
sample-scan-report.md
references/
aria-patterns.md
audit-report-template.md
ci-cd-integration.md
color-contrast-guide.md
examples-by-framework.md
framework-a11y-patterns.md
testing-checklist.md
wcag-22-new-criteria.md
wcag-quick-ref.md
scripts/
a11y_scanner.py
contrast_checker.py

詳細

アクセシビリティ監査

WCAG 2.2 アクセシビリティ監査と修正スキル

説明

a11y-audit スキルは、最新の Web アプリケーション向けに、アクセシビリティ監査の完全なパイプラインを提供します。Scan、Fix、Verify の 3 フェーズのワークフローを実装しており、WCAG 2.2 レベル A および AA の違反を特定し、フレームワークごとの正確な修正コードを生成し、関係者向けのコンプライアンスレポートを作成します。

検出した違反ごとに、使用しているフレームワーク(React、Next.js、Vue、Angular、Svelte、またはプレーン HTML)に合わせて、修正前と修正後の正確なコードを提示します。

このスキルの機能:

  1. コードベースをスキャンし、WCAG 2.2 レベル A および AA の違反をすべて重大度(Critical、Major、Minor)別に分類します
  2. フレームワーク固有の修正前・修正後のコードパターンで各違反を修正します
  3. 修正によって元の違反が解消され、リグレッションが発生していないことを検証します
  4. 開発者、PM、コンプライアンス関係者に適した構造化形式で検出結果を報告します
  5. CI/CD パイプラインに統合し、アクセシビリティのリグレッションを防止します

機能

機能説明
WCAG 2.2 の完全スキャンコードベース全体のレベル A および AA の達成基準をすべてチェックします
フレームワーク検出React、Next.js、Vue、Angular、Svelte、またはプレーン HTML を自動検出します
重大度の分類各違反を Critical、Major、Minor に分類します
修正コードの生成すべての問題について、修正前・修正後のコード差分を生成します
色のコントラストチェッカー前景色と背景色の組み合わせを AA および AAA の比率で検証します
コンプライアンスレポート合否の概要を含む関係者向けレポートを生成します
CI/CD 統合GitHub Actions、GitLab CI、Azure DevOps のパイプライン設定
キーボード操作の監査フォーカス管理の不足やタブ順の問題を検出します
ARIA の検証不適切、冗長、または不足している ARIA 属性をチェックします
重大度の定義
重大度定義例SLA
Criticalユーザーグループ全体のアクセスを妨げますalt テキストの欠落、キーボードでナビゲーションを操作できないリリース前に修正
Major利用体験を損なう重大な障壁です色のコントラスト不足、フォームラベルの欠落現在のスプリント内に修正
Minor操作に支障をきたすユーザビリティ上の問題です冗長な ARIA ロール、最適でない見出し階層次の 2 スプリント以内に修正

使い方

クイックスタート
# Scan entire project
python scripts/a11y_scanner.py /path/to/project

# Scan with JSON output for tooling
python scripts/a11y_scanner.py /path/to/project --json

# Check color contrast for specific values
python scripts/contrast_checker.py --fg "#777777" --bg "#ffffff"

# Check contrast across a CSS/Tailwind file
python scripts/contrast_checker.py --file /path/to/styles.css
スラッシュコマンド
/a11y-audit                    # Audit current project
/a11y-audit --scope src/       # Audit specific directory
/a11y-audit --fix              # Audit and auto-apply fixes
/a11y-audit --report           # Generate stakeholder report
/a11y-audit --ci               # Output CI-compatible results
3 フェーズのワークフロー

フェーズ 1:Scan -- ソースツリーを調べ、フレームワークを検出し、ルールセットを適用します。

python scripts/a11y_scanner.py /path/to/project --format table

フェーズ 2:Fix -- 各違反に対してフレームワーク固有の修正を適用します。

修正パターンの完全なカタログについては、references/framework-a11y-patterns.md を参照してください。

フェーズ 3:Verify -- スキャナーを再実行し、修正を確認してリグレッションがないかチェックします。

python scripts/a11y_scanner.py /path/to/project --baseline audit-baseline.json

例:React コンポーネントの監査

// BEFORE: src/components/ProductCard.tsx
function ProductCard({ product }) {
  return (
    <div onClick={() => navigate(`/product/${product.id}`)}>
      <img src={product.image} />
      <div style={{ color: '#aaa', fontSize: '12px' }}>{product.name}</div>
      <span style={{ color: '#999' }}>${product.price}</span>
    </div>
  );
}
#WCAG重大度問題
11.1.1Critical<img> に alt 属性がありません
22.1.1Critical<div onClick> をキーボードで操作できません
31.4.3Major白地に #aaa の色ではコントラストが不足します(2.32:1、必要な比率は 4.5:1)
41.4.3Major白地に #999 の色ではコントラストが不足します(2.85:1、必要な比率は 4.5:1)
54.1.2Majorインタラクティブ要素にロールとアクセシブルネームがありません
// AFTER: src/components/ProductCard.tsx
function ProductCard({ product }) {
  return (
    <a href={`/product/${product.id}`} className="product-card"
       aria-label={`View ${product.name} - $${product.price}`}>
      <img src={product.image} alt={product.imageAlt || product.name} />
      <div style={{ color: '#595959', fontSize: '12px' }}>{product.name}</div>
      <span style={{ color: '#767676' }}>${product.price}</span>
    </a>
  );
}

Vue、Angular、Next.js、Svelte の例については、references/examples-by-framework.md を参照してください。

ツールのリファレンス

a11y_scanner.py
Usage: python scripts/a11y_scanner.py <path> [options]

Options:
  --json                  Output results as JSON
  --format {table,csv}    Output format (default: table)
  --severity {critical,major,minor}  Filter by minimum severity
  --framework {react,vue,angular,svelte,html,auto}  Force framework (default: auto)
  --baseline FILE         Compare against previous scan results
  --report                Generate stakeholder report
  --output FILE           Write results to file
  --quiet                 Suppress output, exit code only
  --ci                    CI mode: non-zero exit on critical issues
contrast_checker.py
Usage: python scripts/contrast_checker.py [options]

Options:
  --fg COLOR              Foreground color (hex)
  --bg COLOR              Background color (hex)
  --file FILE             Scan CSS file for color pairs
  --tailwind DIR          Scan directory for Tailwind color classes
  --json                  Output results as JSON
  --suggest               Suggest accessible alternatives for failures
  --level {aa,aaa}        Target conformance level (default: aa)

よくある落とし穴

落とし穴正しい方法
<div> に role="button" を設定するネイティブの <button> を使います。キーボード操作への対応が標準で備わっています
すべての要素に tabindex="0" を設定するフォーカスが必要なのはインタラクティブな要素だけです。ネイティブ要素を使います
インタラクティブでない要素に aria-label を設定する表示されているテキストを参照する aria-labelledby を使います
スクリーンリーダーから隠すために display: none を使う代わりに .sr-only クラスを使います
色だけで意味を伝える色とともにアイコン、テキストラベル、またはパターンを追加します
プレースホルダーだけをラベルとして使う常に表示される <label> を用意します
代替手段なしで outline: none を使うfocus-visible を使って、常に視認できるフォーカスインジケーターを用意します
情報を伝える画像に空の alt="" を設定する情報を伝える画像には説明的な代替テキストが必要です
見出しレベルを飛ばす(h1 -> h3)見出しレベルは順番に並べる必要があります
onKeyDown なしで onClick を使うキーボード操作への対応を追加するか、ネイティブ要素を使います
prefers-reduced-motion を無視するアニメーションは @media (prefers-reduced-motion: no-preference) で囲みます

関連スキル

スキル関連性
senior-frontenda11y の修正で使用するフロントエンドのパターン
code-reviewerコードレビューのワークフローに a11y のチェックを含める
senior-qaQA プロセスへの a11y テストの統合
playwright-proアクセシビリティのアサーションを用いた自動ブラウザーテスト
epic-designWCAG 2.1 AA に準拠したアニメーションとスクロールによるストーリーテリング
tdd-guidea11y テストケースのテスト駆動開発パターン

参考ドキュメント

参考資料説明
wcag-quick-ref.mdWCAG 2.2 レベル A および AA の基準クイックリファレンス
wcag-22-new-criteria.mdWCAG 2.2 の新しい達成基準(フォーカスの表示、ターゲットサイズなど)
aria-patterns.mdARIA パターン、キーボード操作、ライブリージョン
framework-a11y-patterns.mdフレームワーク固有の修正パターン(React、Vue、Angular、Svelte、HTML)
color-contrast-guide.md色のコントラストチェッカーの詳細、Tailwind パレットのマッピング、sr-only クラス
ci-cd-integration.mdGitHub Actions、GitLab CI、Azure DevOps、pre-commit フックの設定
audit-report-template.md関係者向けの監査レポートテンプレート
testing-checklist.md手動テストのチェックリスト(キーボード、スクリーンリーダー、視覚、フォーム)
examples-by-framework.mdVue、Angular、Next.js、Svelte の監査例(全編)

リソース

コメント