0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Copilotは僕らをWCAG準拠にしてくれるのか? — GitHub Copilot appによるアクセシビリティ改善の検証設計

0
Posted at

はじめに

「この画面をアクセシブルにしてください」と人工知能(AI)に頼めば、WCAG(Web Content Accessibility Guidelines)に準拠した Web アプリができあがるのでしょうか。便利な道具が増えるほど、私たちは「直した」という言葉の意味を慎重に考える必要があります。

この記事では、GitHub Issue から GitHub Copilot app のエージェントに依頼する場合の流れと、プルリクエスト(PR)を人が検証するための観点を整理します。今回は実験結果の報告ではなく、Playwright と axe-core による自動チェックや、人による利用体験の確認を含む検証設計を紹介します。

この記事で扱う検証はまだ実施していません。対象コードベースの調査、Copilot への依頼、PR 作成、テスト実行はいずれも行っておらず、以下は検証の設計と評価観点です。別の Web アプリを対象にした一度の確認記録は、記事末尾の参考記事として分けて紹介します。🧭

WCAG は、Web コンテンツのアクセシビリティに関するガイドラインです。WCAG 2.2 の AA 適合には、適合要件を満たしたうえで、適用されるレベル A と AA のすべての達成基準を満たす必要があります。自動テストの合格だけでは適合を宣言できません。まず、開発の品質要件として扱う理由を確認します。

— W3C, WCAG 2.2: Conformance Requirements

アクセシビリティは品質要件

アクセシビリティは、リリース直前に追加する「特別な機能」ではありません。フォーム入力やページ内の移動、エラーからの回復など、基本機能がさまざまな利用者に理解・操作できるかという品質の一部です。後回しにすると、画面構造や操作方法まで見直すことになります。

一方で、WCAG に適合することと、使いやすいことは同じではありません。達成基準を満たすことは大事な土台ですが、文脈に合った説明、迷いにくい操作、納得できるエラー回復まで自動で保証するわけではありません。

自動検出と人の判断

ツールは、フォームのラベルやアクセシブルネーム(支援技術に伝わる名前)、ARIA(Accessible Rich Internet Applications)構造、見出しの機械的な問題、色のコントラスト(1.4.3 Contrast (Minimum))、重複 ID などを検出する手がかりになります。ただし範囲はツールと画面状態に依存し、達成基準全体は判断できません。

axe-core には、無効な ARIA 属性やアクセシブルネームの不足などを検出するルールがあります。見出しレベルの順序を確認する heading-order もありますが、これはベストプラクティスとしての指摘です。見出しだけを読んで内容の流れが伝わるかは、人が確認する必要があります。

確認方法 主に見ること
🤖 自動チェック 名前やラベルの欠落、ARIA 構造の機械的な問題、見出し構造、重複 ID、特定条件でのコントラストなど
🧑 人による確認 画像の代替テキストが目的に合うか、操作の目的が伝わるか、フォーカス順序が自然か、エラーから回復できるか
🧑‍🦯 支援技術での確認 スクリーンリーダーで情報や状態を理解でき、次の操作を見つけられるか

alt の有無は検出できても、その文が画像の目的を伝えるかは文脈判断です。前半では「自動チェックだけでは十分でない」という原則を押さえ、後半で PR の具体的な確認方法を見ていきます。

Step 1: 自動チェックの一例 — Playwright と axe-core

Playwright のアクセシビリティテストガイドは、@axe-core/playwright によるチェック例と、自動テストに手動評価を組み合わせる必要性を説明しています。

— Playwright, Accessibility testing

Playwright と axe-core は検証方法の一例です。いつも依頼文にツール名や手順を列挙する必要はありません。リポジトリにあるテストや利用可能なツールを調べ、課題に合った方法をエージェントに選んでもらう進め方もできます。たとえば、私が別記事に記録した一度の観察では、目標を短く伝えた依頼に対し、ブラウザー上の確認や Lighthouse Snapshot などが使われていました。ただし、これはそのときの一例であり、同じ方法が毎回選ばれることや、WCAG 2.2 AA への適合を保証するものではありません。

— Qiita: WCAG 2.2 AA を目標にしたアクセシビリティ監査の記録

次は、NUnit と Microsoft.Playwright、axe-core の .NET 向け統合パッケージを使う一般的な C# の例です。テストプロジェクトに Microsoft.Playwright.NUnit と Deque.AxeCore.Playwright を追加します。URL は例示用なので、実際のプロジェクトではテスト対象の URL に置き換えてください。このコードは実行していません。

dotnet add package Microsoft.Playwright.NUnit
dotnet add package Deque.AxeCore.Playwright
using System.Threading.Tasks;
using Deque.AxeCore.Playwright;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;

[TestFixture]
public class AccessibilityTests : PageTest
{
    [Test]
    public async Task Page_has_no_automatically_detectable_violations()
    {
        await Page!.GotoAsync("https://example.com/");

        var results = await Page.RunAxe();

        Assert.That(results.Violations, Is.Null.Or.Empty);
    }
}

