Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
React Spectrum Libraries によるアクセシブルなUIの構築
Search
mattsuu
December 14, 2023
0
4.1k
React Spectrum Libraries によるアクセシブルなUIの構築
Nihonbashi.js #8 (2023/12/14) での発表資料
mattsuu
December 14, 2023
Tweet
Share
More Decks by mattsuu
See All by mattsuu
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
260
React Aria で実現する次世代のアクセシビリティ
ryo_manba
5
2.6k
5分で分かる React Aria の 良いところ・これからなところ
ryo_manba
5
6.2k
アクセシブルなインクリメンタルサーチを作ってみた
ryo_manba
2
470
Next.js の fetch 拡張とキャッシュ機構の違いを理解する
ryo_manba
6
1.6k
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
960
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Being A Developer After 40
akosma
90
590k
Statistics for Hackers
jakevdp
799
220k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
How to Ace a Technical Interview
jacobian
278
23k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
54k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Transcript
React Spectrum Libraries によるアクセシブルなUIの構築 @ryo_manba 2023/12/14 Nihonbashi.js #8
⾃⼰紹介 • まっつー / Ryo Matsukawa • X(@ryo_manba) • Cybozu
のフロントエンドエンジニア • 最近は Next.js の App Router 書いてます
話すこと 1. アクセシブルなコンポーネントについて 2. React Spectrum Libraries について 3. React
Aria による振る舞いの実装 4. React Stately による状態の管理 5. メリット / デメリット 6. まとめ
ウェブアクセシビリティとは • ⼼⾝の機能に制約のある⼈でも、情報にアクセスし利⽤できること • ⼀時的な障害や状況的制約を持つ⼈々にもアクセスを提供する • メガネやコンタクトレンズを忘れたとき • マウスやキーボードの故障 •
サポート例 • 視覚障害︓読み上げ機能 • 上肢障害︓細かい⼒加減が必要ない、インタラクティブな要素の設計
どのように実装するか • W3C の Authoring Practices Guide(APG) が役⽴つ • UI
コンポーネントをアクセシブル にするための実装例と解説
APG のガイドライン • WAI-ARIA 属性の正しい使⽤⽅法やキーボードサポートなど、 アクセシブルなコンポーネント実装について解説されている
アクセシブルな実装における問題点 • WAI-ARIA 属性 • 使い⽅を誤ると本来の⽬的とは逆にアクセシビリティを低くしてしまう • キーボードサポート • 各キー⼊⼒に対してイベントハンドラを実装するとコード量が肥⼤する
• ドメインロジックとの組み合わせでメンテが⼤変に aria-label などのスクリーンリーダーによる対応やキーボード、タッチデバイス による操作性については妥協するしかない…︖
React Spectrum Libraries • Adobe が提供するアクセシブルで堅牢なユーザー体験を⽀援 するライブラリ郡 • 4種類が提供されている •
Internationalized︓国際化⽤のライブラリ • React Spectrum︓Adobe のデザインシステムを実装したもの • React Aria︓アクセシビリティと動作を提供する • React Stately︓クロスプラットフォームの状態管理
React Spectrum の設計思想 • State Hook • プラットフォーム間で共有され、ウェブ、React Native、 その他のどのプラットフォームでも動作する状態管理
• Behavior Hook • イベント処理、アクセシビリティ、国際化 • Component • Behavior Hook と State Hook を組み合わせて ⾒た⽬を実装
React Spectrum の設計思想
React Aria • React Hooks のライブラリ • useButton, useSelect, etc..
• UI コンポーネントにアクセシビリティと動作 を提供する • マウス、タッチ、キーボード、 スクリーンリーダーのサポート • マルチブラウザやクロスプラットフォーム、 国際化に対応
React Aria の使⽤例 • レンダリングを提供しないため、 DOM の構造を⾃由に定義 できる • Hooks
によって返される DOM Props を適切な要素 に渡すのは実装者の責務
useButton を使う理由 • ボタンは実際にはかなりのインタラクションをサポートしている • マウスによるクリック • タッチスクリーンでのタップ • キーボードによるフォーカスと
Enter や Space キーにより有効化 • スクリーンリーダーなどの⽀援技術 • デバイスやブラウザ間で動作が異なる • 詳しくは React Spectrum が提供しているブログを参照 • Building a Button Part 1: Press Events
React Stately • React Hooks のライブラリ • useSelectState, useTableState, etc..
• クロスプラットフォームの状態管理を 提供する • React Aria と組み合わせて使⽤できる
React Stately の使⽤例 • React Aria との 組み合わせが容易 • setValue
などのメソッドで 外部から状態を変えることも できる
React Aria と React Stately のメリ/デメ • メリット • 柔軟なカスタマイズが可能
• 操作やアクセシビリティをコンポーネントの実装から切り出せる • デメリット • 意図的に低レベルな API として作られているため、学習コストがかかる
React Aria Components • React Aria と React Stately を組み合わせた
Headless UI ライブラリ • スタイルを当てるだけで簡単に実装できる • 2023年内に安定版の v1.0 のリリースが明⾔されている
React Aria Components
まとめ • Headless UI ライブラリと⽐べ、柔軟なカスタマイズが可能 • React Aria Components から導⼊してみて、
必要に応じて React Aria と React Stately を活⽤すると良さそう • React Spectrum Libraries を活⽤してアクセシブルなコンポーネント を実装しよう