mcpField
A
accessibility

accessibility

github.com/krzysztofsurdyデザイン・UI3642 回インストール2 日前に更新
リポジトリ

accessibility について

障害のある人を含む幅広い利用者向けのウェブインターフェースを作るデザイナーや開発者向けのリファレンスです。WCAGに加え、セマンティックHTML、フォーム、コントラスト、キーボード操作、テストの実践指針をまとめています。

主な機能

  1. 01WCAGの原則と適合レベル
  2. 02セマンティックHTMLの指針
  3. 03アクセシブルなフォームとエラー処理
  4. 04色コントラストの要件
  5. 05キーボードとスクリーンリーダーのテスト

活用シーン

  1. 01ウェブ画面のWCAG問題の確認
  2. 02アクセシブルなフォームと入力検証の構築
  3. 03キーボード操作とフォーカスの確認
  4. 04アクセシビリティテストの計画

インストール

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

$npx skills add https://github.com/krzysztofsurdy/code-virtuoso --skill accessibility

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
aria-patterns.md
keyboard-and-focus.md
testing-strategies.md

詳細

Webアクセシビリティ

アクセシビリティは品質特性であり、最後に付け足す機能ではありません。マークアップの最初の一行から考慮してください。アクセシブルなインターフェースは、視覚、運動、聴覚、認知に障害のある人が、アプリケーションを知覚し、操作し、利用できるようにします。また、キーボードを多用するユーザー、接続速度が遅い人、一時的なけがをしている人、制約のある環境にいるすべての人にも役立ちます。

アクセシビリティが重要な理由

観点影響
法的多くの地域の法律(ADA、EAA、Section 508、EN 301 549)では、デジタル製品にアクセシビリティを求めています。準拠しない場合、訴訟リスクや金銭的な罰則が生じます。
倫理的世界人口のおよそ16%が何らかの障害を抱えて暮らしています。デジタルサービスから彼らを排除することは、避けられないことではなく、選択です。
ビジネスアクセシブルな製品はより幅広いユーザーに届き、SEOを改善し(構造化されたコンテンツはクローラーに役立ちます)、サポートコストを削減します。また、総合的なユーザビリティスコアの向上とも相関しています。
技術的品質アクセシビリティの制約によって、クリーンなマークアップ、適切なセマンティクス、関心の分離が促され、保守性が向上します。

WCAGの原則:POUR

Web Content Accessibility Guidelinesでは、すべての達成基準が4つの原則に分類されています。あらゆるアクセシビリティ要件は、少なくとも1つの原則に対応します。

原則問いかける内容例
知覚可能ユーザーはコンテンツを感知できますか?画像のテキスト代替、動画の字幕、十分な色のコントラスト、サイズ変更可能なテキスト
操作可能ユーザーはすべてのコントロールを操作できますか?キーボードでの操作、タスク完了に十分な時間、発作を引き起こすアニメーションがないこと、明確なナビゲーション
理解可能ユーザーはコンテンツとUIの動作を理解できますか?読みやすい言葉、予測可能なナビゲーション、入力支援とエラーメッセージ
堅牢支援技術でも利用できますか?有効なマークアップ、適切なARIAの使用、スクリーンリーダーなどのツールとの互換性

適合レベル

WCAGでは3つのレベルを定めています。上位のレベルには、それより下位のレベルの達成基準がすべて含まれます。

レベル対象典型的な要件
A最低限の水準で、最も深刻な障壁を取り除きます法的要件や調達要件の多くは、ここから始まります
AA業界標準で、ほとんどのユーザーにとって大半の障壁に対処しますADA、EAA、Section 508、およびほとんどの組織のポリシーで求められます
AAA最高水準ですが、すべての種類のコンテンツで達成できるとは限りません目標として掲げ、実現可能な範囲で選択的に適用します

ほとんどのプロジェクトでは、レベルAAを目標にしてください。現実のニーズの大半を満たし、一部のコンテンツ形式と相反する要件を避けられます。


セマンティックHTMLの基本

ネイティブHTML要素には、組み込みのセマンティクス、キーボード操作、スクリーンリーダーによる読み上げがあります。適切な要素を使うことは、最も効果的なアクセシビリティ手法です。

代わりに使用する理由
<div onclick="..."><button>ボタンはフォーカス可能で、役割が読み上げられ、EnterキーとSpaceキーに反応します
<span class="link"><a href="...">リンクは「リンク」と読み上げられ、中クリックに対応し、リンク一覧にも表示されます
<div class="header"><header>、<nav>、<main>、<footer>ランドマーク要素を使うと、スクリーンリーダーのユーザーはページ内の領域間を移動できます
<div class="list"><ul> / <ol> と <li>リストでは項目数と位置(「7項目中3番目」)が読み上げられます
<div class="table"><th>を含む<table>表の見出しは、データセルとそのラベルを関連付け、スクリーンリーダーで認識できるようにします
入力用にスタイルを設定した<div><input>、<select>、<textarea>ネイティブのフォームコントロールには、ラベルとの関連付け、入力検証、支援技術への対応が組み込まれています
見出しの階層

