Slide 1

Slide 1 text

grgr-dkrk @ React Native Meetup #12 React Native アプリで スクリーンリーダーを使ってみる

Slide 2

Slide 2 text

自己紹介 grgr-dkrk 「ぐるぐる、できるこ」と読みます 株式会社 CureApp エンジニア ※発表内容は所属する組織・団体と一切関係ありません

Slide 3

Slide 3 text

今日やること React Native のアプリで、VoiceOver, TalkBack を使ってみる

Slide 4

Slide 4 text

VoiceOver, TalkBack について 画面を見ずにテキストの読み上げ、入力などができる iOS は VoiceOver Android は TalkBack

Slide 5

Slide 5 text

断り書き 読み上げ方がおかしい箇所も出てきます。 だいたい React Native のバグなのでお許しください

Slide 6

Slide 6 text

1. 基本 2. ロールを設定する 3. 状態を伝える ※ https://github.com/grgr-dkrk/rnA11yTsurami の Tour を参照 項目

Slide 7

Slide 7 text

1. 基本

Slide 8

Slide 8 text

基本操作 ૢ࡞ 7PJDF0WFS 5BML#BDL ىಈͱऴྃ ϗʔϜϘλϯճԡ͠ αΠυϘλϯճԡ͠ ԻྔͱϘλϯಉ࣌ʹ਺ඵ ϑΥʔΧεΛҠಈ ͳͧΔ ʢલޙͷ߲໨ʹʣ ϑΥʔΧεΛҠಈ ࠨ·ͨ͸ӈʹεϫΠϓͯ͠཭͢ λοϓ ϑΥʔΧεΛ߹Θͤͨঢ়ଶͰμϒϧλοϓ ʢμϒϧλοϓ͢ΔͳΒτϦϓϧλοϓʣ εΫϩʔϧ ຊͷࢦͰεϫΠϓ ຊͷࢦͰεϫΠϓ

Slide 9

Slide 9 text

フォーカス可能にする props で accessible を指定すると、フォーカス可能になる。 accessible なコンポーネントの子要素は、グループ化されて読み上げられる。 はデフォルトで accessible になっている。 ※ Android だけなら次の accessibilityLabel だけでも OK

Slide 10

Slide 10 text

ラベルを設定 文字画像などがあって、画面を見ないと何の画像かわからない時など、 代替コンテンツとして、説明用のテキスト(ラベル)を設定する。 iOS はフォーカス可能(accessible)でないと読まれない。 ※ ユーザー自身がラベルを設定することもできる

Slide 11

Slide 11 text

ラベルを設定 ʮସ͑ۄແྉʯ

Slide 12

Slide 12 text

ラベル注意 {props.isFoo || ''} iOS は空文字も accessible なのでフォーカスが当たってしまう。 空文字が入るかもしれない時は accessible を false に指定しておく

Slide 13

Slide 13 text

2. ロールを設定する

Slide 14

Slide 14 text

ロールを設定する ロールがあれば「リンク」「ボタン」などの役割を読み上げてくれる。 なくても操作はできるが、あった方がわかりやすい。 ※ ロールは React Native の概念。 また Web のとは別物

Slide 15

Slide 15 text

主なロール ໊લ ໾ׂ JNBHF JNBHFCVUUPO ը૾ɺը૾Ϙλϯ MJOL ϦϯΫ CVUUPO Ϙλϯ ϦϯΫϝχϡʔΛ։͘ ͳ͠ ※ 詳しくは https://reactnative.dev/docs/accessibility#accessibilityrole

Slide 16

Slide 16 text

ロールを設定する ʮλΠτϧͰ͢ʯݟग़͠ λΠτϧͰ͢

Slide 17

Slide 17 text

ロールを設定する 見出しなどはページ内移動にも使える。

Slide 18

Slide 18 text

ナビゲーション操作 ૢ࡞ 7PJDF0WFS 5BML#BDL φϏήʔγϣϯઃఆ ຊࢦͰ ยํΛ্ยํΛԼʹ ຊࢦͰ ্Լ͔ࠨӈʹεϫΠϓ φϏήʔγϣϯઃఆʹԊͬͨ ϑΥʔΧεͷҠಈ ্·ͨ͸ԼʹεϫΠϓͯ͠཭͢ ը໘্෦ɺԼ෦ʹҠಈ ຊࢦͰ ը໘ͷ্෦͔Լ෦Λλοϓ ͳ͠ ϦϯΫͳͲͷ ϝχϡʔΛ։͘ ͳ͠ ຊࢦͰճλοϓ

Slide 19

Slide 19 text

ロールを設定する時の注意 0.64 時点では Android でロールの日本語読み上げができない。 自分で日本語設定を追加する必要がある。 android/app/src/main/res/values-ja/strings.xml 仮で作った https://github.com/grgr-dkrk/react-native-japanese- accessibility-role/

Slide 20

Slide 20 text

ロールを設定する時の注意 accessible な要素の子は、ロールが無視される。 ナビゲーションにも使えない。 ※ 0.64 時点の仕様 {/* ςΩετ΋ accessible ͳͷͰ NG */} ϦϯΫ͸ ͪ͜Β

Slide 21

Slide 21 text

ロールを設定する時の注意 ロールだけを設定すると、 Android でロールが先に読み上げられてしまう。 ラベルも一緒に設定しないといけない…。 ※ TalkBack のバグ ϦϯΫ͸ͪ͜Β

Slide 22

Slide 22 text

3. 状態を伝える

Slide 23

Slide 23 text

状態を伝える React Navigation の現在開いているタブは、「選択済み」と読み上げられる ʮબ୒ࡁΈʯϗʔϜը໘

Slide 24

Slide 24 text

状態を伝える `accessibilityState` を渡して状態を変更する CVTZ DIFDLFE TFMFDUFE EJTBCMFE

Slide 25

Slide 25 text

No content