NIKKEI TECHNOLOGY AND CAREER

日経電子版アクセシビリティの取り組み

Introduction

この記事は Nikkei Advent Calendar の 4 日目の記事です。 Web チームの伊藤です。

この記事では、電子版フロントエンドを実装する上でアクセシビリティに配慮した実装を行った箇所を具体例を挙げて紹介します。

Web アクセシビリティについて

Web アクセシビリティは通常、「様々な利用者が Web サイトを使えるようにする」ものだと言われています。

具体的な手法としては、WCAG及びその達成方法集に則った実装を行うことが挙げられます。 独自にガイドラインを制定している会社もありますが、実際には、これらの基準をすべて満たすことは難しいでしょう。

比較的簡単に取り組めるところでは、Lighthouse のアクセシビリティスコアを上げることが考えられ、新規に実装する場合には、レビューなどで Lighthouse のスコアを上げる形になります。

本エントリでは、日経電子版で Lighthouse スコアだけでは表せないアクセシビリティ向上に取り組んだ例を紹介します。

フォローボタン

フォローボタン画像

フォローボタンは、記事のトピックを「フォロー」することで Myニュースで閲覧することができるようにする機能です。 このボタンで行ったことは以下です。

  • aria-pressed の実装
  • Popover 実装
    • role: dialog の実装
    • キーボードトラップの実装

aria-pressed の実装

フォローボタンはクリックすると「フォロー済み」という表記に変わる2つの状態を持つトグルボタンです。

これを表現するため、html を <button type="button" aria-pressed="false"> のようにしておき、ボタンをクリックすると aria-pressed 属性の値を true に変えるという処理を入れています。

aria-pressed は button role で利用できる属性の1つで、これを利用することにより、普通のボタンにトグルボタンという意味を支援技術に伝えることができます。 ここでいう「支援技術」はスクリーンリーダーや音声ブラウザといった、障害者が Web を利用する際に用いるハードウェア・ソフトウェアを指します。

詳しくは W3C の aria-pressed の項を参照してください。

https://www.w3.org/TR/wai-aria-1.1/#aria-pressed

Popover 実装

フォロー機能は有料会員のみに提供しており、ログインしていないユーザには次の画像のような Popover を表示しています。

フォローボタンの Popover 実装

こういった Popover の実装時に行っているのが role: dialog と キーボードトラップです。

role: dialog

role: dialog はメインウィンドウの子ウィンドウであることを示す WAI-ARIA role です。

Popover 内はページのメインウィンドウとは別のコンテキストを持つ UI です。 それを明示するため、role: dialog を付けました。

以下に実装例を示します。

<div role="dialog" aria-labelledby="title">
	<h2 id="title">タイトル</h2>
</div>

このように指定すると、NVDA といったスクリーンリーダーが「タイトル ダイアログ」と読んでくれるようになります。

詳しくは W3C の dialog の項を参照してください。

https://www.w3.org/TR/wai-aria-1.1/#dialog

キーボードトラップ

キーボードトラップはユーザがキーボードのみで Webページを操作できるようにすることを支援するために実装します。

ページ及びダイアログ内はナイーブに実装すれば Tab キーで遷移できるようにできますが、ダイアログ内の最後のリンクまたはボタンで Tab キーを押すと、ダイアログの外側のページにフォーカスが移ってしまいます。 このフォーカスの移動がダイアログ内に閉じるようにするのがキーボードトラップです。

「Enter」キーでボタンをクリックするとダイアログ内にフォーカスが移動し、「Tab」キーでダイアログ内を移動、「Esc」キーでダイアログを閉じるという一連の操作をキーボードのみで行えるようにすることをサポートします。

実際の動作は次の gif 画像のようになります。

フォローボタンのキーボードトラップ

詳しくは W3C の No Keyboard Trap の項を参照してください。

https://www.w3.org/TR/WCAG21/#no-keyboard-trap

余談ですが、実は Popover を閉じる処理は「Ctrl + [」でもできるようにしています。 私は vim でエスケープする時に「Esc」キーではなく「Ctrl+[」を使っていて、このほうがホームポジションを崩さずに入力できるので便利です。vimに慣れている方はぜひ試してみてください。

記事保存ボタンのメモ入力欄

各記事ページには記事をMyニュースに保存するボタンが付いています。

記事保存ボタンのメモ入力欄

有料会員になると、ここから記事を保存するだけでなく、各記事にラベルをつける・メモを取るという機能が使えるようになります。 このメモ入力欄は次のような実装になっています。

<textarea aria-controls="memo">
</textarea>
<span id="memo" aria-live="polite">0/100文字</span>

テキストエリアで文字を入力すると、何文字入力されたかを JavaScript でカウントし、表示します。最大で100文字まで入力できるようになっています。

この実装を行うことで、NVDAなどのスクリーンリーダーが文字を入力するたびに「N文字/100文字」のように <span> の文字数表示を読み上げてくれるようになります。

aria-controls はどの要素によってコントロールされているのかを示す aria 属性です。 この属性に指定した id を持つ要素の変更を検知します。

aria-live はスクリーンリーダーが読み上げるタイミングを指定します。この例では "polite" という値を指定していますが、この値を設定した場合、ユーザがタイピングをやめたタイミングなど、ちょうど良いタイミングで読み上げを行うことを指示します。 その他、"off" と "assertive" という値があり、それぞれ、「通知しない(デフォルト)」「指定した要素が変更されたらすぐに読み上げる」ことを指示します。

詳しくは以下の W3C のドキュメントを参照してください。

https://www.w3.org/TR/wai-aria-1.1/#aria-controls https://www.w3.org/TR/wai-aria-1.1/#aria-live

終わりに

日経電子版では、先日トップページのデザインをリニューアルしました。 電子版トップページは毎日約100万ほどのアクセスがあり、利用するユーザも多様であることから、Web アクセシビリティに取り組む価値の高いサイトだと思っており、今後も継続してアクセシビリティの向上に取り組んで行きます。 一緒にアクセシビリティの向上に取り組んでみたい方、話を聞いてみたい方は 是非 JOBSからご連絡ください!

明日は山田さんによる「VRデバイスの技術検証 ~Quest 2を使ってみた~」です。

伊藤大晃
ENGINEER伊藤大晃

Entry

各種エントリーはこちらから

キャリア採用
Entry
新卒採用
Entry
カジュアル面談
Entry