見出しは目次のようなアウトラインを作成し、スクリーンリーダーの利用者はそれを使って移動します。

  • ページの目的を説明する<h1>をページごとに1つだけ使用します
  • 階層を飛ばさないでください(<h2>から<h4>へ移動しないでください)
  • 見出しは構造を示すために使用し、見た目を整えるためには使用しないでください。外観はCSSで調整します

よくあるアクセシビリティの問題

問題影響対処法
画像の代替テキストがないスクリーンリーダーがファイル名を読み上げるか、何も読み上げません説明的なaltを追加します。装飾のみの画像にはalt=""を使用します
色のコントラストが不十分弱視の利用者がテキストを読めません通常のテキストでは4.5:1、大きなテキストでは3:1の比率(AA)を満たします
インタラクティブ要素をキーボードで操作できないキーボードやスイッチを使う利用者は完全に操作できませんネイティブのインタラクティブ要素を使用するか、tabindex="0"とキーイベントハンドラーを追加します
フォームのラベルがないスクリーンリーダーが入力欄の用途を読み上げられませんfor/idで関連付けるか、ラベルで囲んで、すべての入力欄を<label>に関連付けます
メディアが自動再生されるスクリーンリーダーの利用者を混乱させ、認知障害のある利用者に害を及ぼす可能性があります自動再生は使用しないでください。避けられない場合は、視認できる一時停止/停止コントロールを用意します
スキップリンクがないキーボード利用者はページごとにナビゲーション全体をTabキーで移動する必要があります最初にフォーカス可能な要素として、メインコンテンツへのスキップリンクを追加します
フォーカスインジケーターがないキーボード利用者はページ上の現在位置を見失います目に見える独自の代替表示を用意せずにoutlineを削除しないでください
ページの言語が指定されていないスクリーンリーダーがコンテンツを誤って発音することがあります<html>にlang属性を設定します(例:lang="en")
動的コンテンツがアクセシブルでないスクリーンリーダーは、ページ読み込み後に発生した変更を読み上げませんARIAライブリージョンを使用して動的な更新を読み上げます
ドキュメントタイトルがないスクリーンリーダーの利用者は、タブを切り替えたときにページを特定できませんすべてのページに固有で説明的な<title>を設定します
タッチターゲットが小さすぎる運動機能に障害のある利用者は、小さなコントロールを確実にタップできません最小サイズは24x24 CSSピクセル(AA)です。快適に操作できるよう、44x44を推奨します
動きやアニメーションめまい、吐き気、発作を引き起こすことがありますprefers-reduced-motionメディアクエリに従い、1秒間に3回を超えて点滅させないでください

アクセシブルなフォーム

アクセシビリティの問題が最も深刻な影響を及ぼすのはフォームです。利用者が購入、登録、その他の重要なワークフローを完了できなくなる可能性があります。

ラベルの関連付け

すべてのフォームコントロールに、プログラムから関連付けられたラベルが必要です。


<label for="email">Email address</label>
<input type="email" id="email" name="email" required>


<label>
  Email address
  <input type="email" name="email" required>
</label>
エラー処理
  • エラーはフォームの先頭だけでなく、該当するフィールドの横にインラインで表示します
  • aria-describedbyを使用して、エラーメッセージを入力欄に関連付けます
  • バリデーションに失敗したフィールドにはaria-invalid="true"を使用します
  • 明確で具体的なエラーテキストを記述します(「入力が無効です」ではなく、「[email protected]の形式でメールアドレスを入力してください」)
必須フィールド
  • 必須フィールドにはrequired属性(ネイティブのバリデーション)またはaria-required="true"(カスタムバリデーション)を設定します
  • 必須であることを色やアスタリスクだけで示さないでください。「(必須)」などのテキストを追加します

色とコントラスト

情報を伝える際に、色だけに頼ってはいけません。テキスト、アイコン、パターン、その他の視覚的な手がかりと組み合わせてください。

コントラスト比(WCAG AA):

要素最低比率
通常のテキスト(18pt未満/太字14pt未満)4.5:1
大きなテキスト(18pt以上/太字14pt以上)3:1
UIコンポーネントと図形オブジェクト3:1

すぐにできる改善策:

  • ブラウザーの開発者ツールでコントラストを確認します(Chrome DevToolsではホバー時に比率が表示されます)
  • ダークモードに対応するため、prefers-color-schemeに従います
  • 色覚シミュレーション(1型色覚、2型色覚、3型色覚)を使ってデザインをテストします

リファレンスファイル

リファレンス内容
ARIA パターンARIA を使用するタイミング、ロールとプロパティ、ウィジェットのパターン(タブ、モーダル、アコーディオン、ドロップダウン)、ライブリージョン、ランドマークロール
キーボードとフォーカスTab の順序、矢印キーによるナビゲーション、フォーカストラップ、スキップリンク、フォーカスの復元、視認可能なフォーカスインジケーター、タッチターゲット
テスト戦略自動化ツール、手動テストのチェックリスト、スクリーンリーダーのテスト、コントラストの検証、アクセシビリティツリー、CI との統合

他のスキルとの連携

状況推奨スキル
アクセシブルなエラーレスポンスを備えた REST API または GraphQL API の構築api-design
アクセシビリティに影響するセキュリティヘッダー(CSP、iframe の制限)security
ユニットテストと統合テストによるアクセシブルなコンポーネントのテストtesting
アクセシビリティを損なわないパフォーマンス最適化performance

コメント