アクセシビリティ(a11y)対応の基本|WAI-ARIAの使い方

Web開発

アクセシビリティ(a11y)は、障害の有無や使用環境に関わらず、すべての人がWebサービスを利用できるようにするための設計指針です。本記事では、a11y対応の基本と、WAI-ARIA属性の正しい使い方をわかりやすく解説します。

アクセシビリティとは

a11yは「accessibility」の「a」と「y」の間に11文字あることに由来する略称です。視覚・聴覚・運動・認知などさまざまな障害をもつユーザーや、キーボード操作・スクリーンリーダー・低速回線の利用者にとっても使いやすいWebを実現することを指します。

基本の4原則(WCAG)

  • 知覚可能:情報がユーザーに知覚できる形で提示されている
  • 操作可能:キーボードや支援技術で操作できる
  • 理解可能:情報やUIの動作が予測可能
  • 堅牢:将来の技術にも対応できる実装

まず押さえるべき基本

  • セマンティックなHTMLを使う(<button> <nav> <main>等)
  • すべての画像にalt属性
  • ラベルと入力要素をlabel htmlForで関連付け
  • キーボードのみで全機能を操作できる
  • フォーカスインジケータ(:focus-visible)を消さない
  • 文字サイズはrem/em(拡大に対応)
  • コントラスト比は本文4.5:1以上

WAI-ARIAとは

WAI-ARIAは、HTMLだけでは表現できない「役割(role)」や「状態(state)」を支援技術に伝えるための属性群です。スクリーンリーダーがUIを正しく読み上げるのに必要な情報を補います。

ARIA属性の基本パターン

<!-- アイコンボタンに名前を与える -->
<button aria-label="検索">
  <svg>...</svg>
</button>

<!-- モーダルダイアログ -->
<div role="dialog" aria-modal="true" aria-labelledby="title">
  <h2 id="title">確認</h2>
</div>

<!-- 開閉状態 -->
<button aria-expanded="false" aria-controls="menu">メニュー</button>
<ul id="menu" hidden>...</ul>

<!-- ライブリージョン(動的更新) -->
<div aria-live="polite" id="status"></div>

ARIAの第一法則:「使わないで済むなら使うな」

WAI-ARIAの公式ガイドラインには「適切なHTML要素・属性で表現できるなら、ARIAは使うな」と明記されています。<button><div role="button">で代替するのはアンチパターン。セマンティックHTMLを最優先し、足りない部分をARIAで補うのが正解です。

チェックツール

  • axe DevTools:Chrome/Firefox拡張・CLI/CI連携
  • Lighthouse Accessibility監査:基本項目を自動チェック
  • WAVE:Web AIM提供の視覚的チェッカー
  • スクリーンリーダー実機:VoiceOver(Mac/iOS)、NVDA(Windows)、TalkBack(Android)

まとめ

a11y対応は「特別な人のため」ではなく、すべてのユーザーの体験を底上げする取り組みです。セマンティックHTMLを基本に、必要な箇所だけARIAで補完するスタンスを覚えれば、難しい技術ではありません。まずはaxe DevToolsで自サイトをスキャンするところから始めましょう。