【アクセシビリティツリー】

アクセシビリティツリー とは?

💡 DOMの「意味だけ」を抜き出した、支援技術専用の設計図
📌 このページのポイント
DOMツリー → アクセシビリティツリー DOMツリー document <body> <nav> <div>装飾 <h1> <a> 変換 装飾を除外 アクセシビリティツリー root role: navigation name: "メイン" role: heading name: "タイトル" role: link name: "ホーム" 意味のある要素 → 残る 装飾要素 → 除外される
アクセシビリティツリーのイメージ
ひよこ ひよこ

アクセシビリティツリーって、DOMツリーとは別物なの?

ペンギン先生 ペンギン先生

DOMツリーから派生して作られる「もう一つのツリー」だよ。DOMは見た目のレイアウトも含む全部の情報を持つけど、アクセシビリティツリーは支援技術が必要とする「意味」の情報だけに絞り込んだものなんだ。装飾用のdivやspan、aria-hidden="true"の要素はここから除外されるよ

ひよこ ひよこ

中にはどんな情報が入ってるの?

ペンギン先生 ペンギン先生

各ノードには4つの主要プロパティがあるよ。role(ボタン、リンク、見出しなどの役割)、name(「送信」「メニューを開く」などの名前)、state(展開中、選択済みなどの状態)、value(スライダーの値など)。スクリーンリーダーはこの情報をもとに読み上げるんだ

ひよこ ひよこ

HTMLのタグが自動でroleになるの?

ペンギン先生 ペンギン先生

そうだよ。buttonタグは自動でrole="button"になるし、h1はrole="heading"になる。これを暗黙のロールと言うんだ。だからセマンティックなHTMLを書くことが、アクセシビリティツリーを正しくする最短ルートなんだよ

ひよこ ひよこ

実際にアクセシビリティツリーを見る方法はある?

ペンギン先生 ペンギン先生

Chrome DevToolsの「要素」パネルで要素を選択すると、右側に「アクセシビリティ」タブがあるよ。そこでその要素のrole、name、stateが確認できる。さらにDevToolsの実験的機能で「フルページアクセシビリティツリー」を有効にすると、DOMツリーの代わりにアクセシビリティツリー全体を表示できるんだ

ひよこ ひよこ

アクセシビリティツリーがおかしいとどうなるの?

ペンギン先生 ペンギン先生

スクリーンリーダーが間違った情報を読み上げてしまうよ。たとえばdivでボタンを作ると、アクセシビリティツリーではroleが「generic」になって、ユーザーは「ここがクリックできる」と分からない。nameが空だと「ボタン」とだけ読み上げられて何のボタンか分からない。テストのときはアクセシビリティツリーを確認する習慣をつけるのが大事だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「アクセシビリティツリー」って出てきたら「ブラウザ支援技術のために作る意味のツリー」と思えばだいたいOK!
📖 おまけ:英語の意味
「Accessibility Tree」 = アクセシビリティ(利用しやすさ)のためのツリー構造
💬 DOMツリーの「見た目」を取り除いて「意味」だけにした木構造だから、Accessibility Tree(アクセシビリティの木)と呼ばれているよ
← 用語集にもどる