暗黙のARIAセマンティック
「暗黙のARIAセマンティックと強いネイティヴセマンティックについて」で、暗黙のARIAセマンティックをHTMLに指定するべきかどうか、に絡んだ話がされていましたので、この記事では私の考えを書きます。
私の考え
- 本来的には、HTMLのセマンティックは単独で伝わるべきもので、暗黙のARIAのセマンティックをHTMLに記述する必要はない
- 現実には、HTMLのセマンティックを支援技術に提供しないブラウザーが存在する
- WAI-ARIAをサポートしHTML5をサポートしていないブラウザーの救済策としてWAI-ARIAを重複指定することが行われている
- Using ARIA in HTMLの推奨表は現時点での情報であり、将来的には変わるだろう
はじめに
WAI-ARIAのセマンティックは主に支援技術(スクリーン・リーダーなど)で利用されます。また、モダンなブラウザーと支援技術は主にアクセシビリティAPIを使って情報のやりとりや操作を行っています。同様に、HTMLの要素や属性がもつセマンティックも(アクセシビリティAPIを通して)支援技術に提供されています(セマンティックは支援技術のためだけのものではありませんが、この記事では支援技術との関係に絞って議論します)。
理想
HTMLのセマンティックを支援技術に提供することは、理想的・本来的にはブラウザーが行うべきことです。main要素は
<main>…</main>
と書くだけで、セマンティックが支援技術に伝わりランドマークとして認識される。これがあるべき姿でしょう(もちろんmain要素に限った話ではなく、HTMLの要素や属性が持っているセマンティックは、HTMLとして記述するだけで支援技術に伝わるべきでしょう)。
現実
しかし、現実にはHTML5(の一部)のセマンティックを支援技術に提供していないブラウザーがいます。そして、それらのブラウザーを救うすべが全くないかというと、そうではありません。
それらのブラウザーの中にはWAI-ARIAに対応したものもあり、WAI-ARIAで指定したセマンティックは支援技術に提供しているからです。そのため、WAI-ARIAに対応したセマティックをもつHTMLの要素については、WAI-ARIAで重複してセマンティックを指定することで、中途半端なブラウザーたちを救済できる余地がうまれます。
例えば、Internet Explorer 11やWindows版Google Chromeは<main>...</main>
という記述に対して、セマンティック(ランドマーク)をアクセシビリティAPI経由で提供しません。一方で<main role="main">…</main>
や<div role="main">…</div>
であれば、ランドマークとしてのセマンティックを提供します。nav要素やaside要素、article要素に対しても同様です。
なお、ブラウザーが支援技術にどのような情報を提供すべきかは、HTML to Platform Accessibility APIs Implementation Guideにまとめられつつあります。また、ブラウザーごとの対応情報は少し古いですがHTML5 accessibilityにまとまっています。
理想と現実のはざまで
この理想と現実のはざまで、次のような、過渡期にありがちな問いが生まれます。
「中途半端なブラウザーたちを見捨てるべきか、それともコンテンツ側がWAI-ARIAの属性を重複指定して救うべきか。」
私には救うべき派が多いように感じられます。例えば、A Rock n Roll Guide to HTML5 & ARIA (2013)で紹介されているパターンの多くも救済策としてのWAI-ARIAの指定(重複指定)です。また、HTML5のmain要素でも、次のように、コンテンツ側の対応を要請しています。
Authors are advised to use ARIA role="main" attribute on the main element until user agents implement the required role mapping.
さて、実際に救おうとすると、さらなる問いが生まれます。
「コンテンツ側はどれだけ重複指定すれば良いのか。」
例えば、a[href]の暗黙のARIAセマンティックはlinkロールなので、a要素でリンクを作るたびにrole="link"と書かなくてはならないか、というと、現実はそこまでひどくありません。中途半端なブラウザーたちもHTML4/XHTML1までに存在した要素については、おおむねアクセシビリティAPIにセマンティックを提供しています。とすると、中途半端なブラウザーたち(のメジャーなもの)を救うためにコンテンツ側はどれだけ重複指定すれば良いのでしょうか。
この問いに答えようとしているのがUsing ARIA in HTML(のいくつかの部分)というのが私の認識です。Using ARIA in HTMLには「Notes on ARIA use in HTML」(HTMLでARIAを使うための注意点)があります。その「First rule of ARIA use」(第1の原則)はHTMLに存在している機能を実現するにはHTMLの要素を使え(大意)、ですが、この原則を守ることができない場合として次があげられています。
- ビジュアルデザインの制約で特定の要素を使うことができない(要求されるスタイルづけを行えない)場合
- その機能がHTMLには今のところ存在しない場合
- その機能はHTMLには存在するが、実装されていないか、実装されていてもアクセシビリティ・サポーテッドでない場合
最後の「実装されていないか、実装されていてもアクセシビリティ・サポーテッドでない場合」が、中途半端なブラウザーの救済策にあたります。
そのため、Using ARIA in HTMLの推奨表は「ある時点でのベストプラクティス」というのが、私の認識です。現時点ではベストプラクティスかもしれませんが、今の内容が将来にわたってベストプラクティスであり続けるとは認識していません。ブラウザーのサポートが進めばWAI-ARIAの記述が推奨される要素・状況は減るでしょう。
まとめ
私の考えは次の通りです。
- 本来的には、HTMLのセマンティックは単独で伝わるべきもので、暗黙のARIAのセマンティックをHTMLに記述する必要はない
- 現実には、HTMLのセマンティックを支援技術に提供しないブラウザーが存在する
- WAI-ARIAをサポートしHTML5をサポートしていないブラウザーの救済策としてWAI-ARIAを重複指定することが行われている
- Using ARIA in HTMLの推奨表は現時点での情報であり、将来的には変わるだろう
おわりに
私はHTMLにWAI-ARIAの属性を重複して書くのは好きではありません。ブラウザーがやるべきことだと思うからです。が、過渡期的な状況においては重複指定したほうが良いということも認識しています。
来年はブラウザーの対応がさらに進むことを望みます。そして、HTML5のセマンティックを支援技術に提供するブラウザーへの移行が進み、重複指定時代の終わりの始まりが来ることを期待しています。