Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
React Spectrum Libraries によるアクセシブルなUIの構築
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mattsuu
December 14, 2023
4.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React Spectrum Libraries によるアクセシブルなUIの構築
Nihonbashi.js #8 (2023/12/14) での発表資料
mattsuu
December 14, 2023
More Decks by mattsuu
See All by mattsuu
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
400
CSS Linter の現在地 2025年のベストプラクティスを探る
ryo_manba
12
4.6k
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
440
React Aria で実現する次世代のアクセシビリティ
ryo_manba
5
3.3k
5分で分かる React Aria の 良いところ・これからなところ
ryo_manba
5
7.1k
アクセシブルなインクリメンタルサーチを作ってみた
ryo_manba
2
640
Next.js の fetch 拡張とキャッシュ機構の違いを理解する
ryo_manba
6
1.9k
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
450
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Raft: Consensus for Rubyists
vanstee
141
7.7k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
660
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
Marketing to machines
jonoalderson
1
5.8k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
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 を活⽤してアクセシブルなコンポーネント を実装しよう