巷(何処)で話題のmain要素とは何か
著
この記事は、HTML5 Advent Calendar 2012向けに書いたものです。12月1日、カレンダー初日ということで、割とあっさりとした内容にしたいと思います。読み応えのある、もっと濃くて面白い記事については、きっと後に続く方が書いてくださることでしょう......などと微妙にプレッシャーを与えてみたり(やめい)。それはさておき、この記事では、HTML5で個人的に注目しているmain要素をご紹介します。
main要素なんてHTML5仕様にあったっけ?と思った方は、正解。この要素は現状、HTML5仕様のなかで公式に定義されているものではありません。Webアクセシビリティのコンサルティングを手がけるThe Paciello Groupのメンバー、Steve Faulkner氏がHTML5の拡張仕様として提案中のものです。彼の執筆した非公式なドラフトは、The main element - HTML5 extension specificationで読むことができます。
main要素について、非公式ドラフトに基づき紹介しますと、これは文書やアプリケーションにおいて主要なコンテンツをマークアップするための要素。セクショニング・コンテンツではないため、文書のアウトラインには影響を与えません。また、同じ文書内に複数のmain要素を含めてはいけないことになっています。つまり、いちHTMLファイルにつきmain要素が登場して良いのは一回だけです。
ユーザーエージェントには、main要素をARIAランドマークのmainと紐づけることが求められています。キーボードによるナビゲーションをサポートしているユーザーエージェントであれば、main要素にアクセスするための機能の実装を強く奨励されています。その場合、いったんmain要素にアクセスしたその次にフォーカスが当たるのは、main要素内で最初に登場するフォーカス可能な要素になります。
main要素の必要性はどこにあるのでしょうか?ユースケースは、User:Sfaulkne/main-usecases - HTML WG Wikiにまとめられています。その最たるものとして挙げられているのが、アクセシビリティ。
主要なコンテンツを識別のうえ、その先頭に効率的にアクセスすることは、音声のみでWebページを利用する利用者(視覚障害者等)や、キーボードのみでしかWebページを利用できない利用者にとって、一種の課題です。これに対し、「本文へ」のようなリンクをページの先頭近くに設けたり(いわゆるスキップリンク)、あるいはWAI-ARIAのrole=mainを使うといった手法が多く採用されてきました。しかし、いずれの手法も後付け的なところがあり、あまりスマートではありません。
main要素により、主要なコンテンツがより明示的にマークアップされ、かつWebブラウザーや障害者の利用する支援技術がmain要素をサポートすれば、上述の課題をよりスマートに解決することができます。わざわざスキップリンクを設けたり、role属性で意味を補わずとも、主要なコンテンツの先頭にアクセスしやすくなったり、あるいは主要コンテンツのみを抽出しやすくなるといったことが期待できます。
そんな素敵なmain要素ですが、正式にHTML5の仕様となる見込みはあるのでしょうか?つい先日、W3CのHTML WGはFPWD(First Public Working Draft)に含める判断をくだしました。しかし、これがWHATWGのHTML仕様に含まれることになるかというと、微妙な状況です。具体的にそれがどういった経緯に基づくのか、最新の状況がどうなっているかは、敢えて割愛します。興味がある方は、Adrian Roselli: New Main Element Approved, then BlockedやHTMLに提案中のmain要素 - fragmentaryを読むと良いでしょう。個人的には、過去に
といった記事を書いてきましたが、単純にスキップリンクを忌み嫌ってるという側面はあるにせよ(苦笑)、主要コンテンツを取り出すための仕組みは何かしら必要だと考えています。その仕組みとして、ブラウザベンダーの都合とかコストを一切無視して書くならば、main要素だけでなしに、消去法というか「Scooby Doo」アルゴリズムも実装してくれると嬉しいですね。
制作者の立場からすれば、main要素のような、曖昧さを排除して主要コンテンツを明示する手段は欲しいところだし、たとえmain要素が標準化されたところで、それが必ず全てのページで使用されるわけではない以上、「Scooby Doo」アルゴリズムも欲しいわけで......サンタさん、両方お願いします!!(謎