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
3.5k
React Spectrum Libraries によるアクセシブルなUIの構築
Nihonbashi.js #8 (2023/12/14) での発表資料
mattsuu
December 14, 2023
Tweet
Share
More Decks by mattsuu
See All by mattsuu
React Aria で実現する次世代のアクセシビリティ
ryo_manba
4
2.2k
5分で分かる React Aria の 良いところ・これからなところ
ryo_manba
5
5.4k
アクセシブルなインクリメンタルサーチを作ってみた
ryo_manba
2
370
Next.js の fetch 拡張とキャッシュ機構の違いを理解する
ryo_manba
5
1.2k
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Site-Speed That Sticks
csswizardry
2
190
For a Future-Friendly Web
brad_frost
175
9.4k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
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 を活⽤してアクセシブルなコンポーネント を実装しよう