WCAG2の「十分な達成方法」について

あるいは必要十分条件について1

Nu Html Checkerの場合

Nu Html Checkerは、HTMLをチェックするツールである。Nu Html Checkerで特定の(種類の)エラーを0にすることは、「構文解析」のWCAGの達成基準を満たすための必要十分条件となる。

達成基準 4.1.1 構文解析 (レベル A): マークアップ言語を用いて実装されているコンテンツにおいては、要素には完全な開始タグ及び終了タグがあり、要素は仕様に準じて入れ子になっていて、要素には重複した属性がなく、どの ID も一意的である。ただし、仕様で認められているものを除く。

筆者による上記引用のハイライト部分“どのIDも一意的であること”について見てみる。たとえば以下のHTML断片のように、1つのページに同じid属性値が2回出現することはHTMLのエラーであり、かつ、WCAGの達成基準の違反となる:

<div id="id_1">...</div>
<div id="id_1">...</div>

このようなHTMLのエラーのほかに、達成基準4.1.1の対象となるすべての問題をNu Html Checkerは検出できるので、その対象となるエラーを0にすることは、達成基準4.1.1を満たすために必要なことである。また、Nu Html Checkerが報告するエラーを0にすることによって、達成基準4.1.1を十分に満たすことができる。

すべてのNu Html Checkerが報告するエラーを0にすることは、WCAGの達成基準を満たすために必要ではない。たとえば、次のようなHTML断片は、HTML仕様に違反しているためにエラーとなるが、このエラーはどのWCAG達成基準にも違反していることにはならない:

<!-- div要素にx-error属性は存在しない -->
<div x-error="hoge">...</div>

また、warningは(当然ではあるが)HTMLのエラーではなく、たいていの場合、どのWCAG達成基準の違反にもならない。たとえば、script要素のtype属性は(冗長で)不要であるために検出される:

<!-- script要素のtype属性は不要である -->
<script type="application/javascript" src="script.js"></script>

ただし、特定のwarning2は、達成基準の違反となる。たとえば、次の項目は後述のAxe DevToolsで達成基準4.1.2の問題として報告される:

<!-- See: WAI-ARIA 1.2 https://www.w3.org/TR/wai-aria-1.2/#prohibitedattributes -->
<div aria-label="label text">...</div>

Nu Html Checkerでエラーもwarningも0にすることは、WCAGの(全部の)達成基準を満たすために必要でも十分でもない。しかし、特定のエラーおよびwarningは、達成基準を満たすための必要条件となる(ただし、どのエラーやwarningがどの達成基準に関連するのか、Nu Html Checker自身は教えてくれない)。このことから、Nu Html Checkerによるエラーもwarningも0にすることを、WCAG達成基準の観点から個人的には強く推奨する。

Axe DevToolsの場合

Axe DevTools3は、ウェブアクセシビリティをチェックするツールとして知られている。

たとえば、次のようなHTML断片について、Axe DevToolsは(コントラスト比4.5:1未満であるというコントラスト比の問題として)エラーを検出する:

<style>
body { 
  background-color: #fff;
}
a {
  color: #0088cc; /* コントラスト比 3.9:1 */
}
a:hover {
  color: #005580; /* コントラスト比 8:1 */
}
</style>
...
<a href="/link">リンクテキスト</a>

しかし、以下のHTML断片に対して、Axe DevToolsは、ホバー時のコントラスト比に問題があることをエラーとして検出できない:

<style>
body { 
  background-color: #fff;
}
a {
  color: #005580; /* コントラスト比 8:1 */
}
a:hover {
  color: #0088cc; /* コントラスト比 3.9:1 */
}
</style>
...
<a href="/link">リンクテキスト</a>

Axe DevToolsに限らず、ウェブアクセシビリティのツールで検出される「エラーとなる」項目を0にすることは、達成基準を満たすために必要であるが、ツールはすべての達成基準上の問題を検出できるわけではないので、十分ではない。

いわゆるスキップリンクについて

WCAG 2.1には「ブロックスキップ」という達成基準がある:

