mcpField
G
github-a11y-scanner

github-a11y-scanner

github.com/community-accessテスト・品質429207 回インストール今日更新
リポジトリ

github-a11y-scanner について

GitHub Accessibility Scanner の連携を扱うリファレンスで、ワークフローの検出とスキャナーが作成した Issue の解析方法を説明します。設定項目、結果のキャッシュ、差分追跡、ローカルスキャンとの照合を扱います。

主な機能

  1. 01GitHub Actions のスキャナーワークフロー検出
  2. 02スキャナー設定項目の整理
  3. 03スキャナー作成 Issue の解析
  4. 04新規、修正済み、継続中の問題の追跡
  5. 05CI とローカルスキャン結果の照合
  6. 06Copilot の修正ライフサイクル追跡

活用シーン

  1. 01リポジトリでのスキャナー設定の確認
  2. 02Issue から WCAG 基準と対象要素を抽出
  3. 03CI とローカルの検出結果を比較
  4. 04Copilot が提案した修正の進捗追跡

インストール

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

$npx skills add https://github.com/community-access/accessibility-agents --skill github-a11y-scanner

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

詳細

GitHub Accessibility Scanner の統合

GitHub Accessibility Scanner とは?

GitHub Accessibility Scanner(github/accessibility-scanner@v2)は、以下の機能を備えた GitHub 公式の Action です。

  • ヘッドレスブラウザーで axe-core を使用し、公開中の URL にあるアクセシビリティ上の障壁をスキャンします
  • 検出結果ごとに、該当要素、WCAG 基準、修正方法のガイダンスを含む、追跡可能な GitHub Issue を作成します
  • オプションで、AI を活用した修正案の提示や PR の作成を GitHub Copilot に割り当てます
  • 実行間で結果をキャッシュし、差分(新規、修正済み、継続中の検出結果)を検出します
  • 認証を伴うスキャン(ログインフロー、SSO、Playwright の auth context を介したパスキー)に対応します
  • オプションでスクリーンショットを取得し、作成した Issue に添付します

現在のバージョン: v2(パブリックプレビュー)

Scanner の設定を検出する

リポジトリに GitHub Accessibility Scanner が設定されているかどうかを判定するには、次の手順を実行します。

ワークフローファイルの検出

Scanner Action を参照するワークフローファイルを検索します。

# Search in .github/workflows/ for the scanner action reference
grep -rl "github/accessibility-scanner" .github/workflows/

YAML で一致させるパターン:

- uses: github/accessibility-scanner@v2
ワークフローの入力

Scanner のワークフローが見つかった場合、その設定を抽出します。

入力必須説明
urlsはいスキャンする URL を改行区切りで指定したリスト
repositoryはいIssue と PR の作成先となるリポジトリ(owner/name)
tokenはい書き込みアクセス権(contents、issues、PRs、metadata)を持つ、きめ細かいアクセス許可の PAT
cache_keyはい実行間で結果をキャッシュするためのファイル名(例:cached_results-mysite.json)
login_urlいいえ認証を伴うスキャンに使用するログインページの URL
usernameいいえ認証に使用するユーザー名
passwordいいえ認証に使用するパスワード(リポジトリシークレット経由)
auth_contextいいえ複雑な認証(Playwright のセッション状態)用の文字列化された JSON
skip_copilot_assignmentいいえIssue の Copilot への割り当てをスキップするには、true を設定します
include_screenshotsいいえスクリーンショットを取得するには、true を設定します(gh-cache ブランチに保存されます)

Scanner が作成した Issue の解析

Scanner は、構造化された形式の GitHub Issue を作成します。エージェントは次のフィールドを解析します。

Issue の識別

Scanner が作成した Issue は、次の方法で識別できます。

  1. 作成者: ワークフローを実行する GitHub Actions ボット
  2. ラベル: Scanner は検出結果を分類するためのラベル(通常はアクセシビリティ関連のラベル)を適用します
  3. 本文の構造: Issue には違反の詳細を記載した構造化セクションが含まれます
Issue 本文の構造

Scanner の Issue には、通常次の内容が含まれます。

セクション内容エージェントでの用途
違反のタイトル違反した axe-core ルール修正ドキュメントの help-url-reference に対応付けます
WCAG 基準該当する WCAG 達成基準重大度のスコアリングとコンプライアンスの対応付けに使用します
該当要素問題のある要素の CSS セレクターまたは HTML スニペットscanner-bridge がソースコードに対応付けるために使用します
影響レベルCritical、Serious、Moderate、Minorエージェントの重大度モデルに直接対応します
修正方法のガイダンス問題の修正方法エージェントの専門家がフレームワーク固有の修正方法で補足します
URL問題が見つかったページの URLローカルの axe-core スキャンとの相互参照に使用します
スクリーンショットのリンクgh-cache ブランチにあるスクリーンショットへのリンク(有効な場合)監査レポートに含めます
重大度の対応付け

Scanner は axe-core の影響レベルを使用し、エージェントの重大度モデルに直接対応付けます。

Scanner の影響度エージェントの重大度スコアの重み
CriticalCritical-15(両方のソース)/-10(単一のソース)
SeriousSerious-7(高い確信度)
ModerateModerate-3(高い確信度)
MinorMinor-1
axe-core ルールとの対応付け

スキャナーは内部で axe-core を使用しています。スキャナーの問題タイトルと違反 ID は、help-url-reference にすでに登録されている axe-core ルールに対応しています。スキャナーでよく報告されるルール:

