mcpField
A
a11y-testing

a11y-testing

github.com/pedronauckテスト・品質644355 回インストール1 週間前に更新
リポジトリ

a11y-testing について

axe-core でウェブコンポーネントやページを検証する、開発者向けのアクセシビリティテストスキルです。jest-axe の単体テスト、Playwright の E2E スキャン、WCAG 2.2 AA を対象とする CI ゲートを扱います。

主な機能

  1. 01jest-axe によるコンポーネントテスト
  2. 02Playwright と axe-core のページスキャン
  3. 03WCAG 2.2 AA タグの指針
  4. 04CI アクセシビリティゲート
  5. 05キーボードと操作状態の確認

活用シーン

  1. 01コンポーネント単体テストでの検証
  2. 02E2E テストでのページ監査
  3. 03違反時にプルリクエストをブロック
  4. 04操作状態とキーボードナビゲーションの確認

インストール

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

$npx skills add https://github.com/pedronauck/skills --skill a11y-testing

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

同梱ファイル

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

checklists/
a11y-testing-checklist.md
examples/
a11y-testing-examples.md
references/
a11y-testing-tools.md
templates/
a11y-test-template.ts

詳細

アクセシビリティテスト

axe-core を使用した、WCAG 2.2 準拠の自動アクセシビリティテストです。問題の 30~50%を自動的に検出します。

概要

  • CI/CD アクセシビリティゲートの実装
  • リリース前の準拠状況監査
  • 単体テストでのコンポーネントのアクセシビリティテスト
  • E2E テストでのページ単位のアクセシビリティ検証
  • キーボードナビゲーションが正しく動作することの確認

クイックリファレンス

jest-axe による単体テスト
// jest.setup.ts
import { toHaveNoViolations } from 'jest-axe';
expect.extend(toHaveNoViolations);

// Button.test.tsx
import { render } from '@testing-library/react';
import { axe } from 'jest-axe';

it('has no a11y violations', async () => {
  const { container } = render(<Button>Click me</Button>);
  expect(await axe(container)).toHaveNoViolations();
});
Playwright + axe-core による E2E テスト
// e2e/accessibility.spec.ts
import { test, expect } from "@playwright/test";
import AxeBuilder from "@axe-core/playwright";

test("page has no a11y violations", async ({ page }) => {
  await page.goto("/");
  const results = await new AxeBuilder({ page })
    .withTags(["wcag2a", "wcag2aa", "wcag22aa"])
    .analyze();
  expect(results.violations).toEqual([]);
});

test("modal state has no violations", async ({ page }) => {
  await page.goto("/");
  await page.click('[data-testid="open-modal"]');
  await page.waitForSelector('[role="dialog"]');

  const results = await new AxeBuilder({ page })
    .include('[role="dialog"]')
    .withTags(["wcag2a", "wcag2aa"])
    .analyze();
  expect(results.violations).toEqual([]);
});
CI/CD との統合
# .github/workflows/accessibility.yml
name: Accessibility
on: [pull_request]

jobs:
  a11y:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: "20", cache: "npm" }
      - run: npm ci
      - run: npm run test:a11y
      - run: npm run build
      - run: npx playwright install --with-deps chromium
      - run: npm start & npx wait-on http://localhost:3000
      - run: npx playwright test e2e/accessibility

主な決定事項

決定事項選択肢理由
テストランナーjest-axe + Playwright単体テスト + E2E の網羅性
WCAG レベルAA (wcag2aa)業界標準、法令遵守
CI ゲート違反があればブロックリグレッションの防止
ブラウザーマトリックスChromium + Firefoxクロスブラウザーの網羅性
除外対象サードパーティーウィジェットのみ見落としを最小限に抑える
タグwcag2a, wcag2aa, wcag22aaWCAG 2.2 AA を完全に網羅
状態のテストすべてのインタラクティブな状態をテストモーダル、エラー、読み込み

アンチパターン(禁止)

// BAD: Disabling rules globally
const results = await axe(container, {
  rules: { 'color-contrast': { enabled: false } }  // NEVER disable rules
});

// BAD: Excluding too much
new AxeBuilder({ page })
  .exclude('body')  // Defeats the purpose
  .analyze();

// BAD: Only testing happy path
it('form is accessible', async () => {
  const { container } = render(<Form />);
  expect(await axe(container)).toHaveNoViolations();
  // Missing: error state, loading state, disabled state
});

// BAD: No CI enforcement
// Accessibility tests exist but don't block PRs

// BAD: Manual-only testing
// Relying solely on human review - catches issues too late

関連スキル

  • e2e-testing - Playwright E2E テストのパターン
  • unit-testing - Jest 単体テストの基礎
  • design-system-starter - アクセシブルなコンポーネントの基盤

機能の詳細

jest-axe-testing

キーワード: jest, axe, 単体テスト, コンポーネントテスト, react-testing-library 解決する課題:

  • コンポーネント単位のアクセシビリティ検証
  • 開発時の迅速なフィードバック
  • CI/CD の単体テストゲート
  • コンポーネントのすべての状態(無効、エラー、読み込み)のテスト
playwright-axe-testing

キーワード: playwright, e2e, axe-core, ページスキャン, wcag, 統合 解決する課題:

  • ページ全体のアクセシビリティ監査
  • インタラクティブな状態(モーダル、メニュー、フォーム)のテスト
  • 複数ブラウザーでのアクセシビリティ検証
  • ページ単位での WCAG 準拠状況の検証
ci-a11y-gates

キーワード: ci, cd, github actions, アクセシビリティゲート, 自動化 解決する課題:

  • アクセシビリティ違反のある PR のブロック
  • リグレッションの自動防止
  • 準拠状況のレポートと成果物
  • デプロイパイプラインとの統合

コメント