Primary tabs

独自コンポーネントのアクセシビリティ(4.1.2 A)

12 September 2025

適合レベル

A

※各レベルについては適合レベルとはをご覧ください


概要

独自に作成したUIコンポーネントには、WAI-ARIAを用いて役割や状態を明示し、キーボード操作を可能にする。


具体的な実装方法

4.1.2 A

1.  ⭕️良い例

可能な限り、標準のHTMLコントロールを使用します。カスタムコンポーネントを作成する場合は、WAI-ARIAを用いて名前、役割、値を明示的に指定します。

ポイント

  • 役割 (Role): role属性でコンポーネントの種類を指定します(例: role="button")。
  • 名前 (Name): <label>要素の関連付け、aria-labelaria-labelledbyなどで名前を提供します。
  • 値 (Value): aria-checkedaria-selectedaria-valuenowなどのARIAステート(状態)プロパティで値や状態を示します。

実装例 (HTML)

<!-- 良い例: 標準的なHTML要素を使用 -->
<button onclick="doSomething()">保存する</button>

 
<!-- 良い例: ARIAを使用してカスタムボタンを実装 -->
<div role="button" tabindex="0" onclick="doSomething()" onkeydown="handleKeyDown(event)">
  保存する
</div>

 
<!-- 良い例: ARIAを使用してカスタムチェックボックスを実装 -->
<div role="checkbox" aria-checked="false" tabindex="0" onclick="toggleCheckbox(this)">
  <img src="unchecked.png" alt=""> 同意する
</div>

2.  ❌悪い例 

  • <div><span>onclickイベントのみを設定: <div>にクリックイベントを設定しただけでは、それは単なるクリックできる<div>であり、ボタンとしての役割や名前が支援技術に伝わりません。
  • ARIAの役割や状態が欠落: カスタムコンポーネントにrole属性がない、または状態が変化してもaria-checkedなどの値が更新されない。

なぜ問題なのか

これらの実装では、コンポーネントの「名前」「役割」「値」というアクセシビリティAPIに必要な情報が欠落しているため、支援技術はそれを解釈できません。

改善策

  • まずは標準のHTMLコントロールで実装できないか検討します。
  • カスタムコンポーネントを実装する場合は、必ずrole属性で役割を定義し、tabindex="0"でフォーカス可能にします。さらに、aria-*属性を用いて名前と状態を管理します。

3. プラットフォーム別の実装

Webページでは、HTMLとWAI-ARIAを組み合わせて実装します。

4. 特殊なケースへの対応 

  • フレーム (<iframe>): <iframe>要素には、そのフレームの内容を説明する`title`属性を指定することで、アクセシブルな「名前」を提供する必要があります。

確認観点

4.1.2 A

1. 定量的な基準の担保

自動チェックツールでの確認

  • LighthouseAxeは、ARIAの役割や必須属性の欠落、不適切な使用などを検出するのに非常に有効です。「ARIA roles are valid」や「Elements have accessible names」などの項目を確認します。

チェックリストの達成度

2. 定性的な基準の担保

レビュー

  • コードレビューにおいて、カスタムUIコンポーネントがARIAの仕様に従って正しく実装されているかを確認します。

専門家による監査

  • アクセシビリティ専門家が、ブラウザのアクセシビリティツリー(開発者ツールで確認可能)を調査し、各コンポーネントの名前、役割、値が正しく公開されているかを検証します。
  • 実際にスクリーンリーダーを使い、コンポーネントが意図通りに読み上げられ、操作できるかをテストします。

参考文献

> 達成基準 4.1.2: 名前 (name)・役割 (role)・値 (value) を理解する