Playwright には .NET 用の NUnit、MSTest、xUnit のテスト基底クラスが用意されています。上の例は NUnit の PageTest を使い、Deque.AxeCore.Playwright の RunAxe() で axe-core を実行します。

このテストが調べるのは、呼び出し時点のページ状態です。メニューを開いた状態や送信後のエラー表示などは、操作してから個別にスキャンします。ルートや状態を増やしても、全ページ・全操作・全達成基準の網羅を意味しません。

違反名だけで修正を決めず、該当ノード・原因・利用者への影響・期待挙動を確かめます。診断は設計判断の代行ではありません。検出した候補を、原因・対象状態・期待する利用体験とともに Issue に整理すると、次の依頼が具体的になります。

Step 2: Issue を具体的な作業依頼にする

2026 年 9 月時点の GitHub Docs では、GitHub Copilot app の My work から Issue を開き、New session でそのコンテキストを引き継げます。Plan で計画を先に確認したり、Interactive で対話したりできます。Cloud agent はリポジトリを調査し、ブランチ上で変更や自動テストを行えます。機能や手順は環境・権限に依存するため、ここでは一般的な依頼フローとして説明します。

「アクセシビリティを改善してください」のような短い依頼でも、エージェントがコードを調査し、利用できるツールから検証方法を選べる場合があります。実際にどこまで進められるかは、作業環境やツールへのアクセスに左右されます。また、依頼が短いほど、対象範囲や品質の判断を人が後から補う必要が出やすくなります。

たとえば、具体的な手順を任せたいときは、達成したい状態と報告してほしいことを伝え、Playwright や Lighthouse などの手段はエージェントに選ばせる書き方ができます。

このアプリのアクセシビリティを改善してください。
実装と検証に適した方法は、リポジトリと利用可能なツールを調べて選んでください。
選んだ方法と理由、確認した範囲、結果、未確認事項を Pull Request に記載してください。

対象画面や受け入れ条件を細かく指定したい場合は、Issue に追加します。どこまでを指示するかは、委譲したい判断の範囲と、必要なレビューの確かさに応じて調整できます。

具体的な Issue 本文テンプレートは、この節の後半に載せます。まず、依頼で達成基準を指定する際の参照例を確認します。

Issue で参照する達成基準を選ぶ

WCAG 2.2 の達成基準は番号と名称で参照し、内容を取り違えないようにします。以下では W3C の原文を引用し、続けて日本語で要点を説明します。いずれか一つの達成基準を満たしても、それだけで WCAG 2.2 AA 適合を表すものではありません。

1.1.1 Non-text Content(非テキストコンテンツ)
“All non-text content that is presented to the user has a text alternative that serves the equivalent purpose, except for the situations listed below.”

要約: 原則として、利用者に提示する非テキストコンテンツには、同等の目的を果たすテキスト代替を提供します(例外があります)。

— W3C, WCAG 2.2, 1.1.1

2.4.3 Focus Order(フォーカス順序)
“If a Web page can be navigated sequentially and the navigation sequences affect meaning or operation, focusable components receive focus in an order that preserves meaning and operability.”

要約: ページを順次ナビゲートでき、その順序が意味や操作に影響する場合、フォーカス可能なコンポーネントは意味と操作性を保つ順序でフォーカスを受け取ります。

— W3C, WCAG 2.2, 2.4.3

4.1.2 Name, Role, Value(名前・役割・値)
“For all user interface components (including but not limited to: form elements, links and components generated by scripts), the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.”

要約: UI コンポーネントの名前と役割をプログラムから判別でき、ユーザーが設定できる状態なども設定可能にし、その変更を支援技術を含むユーザーエージェントに伝えます。

— W3C, WCAG 2.2, 4.1.2

達成基準の詳細な適用条件や例外は W3C の原文を参照し、Issue には該当する番号を明記しましょう。

Issue 本文テンプレート

以下は記入用テンプレートです。角括弧は置き換え用で、特定アプリの実装や確認済みの違反ではありません。未調査なら「確認して報告」とします。

## 目的
[ページ/コンポーネント名・URL] のアクセシビリティを改善します。

## 現象・対象
- 対象画面: [ルート、コンポーネント、操作状態]
- 確認できている問題: [再現手順と観察内容。未確認なら「調査して報告」]
- 関連する達成基準: WCAG 2.2 AA の [番号・名称](該当する場合)
- 期待する利用者体験: [キーボード/スクリーンリーダー等で何ができるべきか]

## 制約
- 既存のフレームワーク、デザイン、命名規則を尊重し、変更範囲を必要最小限にする。
- まず意味のある HTML 要素を使う。ARIA は不足する意味や状態を補う必要がある場合に限る。
- UI の見た目や既存機能を不用意に変更しない。
- 問題や影響範囲を確認できない場合は、推測で変更せず質問・報告する。

