- 視覚障がい:色覚異常から全盲まで。
- 可動性の制限:巧緻性低下から身振り障がいまで。
- 発話障がい:発音障がいから言葉によらないコミュニケーションまで。
- 認知上の課題:学習障がいから複雑な指示の理解が困難な状態まで。
- 聴覚障がい:部分的な難聴から全失聴まで。
アクセシビリティガイドライン
アクセシビリティを実装するには、以下のガイドラインを使用してください。セマンティックHTML構造
- 意味のあるHTMLタグを使用します。たとえば、、、などのセマンティックHTMLタグを使用します。
- ボタンには、やではなく要素を使用します。
- リンクには、非セマンティック要素ではなくを使用します。
- 階層的な見出し構造を使用します。からまで、アプリ内で見出しの順位を適切に維持します。階層的な見出しにより、スクリーンリーダーやその他のユーザー補助機能がコンテンツ階層を理解でき、全体的なナビゲーションが向上します。
Accessible Rich Internet Application(ARIA)タグ
開発者は、カスタムコンポーネントなどの非セマンティック要素を必要とする場合があります。カスタムコンポーネントには、タイル、カード、カルーセルが含まれていることがあります。このような場合は、要素の目的と動作をユーザー補助機能に伝えるために、ARIA属性を使用します。 ARIA属性では、次の3種類の重要な情報を提供できます。- その要素は何か(例:role=“button”)
- それは何をするか(例:aria-pressed、aria-expanded)
- 追加のコンテキストやラベル(例:aria-label、aria-describedby)
代替テキストまたは画像とアイコンの説明
VoiceViewは、それ自体で画像やグラフィックの意味を理解することはできません。開発者が代替テキストや意味のある説明を提供する必要があります。たとえば、設定アイコンには「設定」のような説明を使用し、「設定アイコンの画像」や「アイコン」という説明は避けます。「画像…」や「リンク画像…」という言葉は、VoiceViewによって自動的に追加されます。 次の例は、設定のaltタグを示しています。- 装飾画像: 純粋に装飾目的の画像では、ユーザーにとって価値がなければaltタグを省略します。
- 繰り返されるテキスト: 既にaltタグやaria-labelに記述されているテキストは繰り返さないようにします。
フォーカス管理
要素に対するフォーカスを明確に表示する必要があります。WCAGのガイドラインに従ってください。セマンティックHTMLタグ(、)を使用している場合は、デフォルトでフォーカスリングが表示され、アプリのデザインに合わせたカスタマイズも可能です。VoiceViewはこれらを識別して読み上げます。以下に、フォーカス管理に関するいくつかのガイドラインを示します。- 初期フォーカス:React/Angularの
autoFocusプロパティを使用します。 - 非セマンティックタグ:これらのタグを使用する場合は、フォーカスを適用するカスタムJavaScriptコードと、
onFocusのカスタムスタイルを記述します。 tabindex:次のユースケースにのみ使用します。- フォーカス可能でない要素をフォーカス可能にしている場合。
-
フォーカス順序を細かくカスタマイズする場合。モーダルとカスタムコンポーネントに影響します。以下に例を示します。
- 文字間隔:一貫性を保ち、間隔が狭すぎたり広すぎたりしないようにします。
- すべて大文字:すべて大文字にすることは避けます。特に長い文章の場合に読みにくくなります。
- 行の高さ:読みやすさを向上させるために、WCAG(英語のみ)に従って
1.5(または150%)以上を使用します。 - タイポグラフィ:タイポグラフィの一貫性を保ちます。
プログラムによるアナウンス
タグのないソフトウェアを作成する開発者や、プログラムで情報をアナウンスしない開発者は、以下に示す2つのオプションを使用できます。これらのオプションは特に、キャンバスを使用してグラフ、図、対話型ナビゲーション、3Dワールド要素を描画するウェブアプリで役立ちます。オプション1:<div>をアナウンス用に使用して、必要時にアナウンスのテキストを更新する
以下に例を示します。
オプション2:postMessageを使用してVega WebViewコンテナーにメッセージを送信し、onMessageを使用してそのメッセージを処理する
onMessageで、AccessibilityInfo.announceForAccessibility();を呼び出します。これには多少の設定が必要ですが、SpeechSynthesisと同じように動作します。
以下の例では、JSON APIやソケットデータの業界標準を使用する場合と同様のtype-valueメッセージパターンが使用されています。メッセージの送受信時に、さまざまなデータ型のシリアル化と逆シリアル化を簡単に行うことができます。上のスクリプトはウェブアプリで、下のスクリプトはVegaウェブアプリのコードです。
ウェブアプリの例:
タイポグラフィと色
以下に、タイポグラフィと色に関するいくつかのガイドラインを示します。- フォントサイズは、読みやすさの基準を満たしている必要があります。
- 色のコントラスト比は、通常のテキストでは4.5:1以上、大きいテキストでは3:1以上にする必要があります。WCAG(英語のみ)に従ってください。https://webaim.org/resources/contrastchecker/にあるContrast Checker(英語のみ)を参照してください。
- 視覚的なフォーカスには、背景とは異なる色を使用する必要があります
- フォントファミリーには、わかりやすい書体を選択する必要があります。草書的すぎる書体や細すぎる書体は避けてください。
- コンテンツが読みやすくなるように行の高さを設定します。
VoiceView
VoiceViewを使用してテストを行って、重複するアナウンスを防ぎ、正しい読み上げ順序を維持し、ライブ更新(aria-live)を有効にします。
再生、Alexa、その他のオーディオの動作をテストします。
非対話型コンテンツをアクセシビリティAPIから隠蔽するには、aria-hidden="true"を使用します。詳細については、MDNのドキュメントを参照してください。非対話型コンテンツの例には、次のようなものがあります。
- 純粋に装飾目的のコンテンツ(アイコンや画像など)
- 重複するコンテンツ(繰り返されるテキストなど)
- 画面外にあるコンテンツまたは折りたたまれているコンテンツ(メニューなど)
Vega WebViewのユーザー補助機能
- TVリモコン(D-Pad、戻る、選択)
- VoiceView(スクリーンリーダー)
- 拡大鏡(画面の拡大)
-
キャプション/字幕
WebViewでのアクセシビリティ要素の有効化
VoiceViewの有効化
画面上のナビゲーション
- [ユーザー補助の設定] に移動します。
- [VoiceView] をオンに切り替えます。
Fire TVリモコンを使用する
- [戻る] キーと [メニュー] キーを 2 秒間押し続けます。
コマンドラインを使用する場合
VoiceViewの無効化
- [ユーザー補助の設定] に移動します。
- [VoiceView] をオフに切り替えます。
VoiceViewからの要素の隠蔽
VoiceViewから要素を隠蔽するには、次のコードを使用します。デフォルトのアクセシブル名がない要素をVoiceViewに通知する方法
VoiceViewが要素を認識できるようにするには、次のコードを使用します。動的な値のアナウンス
HTML、ReactJS、Angularではaria-liveを使用します。詳細については、ARIAのaria-live属性を参照してください。動的な値をアナウンスするには、次のコードを使用します。テストケース
ここでは、アプリのアクセシビリティを検証するための最小限のテストケースを示します。VoiceView
VoiceViewを有効/無効にすることができる
- [ユーザー補助の設定] に移動します。
- VoiceViewのオン/オフを切り替えます。
VoiceViewを有効にした状態でアプリが動作する
- VoiceViewを有効にします。
- リモコンを使用してアプリのナビゲーションを行います。
- 各UI要素の音声プロンプトを確認します。
新しい画面でテキストが読み上げられる
新しい画面では、ヘッダー、説明、使用ヒント、案内テキスト、現在フォーカスのある項目が読み上げられます。- アプリのさまざまなセクション(例:ホーム、設定、コンテンツ)に移動します。
- VoiceViewの出力を確認します。
ナビゲーションと要素の読み上げが機能する
ユーザーが(方向パッド/選択/ボタン上のクイック選択アクションを使用して)すべてのアクション可能な要素に移動できることを確認します。フォーカスのある要素は完全に読み上げられ、その要素に関連する静的テキストは通常モードで読み上げられる必要があります。フォーカスを受け取った要素が一瞬間を置いて読み上げられる
少し時間を置くと(0.5秒前後)、使用ヒント、案内テキスト、説明、静的テキストが読み上げられます。画像とアイコンに説明テキストが含まれている
画像に説明がある場合は、VoiceViewで読み上げられるように、すべての説明を代替テキストで記述します。VoiceViewがレビューモードで機能する
VoiceViewを有効にした状態で、メニューを2秒間長押しします。ユーザーは、すべてのテキストとコントロールに移動して(方向パッドの左/右)、情報のレベルを変更できます(方向パッドの上/下)。レビューモードでは、アクション可能でないテキストと項目も読み上げられる必要があります。アクセシビリティジェスチャーが機能する
たとえば、項目をダブルクリックしてアクティブ化したり、長押ししたりします。拡大(画面のズーム)
拡大を有効/無効にすることができる
- ユーザー補助機能に移動します。
- 拡大鏡を有効にします。
- 拡大/縮小できることを確認します。
UI全体でズームが機能する
- テキスト、ボタン、画像を拡大してみます。
- スケーリングと表示が正しく行われることを確認します。
ズームしても読みやすさが維持され、コンテンツが表示領域に収まる
- すべての画面で拡大/縮小を行います。
- レイアウトが変更されず、スクロールが機能していることを確認します。
初回は1.5倍にズームする
- 設定に移動します。
- ズームがオフになっていることを確認します。
- ズームを有効にします。
- ズームとアプリの動作を確認します。
初回の後のズームではユーザーの設定が維持される
- 設定に移動します。
- ズームがオフになっていることを確認します。
- ズームを有効にします。
- ズームとアプリの動作を確認します。
- アプリを閉じます。
- アプリをもう一度開くか、デバイスの電源を入れ直します。
- 前回のズームレベルが保存されていることを確認します。
拡大鏡がフォーカスに対応する
ユーザーがアクション可能なコントロールに移動でき(方向パッド/選択を使用)、拡大鏡がフォーカスを追従することを確認します。すべてのテキストとコントロールにアクセスできる(メニューと方向パッドを使用して移動)
字幕/キャプション
字幕を有効/無効にすることができる
- ビデオを再生します。
- プレーヤー/設定で字幕を切り替えます。
- 表示を確認します。
クローズドキャプションのスタイルが機能する
グローバル設定が適用されているときに、ローカルプレーヤーのCC設定を使用します。- 字幕の設定を変更します。
- UIが適切に更新されることを確認します。
字幕の設定がセッションをまたいで保持される(該当する場合)
- 有効にする
- アプリを終了します。
- もう一度開きます。
- 設定が保持されるかどうかを確認します。
字幕が正確で音声と同期している
- コンテンツを再生します。
- 字幕が同期されていて正確であることを確認します。
正確なクローズドキャプションがユーザーに表示される
字幕の遅延は短くして、コンテンツに合わせて表示されるようにしてください。フォント/テキストサイズ
テキストサイズを増減できる
- フォント設定にアクセスします。
- サイズを調整します。
- UI全体でテキストが正しく拡大/縮小されることを確認します。
フォントの変更がアプリ全体に適用される
- フォントサイズを変更します。
- 別の画面に移動します。
- 一貫性を確認します。
大きいフォントでレイアウトが崩れない
- フォントサイズを最大に設定します。
- UIが切り詰められたり、重なったりしないことを確認します。
フォーカス/視覚的なインジケーター
アクション可能なすべての要素にフォーカスリングが表示される
- リモコンを使用してすべてのUIに移動します。
- 各要素のフォーカスリングを確認します。
アプリのフォーカス順序に一貫性がある(論理的なナビゲーションフロー)
- リモコンを使用してナビゲーション操作を行います。
- フォーカス順序が直感的(上から下、左から右)であることを確認します。
省略可能:フォーカス変更時の音声フィードバックを確認する
- オーディオキューを有効にします。
- ナビゲーション操作を行います。
- フォーカス変更時の音声通知を確認します。
ユーザー操作の後にフォーカスが失われない(モーダルを閉じたときなど)
- モーダルまたはダイアログを開いて閉じます。
- フォーカスが期待どおりの要素に戻ります。
ナビゲーション
リモコンによるナビゲーションができる
- D-Pad、戻る、選択の各ボタンを使用します。
- タッチ入力なしですべての領域にアクセスできることを確認します。
キーボードナビゲーションが正しく機能する(サポートされている場合)
- 外部キーボードまたはアクセシビリティ対応入力デバイスでテストします。
- 対話型のすべての領域を確認します。
トラップゾーンがない(すべての領域から別の要素に移動できる)
- モーダル、メニュー、カルーセルに移動したり、そこから別の要素に移動したりします。
- どこにも移動できなくなる場所がないことを確認します。