達成基準 2.4.1 ブロックスキップ (レベル A): 複数のウェブページ上で繰り返されているコンテンツのブロックをスキップするメカニズムが利用できる。

この達成基準を満たすための、「十分な達成方法」は大きく2つのパターンがある。この記事で説明するWCAG 2.1達成方法集にある達成方法もあわせて示す:

  1. 繰り返されるブロックをスキップするリンクを作成する
  2. スキップ可能な方法で繰り返されるブロックをグループ化する

具体例としてW3C WAIのページを用いて説明する。

このページでは、ページの冒頭に「Skip to Content」というリンクがあり、このリンクでメインコンテンツまで「スキップ」できる。これはG1の達成方法そのものである。以下にコード断片を示す:

<nav>
  <ul>
    <li><a href="#main">Skip to Content</a></li>
    ..
  </ul>
</nav>
<header>...</header>
<main id="main">
  ...
  <h2 id="mwa-title">
    <span class="title">Making the Web Accessible</span>
  </h2>
  ..
</main>

一方で、メインコンテンツ(main要素の箇所)の開始位置には見出し要素が提供されている(これはH69そのものである)。つまり、2種類の方法でブロックスキップの達成基準は満たされている。見方を変えると、適切な箇所に見出しさえ提供できていれば、H69の達成方法となるため、自動的にブロックスキップの達成基準は満たされることになる。言いかえると、WCAGの達成基準を満たすために、スキップリンクを導入することは必須ではない4

ところで、ARIA11はARIAランドマークとしてmainロールについて言及しているが、main要素について言及しているわけではない。つまりARIA11そのものではない(しかしmain要素はmainロールと同じ機能なので、ARIA11と同等である)。

これはつまり、解説書の達成方法にあるように、

この節にある番号付きの各項目は、WCAG ワーキンググループがこの達成基準を満たすのに十分であると判断する達成方法、又は複数の達成方法の組み合わせを表している。しかしながら、必ずしもこれらの達成方法を用いる必要はない。その他の達成方法についての詳細は、WCAG 達成基準の達成方法を理解するの「その他の達成方法」を参照のこと。

とあるとおりである。ARIA11ではない、ARIA11によく似た方法で、達成基準は満たすことは可能である。

達成方法の位置づけ

前述のARIA11に関連するケースを念頭において、解説書の記述を読んでみる。

その他の達成方法には次のような文言がある:

W3C の WCAG 2.1 達成方法集文書にある達成方法に加えて、WCAG 達成基準を満たすその他の方法がある。W3C の達成方法は包括的なものではなく、より新しい技術や状況をカバーしていないかもしれない。

ウェブコンテンツは、WCAG 2.1 に適合するために W3C が公開している達成方法を用いなくてもよい。(上記達成方法は参考情報であるも参照のこと。)

達成方法は参考情報であるには次のような文言がある:

達成方法は、参考情報である。つまり、達成方法は必須要件ではない。WCAG 2.1 への適合を判断する根拠は、WCAG 2.1 で規定している達成基準であり、達成方法ではない。

注記 1: W3C は、W3C の十分な達成方法の要求に対して注意を促す。求められる唯一のことは WCAG 2.05 達成基準を満たすことである。

つまり、WCAG 2.1達成方法集に記載されている達成方法は、WCAG 2.1を満たすための参考情報にしか過ぎない

まとめ

  • ツールによる機械的なチェックでチェックできることは限られている
    • ツールにはエラーではないものも検出する(当たり前ではあるのだけれど)
  • WCAG2達成方法集は参考情報にしか過ぎない
    • 達成方法集はすべてをカバーしてはいない
    • 達成方法集に書いていることに全部従う必要はない

  1. 注意を払って書いたつもりだけれども、間違っている箇所があるかもしれない。

  2. 記事執筆時点では。将来、エラーとして報告されるようになるかもしれない。

  3. 執筆時点のバージョンは、axe-core 4.4.2

  4. HTML解体新書のp.167にもあるとおり。

  5. 原文ママ