## 受け入れ条件
- [対象状態] で問題が解消し、目的の操作・情報が利用できる。
- リポジトリで利用できるテストやブラウザー監査の方法を確認し、課題に合った方法で受け入れ条件を確かめる。ツールの選定は、必要に応じて実装担当のエージェントに任せる。
- 実行したテストや監査の方法・対象状態・結果・限界を報告する。実施できない確認があれば、その理由と未確認範囲を明記する。
- 関連する既存テストを実行し、失敗があれば変更との関係を説明する。
- 変更の理由、確認した達成基準、未確認の項目を PR に記載する。

## 検証方法に関する制約(必要な場合)
- [既存のCIで実行すること、特定のツールを使うことなど、必要な条件があれば記入]
- 指定がない場合は、既存の構成と利用可能なツールを調べて適切な方法を選び、選択理由を報告する。

## PR に記載すること
- 変更内容と対象画面
- 実行したテスト・自動チェックと結果
- 手動確認の内容、未実施の確認
- 既知の制約や、追加で必要な判断

Step 3: Issue から PR まで依頼する

流れは、Issue 作成、Copilot app での New session、計画・調査・変更・テスト、PR のレビューです。Plan を使える場合は対象範囲と変更方針を先に確認します。実装担当のエージェントは、依頼に書かれた目標と完了条件を踏まえ、既存テストや利用できるブラウザー監査などから方法を選ぶことがあります。ただし、選べる方法は実行環境やツールへのアクセスに左右されるため、必ず自律的にテストできるとは限りません。作業後は差分と結果を人が読み、未実施の確認を把握します。

PR を作成できることと、変更が利用者にとって正しいことは別です。変更をレビューし、必要なら反復します。PR をゴールにせず検証へ進みましょう。🧭

Step 4: PR で確かめること

PR では、少なくとも次の四つを分けて確認します。

  • 問題は解消したか — Issue の再現手順と期待挙動に照らし、対象状態を実際に確認します。
  • 自動チェックは再現できるか — 指定した、またはエージェントが選んだテスト・監査について、対象ページ・操作状態・結果・限界を確認します。Playwright と axe-core や Lighthouse など、使われた手段を記録します。継続的インテグレーション(CI)に組み込む場合は、PR ごとに同じ手順が走ることも確かめます。
  • 既存機能は維持されたか — 関連するユニットテスト・エンドツーエンド(E2E)テストと主要操作を実行し、画面や挙動の回帰がないかを見ます。
  • 利用体験は改善したか — 名前や状態が伝わるか、操作に迷わないか、エラーから戻れるかを人が確かめます。

ARIA 属性を足しただけで正解とは限りません。 ネイティブ HTML の意味を活用したほうが単純で堅牢な場合がありますし、誤った aria-label やロールは、見た目には変化がなくても情報を誤って伝える可能性があります。変更の理由とユーザーに伝わる結果を確認してください。

手動確認の観点

  • マウスを使わず、キーボードだけで操作できるか。フォーカスが見え、順序が画面の意味と操作に合っているか。
  • ブラウザーのズームや文字拡大で、内容が欠けたり操作不能になったりしないか。
  • スクリーンリーダーで、ラベル・役割・状態・見出し・更新内容を理解できるか。
  • 入力エラーが起きたとき、問題箇所と直し方が分かり、修正後に処理を続けられるか。

自動チェックは、実行したページと状態の証拠として PR に残します。「違反ゼロ」だけで適合を宣言せず、未確認の画面・支援技術・操作も明示します。最後に、誰が何を担うべきかを整理しましょう。

AI に任せる作業、人が担う責任

AI に委譲しやすいのは、対象範囲が明確な調査、機械的な候補の列挙、テスト追加、修正案の作成、関連テストの実行と結果の記録です。既存のコード規約に沿った変更を提案させることもできます。

一方で、代替テキストがその場の目的に合っているか、操作順序が利用者にとって理解しやすいか、画面の変化がスクリーンリーダーで適切に伝わるか、エラー回復が十分かは、人が責任を持って判断します。障害のある利用者を含む実際の利用者からのフィードバックも、必要に応じて評価に加えます。

理想は、Issue で目標と完了条件を明確にし、エージェントが既存構成やツールに応じた方法で作業・検証し、人が PR をレビューするサイクルです。必要に応じて Playwright + axe-core のような CI チェックを組み合わせ、手動確認や利用者評価の結果を次の Issue に反映します。CI は対象画面での回帰を継続的に見つける助けになりますが、実行対象に含まれない状態や人の判断を肩代わりしません。

おわりに

GitHub Issue から PR・CI で確認する流れを整理しました。対象の実装や違反内容は提示されておらず、Copilot への依頼やテストも実施していません。

持ち帰りは三つです。

  • アクセシビリティは後付け機能ではなく、開発時から扱う品質要件です。
  • 自動検出で見つかった問題は、原因と期待挙動を理解してから修正します。
  • 方法を委ねる場合も、PR で選ばれた検証方法・確認範囲・未確認事項を読み、必要な操作体験を人が確認します。

AI に任せるのは責任ではなく作業です。 AI だけで WCAG 準拠を保証できませんが、達成したい状態を伝え、選ばれた方法と結果を人が確かめることで改善を支援できます。♿

関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?