MENU

WCAG 2.1 チェックリスト

目次

WCAG 2.1 チェックリスト:実装者向け具体例集

アクセシビリティの現状と重要性

Web アクセシビリティ(a11y)はもはや「あったらいい」ではなく「必須」です。WCAG 2.1(Web Content Accessibility Guidelines 2.1)は、世界中で採用されているアクセシビリティ基準で、日本でも行政サイト・公共施設の Web サイトでは WCAG 2.1 AA レベルへの準拠が求められています。

しかし「WCAG に準拠すべき」と言われても、何から始めたら良いのか分からないという開発者も多いでしょう。

今回は、WCAG 2.1 の主要項目を「実装者向けチェックリスト」として、具体的なコード例とともにまとめておきたいと思います。

WCAG 2.1 の階層構造

WCAG 2.1 には 3 つの準拠レベルがあります:

レベル 説明 推奨される用途
A 基本的なアクセシビリティ要件 最小限の対応
AA より広いユーザーをサポート 一般的な企業サイト、公共機関
AAA 最高レベルのアクセシビリティ 医療・教育機関など

日本の多くの企業では「AA レベル」を目指すことが一般的です。

実装チェックリスト 1:色コントラスト

基準:AA レベル 4.5:1、AAA レベル 7:1

色覚障害やロービジョンのユーザーのために、テキストと背景の色コントラスト比を確保します。

❌ ダメな例:

<p style="color: #999999; background-color: #ffffff;">
  薄いグレーテキスト(コントラスト比 5.4:1)
</p>

✅ 良い例:

<p style="color: #333333; background-color: #ffffff;">
  濃いグレーテキスト(コントラスト比 12.6:1、AA/AAA両対応)
</p>

チェック方法: WebAIM Contrast Checker(https://webaim.org/resources/contrastchecker/)で確認できます。

実装チェックリスト 2:キーボード操作対応

基準:すべてのインタラクティブ要素が Tab キーで到達可能

マウスが使えないユーザーのために、Tab キーですべてのボタン・リンク・フォーム要素に到達できることが必須です。

❌ ダメな例(div をボタンに):

<div onclick="handleClick()">
  クリック
</div>

✅ 良い例(button 要素を使う):

<button onclick="handleClick()">
  クリック
</button>

タブ順序を制御する場合:

<!-- tabindex="0" で Tab キーの対象に含める -->
<div tabindex="0" role="button">カスタムボタン</div>

<!-- tabindex="-1" で Tab キーから外す -->
<div tabindex="-1">プログラムからのみアクセス</div>

実装チェックリスト 3:スクリーンリーダー対応(ARIA)

基準:screen reader で正確に情報が伝わる

スクリーンリーダー(音声読み上げソフト)を使うユーザーのために、HTML の意味を正確に伝える必要があります。

❌ ダメな例(意味が分からない):

<div>
  <div>買い物かごに追加</div>
  <div>5個入り</div>
  <div>1,980 円</div>
</div>

✅ 良い例(見出しと構造を明確に):

<article>
  <h2>商品名</h2>
  <p>内容量:5個入り</p>
  <p>価格:1,980 円</p>
  <button aria-label="買い物かごに追加">追加</button>
</article>

ARIA ラベルの種類:

<!-- aria-label:要素の用途を説明 -->
<button aria-label="ナビゲーションメニューを開く">☰</button>

<!-- aria-labelledby:別の要素でラベル付け -->
<h2 id="dialog-title">ユーザー設定</h2>
<div role="dialog" aria-labelledby="dialog-title">...</div>

<!-- aria-describedby:詳細説明を追加 -->
<input type="password" aria-describedby="pwd-hint">
<p id="pwd-hint">8文字以上、大文字・数字を含む</p>

実装チェックリスト 4:フォーカス管理

基準:キーボード操作時に現在位置が視覚的に分かる

フォーカス状態(Tab で選ばれている要素)が分かりにくいと、キーボード操作が困難になります。

❌ ダメな例(フォーカスを削除):

/* フォーカスを非表示にしている */
button:focus {
  outline: none;
}

✅ 良い例(視認可能なフォーカス):

button:focus {
  outline: 2px solid #0066cc;
  outline-offset: 2px;
}

/* または */
button:focus-visible {
  box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.3);
}

実装チェックリスト 5:セマンティック HTML

基準:要素の意味を正確に表現

スクリーンリーダーは HTML の要素の種類を読み上げます。意味のある要素を選択することが重要です。

❌ ダメな例(すべて div):

<div>
  <div>タイトル</div>
  <div>
    <div><a href="#">リンク 1</a></div>
    <div><a href="#">リンク 2</a></div>
  </div>
  <div>本文...</div>
</div>

✅ 良い例(セマンティック要素):

<header>
  <h1>タイトル</h1>
  <nav>
    <ul>
      <li><a href="#">リンク 1</a></li>
      <li><a href="#">リンク 2</a></li>
    </ul>
  </nav>
</header>
<main>
  <article>本文...</article>
</main>

実装チェックリスト 6:画像の alt テキスト

基準:すべての画像に説明的な alt テキストを記述

スクリーンリーダーは alt テキストを読み上げるため、画像の内容を正確に説明することが必須です。

❌ ダメな例(意味のない alt):

<img src="chart.png" alt="画像">
<img src="product.jpg" alt="pic">
<img src="icon.svg" alt=""><!-- 装飾画像だが alt がない -->

✅ 良い例(説明的な alt):

