はじめに
この記事は、アクセシビリティ Advent Calendar 2022の参加記事です。
アクセシビリティツリーとは
アクセシビリティツリーは別名アクセシビリティオブジェクトモデルとも呼ばれ、DOMツリーに基づいて生成されるスクリーンリーダーなどの支援技術に使用される情報です。
つまり、アクセシビリティツリーを確認することで、どのような情報が支援技術に提供されているかがわかり、アクセシビリティ対応に役立ちます。
See the Pen Untitled by かべちよ (@kabechiyo13) on CodePen.
例えば、アイコンにMaterial Symbolsを使用したこのボタンをアクセシビリティツリーで見てみると以下のように表示されます。
ボタンのラベルとして表示している「送信する」のテキストだけでなく、Material Symbolsはアイコンフォントのため、アイコンを表示するために指定したテキストの「send」もボタンのテキストとして渡されており、「送信する send」という冗長なラベルがボタンについてしまっています。
これは要素をアクセシビリティツリーに渡さないようにするaria-hidden: true;
をアイコンに指定すると、アイコンに指定したテキストが無視されるようになり、防ぐことができます。
See the Pen Button for Accessibility tree 2 by かべちよ (@kabechiyo13) on CodePen.
アクセシビリティツリー上で無事、ボタンのラベルが「送信する」になっていることを確認できました。
このようにアクセシビリティツリーを確認することで、レンダリングされたページや通常のDOMツリーを見ているだけでは気付きづらいアクセシビリティ上の欠陥に気づくことができます。
アクセシビリティツリーの表示方法(Chrome)
Chromeでは検証モードのAccessibilityのタブEnable full-page accessibility tree
にチェックを入れ画面上部に出てくるReload DevTools
をクリックすると、右上にアクセシビリティアイコンが出てアクセシビリティツリーを確認することができます。
アクセシビリティツリーの読み方
アクセシビリティツリーにはrole
、name
、description
,state
などを持っていて、それぞれ以下のような情報を読み取ることができます。
-
role(役割)
- 要素の種類を示す
- タグやrole属性によって割り振られる
- Ex) ボタン要素には
button
、テキスト要素にはstaticText
など
-
name(名前)
- 要素の情報を提供するテキスト
-
aria-labelledby
、aria-label
、label
、placeholder
、figcaption
、alt
、caption
、legend
、text contents
、title
、value
などから生成される - Ex) 「 送信する」というボタンには
送信する
など
-
description
- 要素に関する追加の説明を提供するテキスト
-
aria-describedby
、title
、placeholder
などから生成される - Ex) メールアドレスを入力するテキストボックスのプレースホルダーの
exampla@mail.com
など
-
state
- 要素の状態を示す
- Ex) 折りたたみ要素が折りたたまれているなら
expanded: true
、フォーカス可能な要素ならfocusable: true
など
これらの情報を参照することで、マークアップが意図した通りにアクセシビリティツリーに反映されているのか、もしくはいないのかを確認することができます。
また、アクセシビリティツリー上でIgnored
と表示されたノードは無視され、支援技術上で読み上げられません。
例えば、aria-hidden: true
が指定されたアイコン要素などはIgnored
と表示され、無視されます。
これを確認することで、冒頭で紹介したような装飾のための要素で読み上げられると情報の理解に邪魔になる要素(アイコンなど)を支援技術でスキップさせたいときにきちんとスキップされているかを確認することができます。
参照記事
MDNのAccessibility treeに関するページです。
日本語で書かれていて読みやすいのでざっとアクセシビリティツリーについて知るのにおすすめです。
W3Cのname
とdescription
に関するページです。
英語ですが、name
とdescription
を決定する方法について解説されていて、関連する用語も多く紹介されています。
Chrome Developers のChromeのアクセシビリティツリーに関するブログです。
Chromeのアクセシビリティツリーの概要が紹介されています。
Chromium Code SearchのAccessibilityに関するページです。
アクセシビリティとアクセシビリティツリーの概要について紹介されています。
Level Accessのname
とdescription
を決定する方法についての記事とARIAツリーについての記事です。