<canvas>とアクセシビリティ
先月末のGoogle I/Oで取り上げられてから、HTML5がにわかに盛り上がってきました。
I/Oのキーノートでまず紹介されたのが、スクリプトからビットマップ画像を操作するcanvas
でした。これまでGDやFlashが使われていた画像処理をブラウザー内で完結できるため、多くの開発者から期待されているようです。
しかし、一方でアクセシビリティの専門家は懸念を抱いているようです。The Paciello GroupのSteve Faulknerが先日公開した、canvas
とアクセシビリティに関する記事が面白かったので、今回はこれを取り上げてみようと思います。
- The Paciello Group Blog » Thinking About HTML 5 canvas Accessibility
- The Paciello Group Blog » Notes on accessibility of text replacement using HTML5 canvas
canvas APIのアクセシビリティ対応
彼がcanvas
APIの問題点として挙げているのは、次の二点です。
- テキストを描画するAPIはあるが、そのテキストへのアクセサがない
- 画像を挿入するAPIもあるが、代替テキストを与える仕組みがない
ここで難しいと思うのが、テキストを取得できたとしても、それだけでは代替となる適切な情報が得られるか分からないことです。とくにcanvas
は視覚的な表現にかなり依存したものになることが多いでしょうから、APIが用意されるだけで問題が簡単に解決できるわけではないように感じます。
さらに、canvas
は一度描画されてしまうと、一部を書き換えるといったことができません。動的な更新には全体の再描画が必要となるのですが、動きが加わってしまうと、さらに代替情報を提供することは難しくなるでしょう。
代替情報は入れられるが……
canvas
がアクセシビリティについて何も考慮していないかというと、そうはありません。要素内容を持つことができるので、そこに代替情報を記述すればよいわけです。
たとえば、円グラフを描きたい場合を考えてみましょう。canvas
内にtable
を記述し、そこにデータを持たせるのです。canvas
がセルの情報をひろって描画するようなコードを書けば、アクセシブルになりそうです。
<canvas id=pie-chart>
<table border id=data-browser>
<caption>2009年5月のブラウザーシェア</caption>
<tr><th>ブラウザー<th>割合
<tr><td>IE7<td>40.83%
<tr><td>Firefox 3.0<td>20.43%
<tr><td>IE6<td>16.94%
<tr><td>IE8<td>6.85%
<tr><td>Safari 3.2<td>4.56%
<tr><td>Safari 3.1<td>1.81%
<tr><td>その他<td>8.41%
</table>
</canvas>
ところが残念なことに、スクリーンリーダーはcanvas
要素をすべて無視してしまい、中にある代替情報を読み上げることができないとのことです。
記事では、空のcanvas
の後に代替情報を配置し、スタイルシートで画面外へ押し出すという回避策も紹介していますが、あまり賢い解決方法ではないように思います。
canvas
だけの問題か
canvas
には、代替テキストに関連するインターフェースがなく、スクリーンリーダーが内容を読んでくれないという問題があることがわかりました。
しかし、canvas
は一つの手段でしかありません。canvas
で表現される情報をアクセシブルにしても、実現したい機能すべてについてアクセシビリティが確保されなければ、問題の解決とはいえません。これは画像やFlashにについても同じことがいえるでしょう。
機能ごとのアクセシビリティ対応ももちろん重要なのですが、それだけに気をとられてしまって、ちぐはぐな「対応」になってしまわないように気をつける必要があります。それにはやはり、「何を実現したいのか」「何が適切な手法なのか」をきちんと考えることが大切なのではないかと考えています。