<!-- グラフの場合:何を示しているか、主要データを記載 -->
<img src="chart.png" alt="2026年1月〜9月の売上推移:3月にピーク達成">

<!-- 商品画像の場合:商品の特徴を記載 -->
<img src="product.jpg" alt="赤いスニーカー、サイズ27cm">

<!-- 装飾画像の場合:alt=""でスクリーンリーダーから隠す -->
<img src="icon.svg" alt="">

実装チェックリスト 7:リンク・ボタンの識別

基準:リンク・ボタンがそれぞれ識別可能

スクリーンリーダーはリンクとボタンを区別して読み上げます。正しい HTML 要素を使うことが重要です。

❌ ダメな例(意味不明なリンク・ボタン):

<!-- 「詳細」だけでは何の詳細か分からない -->
<a href="/product/123">詳細</a>

<!-- div をボタンに見立てている -->
<div onclick="submit()" style="cursor: pointer; background: blue; color: white;">
  送信
</div>

✅ 良い例(意味が明確なリンク・ボタン):

<!-- リンクのテキストで目的地が明確 -->
<a href="/product/123">商品「赤いスニーカー」の詳細ページを見る</a>

<!-- またはvisually hidden text -->
<a href="/product/123">
  詳細
  <span class="sr-only">:赤いスニーカー</span>
</a>

<!-- button 要素でボタンとして明確 -->
<button type="submit">送信</button>

Visually Hidden Text の CSS:

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

/* スクリーンリーダーと :focus-visible 時には表示 */
.sr-only:focus-visible {
  position: static;
  width: auto;
  height: auto;
  padding: inherit;
  margin: inherit;
  overflow: visible;
  clip: auto;
  white-space: normal;
}

実装チェックリスト 8:ARIA live region

基準:動的に変わるコンテンツをスクリーンリーダーに通知

ページを再読み込みせずにコンテンツが変わる場合(検索結果、エラーメッセージなど)、スクリーンリーダーに変更を通知する必要があります。

❌ ダメな例(変更が通知されない):

<div id="search-results">
  <!-- JavaScript で検索結果を挿入 -->
</div>

✅ 良い例(aria-live で通知):

<!-- aria-live="polite" で新しいコンテンツを読み上げ -->
<div id="search-results" aria-live="polite" aria-label="検索結果">
  <!-- JavaScript で検索結果を挿入 -->
</div>

<!-- aria-live の種類 -->
<!-- aria-live="polite" - 現在の読み上げ完了後に通知(推奨) -->
<!-- aria-live="assertive" - 即座に中断して通知(エラーのみ) -->
<!-- aria-live="off" - 通知しない -->

チェック・テスト方法(詳細ガイド)

自動チェックツール

1. axe DevTools(推奨)

  • Chrome/Firefox 拡張機能として提供
  • WCAG 2.1 AA/AAA の基準をカバー
  • 自動スキャンで問題を特定
  • 無料版・有料版あり

使い方: DevTools を開いて「Scan ALL of my page」をクリック → 問題がリストアップされる

2. WAVE(WebAIM)

  • ブラウザ拡張またはオンラインツール
  • ビジュアルに問題箇所を表示
  • 初心者向けで分かりやすい

3. Lighthouse(Chrome DevTools)

  • Chrome に組み込まれている
  • Performance、SEO とともにアクセシビリティスコアを測定
  • 基本的な問題のみ検出(手動確認の補助)

手動テスト

1. キーボード操作テスト

  • マウスを使わず、Tab キーのみで全機能を操作
  • チェック項目:
    • Tab キーで全要素に到達できるか?
    • Shift + Tab で逆順移動できるか?
    • Enter キーで機能が実行されるか?
    • フォーカスが視認可能か?

2. スクリーンリーダーテスト

  • macOS:VoiceOver(標準搭載、Cmd + F5 で有効化)
  • Windows:NVDA(無料、https://www.nvaccess.org/)
  • チェック項目:
    • ページの構造が正確に読み上げられるか?
    • 画像の alt テキストが読み上げられるか?
    • フォームラベルが正確か?
    • エラーメッセージが分かるか?

3. 色コントラスト測定

  • WebAIM Contrast Checker(https://webaim.org/resources/contrastchecker/)
  • 色コードを入力して AA/AAA 準拠を確認

4. 画面拡大テスト

  • ブラウザで 200%、300% に拡大
  • チェック項目:
    • テキストが読めるか?
    • 水平スクロールが必要になっていないか?
    • レイアウトが崩れていないか?

5. 音声操作テスト

  • 音声認識で操作可能か確認(Windows Narrator、macOS Dictation)

実装チェックリスト(まとめ)

項目 WCAG 基準 チェック内容
色コントラスト 1.4.3 AA テキスト vs 背景 4.5:1 以上
キーボード操作 2.1.1 A Tab キーで全要素に到達可能
フォーカス表示 2.4.7 AA :focus 時に outline 表示
ARIA ラベル 1.3.1 A screen reader が正確に読み上げる
セマンティック 1.3.1 A <button>, <nav> など意味のある要素を使用
画像の alt テキスト 1.1.1 A すべての画像に意味のある alt を記述

以上で WCAG 2.1 チェックリストの説明を終えたいと思います。

アクセシビリティは「面倒な要件」ではなく、「より多くのユーザーに価値を届ける」ための投資です。このチェックリストを参考に、段階的に対応を進めていくことで、より包括的な Web サイトが実現できますね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次