本文へ移動
easeweb
ご相談
トピックを検索

スクリーンリーダーで数値が伝わらないグラフ

棒グラフを中身のない canvas に描いたり、「Orders chart」という名前だけを付けたりしているため、スクリーンリーダーはグラフを飛ばすか名前を読むだけで、数値は一つも伝わらない

WCAG 2.2
SC 1.1.1A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <canvas id="orders"></canvas>
アクセシビリティの問題を示した図: 全盲:一番多いのは何曜日?
01

問題

スクリーンリーダー利用者には、グラフから読み取れる結果も、数値の一つも伝わらない

02

試してみる

グラフを隠して、読み上げから注文の一番多い曜日を探してみましょう

  • 問題1: カードを上から読んだときの読み上げが、下の欄に出ます。グラフについて読まれた言葉はありますか?

  • 問題2: グラフに名前が付きました。その名前で、一番多かった曜日が分かりますか?

  • 修正を適用します。 名前にデータを書く方法では、すべての件数がグラフと一緒に読まれます。表を添える方法では、「数値を表示」も開いて、行を読んでみてください。グラフを隠していてもいなくても読めます。

問題あり 修正できますか?

日別の注文数

先週

カードを上から読むと、スクリーンリーダーの読み上げ:

  1. 日別の注文数、見出し
  2. 先週

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

グラフが示す内容と数値を、テキストで伝える

修正前

読むものが何もない canvas に描いたグラフ

<section class="card">  <h2>Orders per day</h2>  <p class="range">Last week</p>  <canvas id="orders"></canvas></section>
問題点2点
  • 棒も曜日のラベルも目盛りもピクセルとして描かれるため、どれも読めない。
  • canvas には名前も中身もないため、スクリーンリーダーは何も言わずに通り過ぎる。
修正後

グラフの名前にデータを書く

<section class="card">  <h2>Orders per day</h2>  <p class="range">Last week</p>  <canvas id="orders" role="img"></canvas></section>
修正の手順3ステップ
  1. canvas に role="img" を付け、名前のある一つの画像として読まれるようにする。canvas には、名前を持てる役割がもともとない。
  2. グラフを描くのと同じ二つの配列から名前を作る。何を示すグラフか、主な読み取り結果、各曜日とその件数の順に書く。スクリーンリーダーは「Orders per day, last week. Busiest on Saturday, with 31. Monday 12, Tuesday 15, …, Sunday 20、画像」と読む。
  3. 名前はグラフを描くコードの中で設定し、新しい週のデータには新しい名前が付くようにする。

これで二つの修正前の例はどちらも直り、この程度の小さなグラフなら1.1.1を満たします。7つの値なら、聞いて追える一文に収まります。ただ、数値が届くのはスクリーンリーダー利用者だけで、しかも一続きの文として読まれるため、木曜日で止めたり、金曜日から読み直したりはできません。データ点が数十あるグラフや、系列がいくつもあるグラフには、次の方法の表が必要です。

04

デザインの案

グラフの数値は、言葉でも伝えられる

先週の注文数を、数値が文字として残るように描いた4通りの例と、線しか示さない管理画面のタイル1つです。「グラフ」と「表」の切り替えも押してみてください。

デザインファイルで

  • グラフのタイトルには「土曜日が一番多かった」のようにグラフから分かることを書き、何を数えたかはその下に添える。
  • グラフが示す数値はすべて、棒の上か、表の表示か、その両方に、文字として読める形で置く。
  • スクリーンリーダーにグラフをどう読ませるかを一文で書く。何を示すか、主な読み取り結果、数値がどこにあるか。
  • データから作る言葉と数値に印を付け、棒と同じ数値から作られるようにする。

合格

  • 日別の注文数(先週)

    • 月曜日 12
    • 火曜日 15
    • 水曜日 14
    • 木曜日 18
    • 金曜日 24
    • 土曜日 31
    • 日曜日 20
    棒の先に件数を書く 棒は曜日の横に伸び、その先に件数を、白に対して14.76:1の#1f2933の文字で書きます。スクリーンリーダーは「月曜日 12」と順に読み、誰も目盛りの線まで棒をたどらずに済みます。
  • 土曜日が一番多かった

    日別の注文数(先週)

    読み取り結果をタイトルにする 「土曜日が一番多かった」というタイトルなら、グラフで伝えたいことを、誰もが棒より先に言葉で読めます。その下に、白に対して4.83:1の#6b7280のグレーで「日別の注文数(先週)」と書きます。タイトルはデータから作り、週ごとに変わるようにします。
  • グラフと表の切り替え グラフの上の二つのボタンで、棒を同じ件数の表に切り替えます。表なら誰でも読め、拡大もコピーもできます。表の画面もグラフと同じだけ丁寧に描き、切り替えは選んでいる側を塗りつぶして描きます。
  • 先週の注文 134件 前週より18%増
    数値を先に、線は後に 管理画面のタイルは「134件」と、白に対して6.52:1の#1f6b3aの緑の「前週より18%増」と矢印で始め、その下の小さな折れ線は同じことを形で繰り返すだけにします。言葉がすでに伝えているため、線はスクリーンリーダーから隠せます。

不合格

  • 注文
    数値のない小さな折れ線WCAG 1.1.1 タイルには「注文」という言葉と線しかなく、線が示すことを伝える言葉も数値も、デザインに含まれていません。開発者が言葉を考え出さない限り、増えていることは線が見える人にしか伝わりません。数値と増減をタイルに書いてください。
05

修正の確認

5項目、マウス不要

確認方法: スクリーンリーダー、拡大表示

5件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。グラフのコンポーネントやデータの取得元を変更した際は、再度確認します。

制限

このサンプルは、どのグラフでも同じ結果になることを保証するものではありません。Chart は Chart.js のことで、どのライブラリーで描いたグラフにも、手で描いたグラフにも、同じテキストの代替が当てはまります。このガイドで扱うのは、グラフのテキストの代替です。ホバーしたときだけ値を表示したり、棒をクリックするとページが絞り込まれたりするなど、データ点や凡例、ツールチップがポインターでしか働かないグラフは別の問題です。凡例についてはキーボードでは系列を切り替えられないグラフの凡例で、ホバーしたときだけ出る値についてはキーボードでは表示できないグラフのツールチップで扱っています。グラフ以外の画像については代替テキストがない、情報を伝える画像を参照してください。管理画面全体を、対象とする支援技術で確認してください。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

EaseWebのサービス

修正した問題を、次のリリースで再発させない

このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。

サービス内容を見る