アクセシビリティ簡易診断
アクセシビリティの不備の多くは、HTMLに書き忘れた小さなものです。説明のない画像、名前のない入力欄などです。この診断はページを取得してそれらを見つけ、どの要素を直せばよいかを示します。
ページ上のすべてに名前が必要
ページを見るとき、レイアウトは何も言わずに多くを伝えています。入力欄の横の虫眼鏡アイコンは「ここで検索」の意味です。大きな太字は「新しいセクションの始まり」の意味です。スクリーンリーダー、点字ディスプレイ、音声操作を使う人には、そのどれも届きません。そうしたソフトウェアにはレイアウトが見えません。HTMLを読み、すべての要素に二つのことを求めます。それが何か、そして何という名前か、です。
<img>はalt属性で、フォーム項目は<label>で、セクションは見出しで答えます。答えがないと、ソフトウェアは「画像」「編集テキスト」「リンク」と読み上げて次へ進むだけで、誰の役にも立ちません。Web Content Accessibility Guidelines(WCAG)はこの考え方を検証可能なルールにしたもので、そのかなりの部分はプログラムで確認できます。
診断する項目と、それぞれの減点
ページは100点から始まります。見つかった問題ごとに点数が引かれ、繰り返し出る問題ほど上限まで多く引かれます。
| 検出項目 | 減点 |
|---|---|
<html>にlangがない | 10 |
ズームの禁止(user-scalable=no、または2未満のmaximum-scale) | 10 |
<title>が空または欠落 | 6 |
alt属性のない画像 | 4+画像1枚につき2、最大20 |
| ラベルのないフォーム項目 | 5+1項目につき3、最大20 |
| 名前のないリンクやボタン | 4+1つにつき2、最大20 |
| 見出しが一つもない | 8 |
<h1>がない/見出しレベルの飛び | 4/2+飛び1つにつき1、最大6 |
| あいまいなリンクテキスト(「こちらをクリック」「続きを読む」) | 2+リンク1つにつき1、最大8 |
| インラインスタイルでコントラスト比4.5:1未満のテキスト | 3+1つにつき2、最大10 |
titleのない<iframe> | 2+1つにつき1、最大6 |
重複したidの値 | 1+1つにつき1、最大5 |
| 音声付きで自動再生される音声や動画 | 4 |
<main>領域がない/0より大きいtabindex | それぞれ3 |
hidden、aria-hidden="true"、インラインのdisplay:noneで隠された要素と、role="presentation"が付いた画像は診断の対象外です。
評価の読み方
残った点数が文字の評価になります。90点以上はA、80点以上はB、65点以上はC、50点以上はD、それ未満はFです。赤の項目は障壁、つまり作業を最後までできなくしてしまう種類の問題です。黄色の項目は、止めはしないものの手間を増やします。各項目の下には、関係する要素を最大8つ、ファイルパス、項目名、id、クラスを添えたタグとして表示するので、テンプレートの中で検索できます。
Aの評価は、この診断が検出できる問題が一つも見つからなかったという意味です。自動テストで見つかるのは、実際のアクセシビリティ問題のおよそ3分の1です。代替テキストが正確か、読み上げ順に筋が通っているか、独自のメニューがキーボードでどう動くか。これらは人が判断する必要があります。
よく出る項目の直し方
- 代替テキストのない画像
- 目の見える読者に画像が伝えている内容を書きます:
<img src="team.jpg" alt="Five engineers around a whiteboard">。装飾だけの画像ならalt=""と書きます。空の値は支援ソフトウェアに画像を飛ばすよう伝えるもので、属性を書かないこととは違います。 - ラベルのない入力欄
<label for="email">Email</label> <input id="email" type="email">。プレースホルダーはラベルになりません。最初の1文字を打った瞬間に消えるからです。- アイコンだけのリンクやボタン
<button aria-label="Open menu">…</button>とするか、中のアイコン画像にaltを付けます。- 見出しレベルの飛び
- レベルは文書の構成で決め(セクションには
h2、その中はh3)、大きさはCSSで指定します。 - ズームの禁止
- viewportタグを
<meta name="viewport" content="width=device-width, initial-scale=1">まで削ります。
この診断に見えないもの
当サーバーは受け取ったHTMLを読むだけでJavaScriptは実行しないので、フレームワークが読み込み後に挿入するものは調べられません。スタイルシートもダウンロードしません。そのため、コントラストを測れるのは、文字色と背景色の両方がstyle属性に書かれている箇所だけです。それ以外はコントラスト比計算ツールで色を確認してください。1ページをさらに深く調べるには、スクリーンリーダープレビューで読み上げを聞き、タブ順をたどってみてください。
よくある質問
満点ならサイトはWCAGに準拠していますか?
いいえ。このページが、生のHTMLに対してプログラムが行える検査に通ったという意味です。WCAG 2.2のレベルAAに準拠するには、サイトのすべてのテンプレートについて、キーボードとスクリーンリーダーを使った手作業のテストも必要です。
空のaltとaltがないのとでは何が違いますか?
alt=""は画像が装飾であることを意図的に示し、スクリーンリーダーは何も言わずに飛ばします。alt属性がまったくないと、多くのスクリーンリーダーは代わりにファイル名を読み上げます。「IMG アンダースコア 4521 ドット jpg」といった具合です。
プレースホルダーがラベルとして認められないのはなぜですか?
プレースホルダーは訪問者が入力した途端に消えるので、途中で中断した人や画面拡大を使う人は、その欄が何を求めていたかわからなくなります。読み上げないスクリーンリーダーもあります。目に見える<label>は消えずに残り、クリックできる範囲も広げます。
診断ではコントラストの問題が出ませんでした。色は大丈夫ですか?
そうとは限りません。この診断はスタイルシートで定義された色を読まず、style="…"属性に直接書かれた色しか見ません。本文やボタンの主な色は、コントラスト比計算ツールで手作業で確認してください。
ページをReactやVueで作っています。結果は信頼できますか?
HTMLがサーバー側でレンダリングされている場合に限ります。サーバーがほぼ空の文書を送り、ブラウザがJavaScriptでページを組み立てているなら、診断が見るのはその空の文書で、ほとんど何も報告しません。