axe-core ルール IDWCAG 基準一般的な説明
image-alt1.1.1画像には代替テキストが必要です
label1.3.1フォーム要素にはラベルが必要です
color-contrast1.4.3要素には十分な色のコントラストが必要です
link-name2.4.4リンクには判別可能なテキストが必要です
html-has-lang3.1.1<html> 要素には lang 属性が必要です
button-name4.1.2ボタンには判別可能なテキストが必要です
document-title2.4.2ドキュメントには <title> 要素が必要です
bypass2.4.1ページには繰り返されるブロックをスキップする手段が必要です
heading-order1.3.1見出しレベルは 1 つずつ順に上げる必要があります
aria-allowed-attr4.1.2ARIA 属性は要素のロールで許可されている必要があります

キャッシュと差分検出

スキャナーは cache_key を使用して、ワークフローの実行をまたいで結果を保持します。これにより、差分を追跡できます。

ステータス意味
新規現在のスキャンで見つかったが、キャッシュされた結果にはない問題
修正済みキャッシュされた結果にはあるが、現在のスキャンでは見つからない問題(問題は自動的にクローズされます)
継続中現在のスキャンとキャッシュされた結果の両方で見つかった問題
キャッシュキーの規則

スキャナー連携を設定するときは、エージェントの規則に合わせてキャッシュキーを設定します。

  • 説明的な名前を使用します:cached_results-{domain}-{branch}.json
  • ブランチごとのスキャンでは、ブランチのコンテキストを含めます
  • キャッシュは GitHub Actions のアーティファクトとして保存されます

ローカルスキャンとの対応付け

2 つのソースによる信頼度の向上

GitHub Accessibility Scanner(CI)とローカルの axe-core スキャン(エージェント)の両方で同じ問題が見つかった場合:

  1. ルール ID で照合: 両方のソースで axe-core のルール ID(例:color-contrast、image-alt)を使用します
  2. URL で照合: スキャナーの問題に記載されたスキャン対象 URL と、ローカルスキャンの対象を比較します
  3. 要素で照合: 影響を受ける要素の CSS セレクターまたは HTML パスを比較します
  4. 信頼度を上げる: 両方のソースで確認された検出結果には、自動的に high の信頼度が付与されます
ソースの比較分析
シナリオ解釈対応
スキャナーとローカルスキャンの両方で検出信頼度が高い — 両方で確認済み信頼度を高として報告し、重大度を最大限に反映
スキャナーのみで検出環境固有または断続的信頼度を中として報告し、「CI のみで検出」と記載
ローカルスキャンのみで検出前回の CI スキャン以降に発生、またはローカル固有の条件信頼度を中として報告し、「ローカルのみで検出」と記載
スキャナーのキャッシュで「修正済み」最近修正済み差分のセクションで解決済みとして追跡

Copilot の修正追跡

スキャナーが問題を GitHub Copilot に割り当てた場合:

修正のライフサイクル
段階GitHub の状態検出方法
問題を作成Copilot に割り当てられたオープンな issueassignee に Copilot bot が含まれる
修正を提案issue にリンクされたオープンな PRPR が issue 番号を参照し、作成者が Copilot
修正をレビューPR にレビューコメントがあるPR のレビュー状態が CHANGES_REQUESTED または APPROVED
修正をマージPR がマージされ、issue がクローズissue の状態が closed で、リンクされた PR がマージ済み
修正を却下PR がマージされずにクローズPR の状態が closed で、マージされていない
Copilot の修正状況を照会する
# Find scanner issues assigned to Copilot
repo:{REPO} is:issue is:open assignee:copilot label:accessibility

# Find Copilot PRs from scanner issues
repo:{REPO} is:pr author:copilot-swe-agent label:accessibility

# Find merged scanner fixes
repo:{REPO} is:pr is:merged author:copilot-swe-agent label:accessibility

構造化出力形式

scanner-bridge がスキャナーの問題データを正規化すると、以下の形式で検出結果を生成します。

{
  "source": "github-a11y-scanner",
  "ruleId": "color-contrast",
  "wcagCriterion": "1.4.3",
  "wcagLevel": "AA",
  "severity": "serious",
  "confidence": "high",
  "url": "https://example.com/login",
  "element": "button.submit-btn",
  "description": "Element has insufficient color contrast ratio of 3.2:1 (expected 4.5:1)",
  "remediation": "Change the text color or background to achieve at least 4.5:1 contrast ratio",
  "githubIssue": {
    "number": 42,
    "url": "https://github.com/owner/repo/issues/42",
    "state": "open",
    "copilotAssigned": true,
    "fixPR": null
  },
  "screenshot": "https://github.com/owner/repo/blob/gh-cache/screenshots/login-contrast.png"
}

スキャナーの問題を検索するパターン

リポジトリ別
repo:{OWNER}/{REPO} is:issue label:accessibility created:>{YYYY-MM-DD}
スキャン実行別

特定のスキャン実行で検出された問題は、同じ作成タイムスタンプとバッチパターンを共有します。次の条件で絞り込みます。

  • ワークフローの実行日と一致する作成日
  • スキャナーによって付与された共通のラベルセット
リポジトリ横断のスキャナー検出
user:{USERNAME} is:issue label:accessibility sort:created-desc
org:{ORGNAME} is:issue label:accessibility sort:created-desc

コメント