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
小売アプリのためのアクセシビリティ / Accessibility for Retail Apps
Search
CyberAgent
PRO
November 21, 2023
Technology
0
86
小売アプリのためのアクセシビリティ / Accessibility for Retail Apps
CyberAgent
PRO
November 21, 2023
Tweet
Share
More Decks by CyberAgent
See All by CyberAgent
2025年度 生成AI 実践編
cyberagentdevelopers
PRO
3
200
LLMを用いたメタデータベースレコメンド検証
cyberagentdevelopers
PRO
5
1.4k
CodeAgentとMCPで実現するデータ分析エージェント
cyberagentdevelopers
PRO
1
240
SQL Agentによるタップルのデータ利活用促進
cyberagentdevelopers
PRO
1
410
NAB Show 2025 動画技術関連レポート / NAB Show 2025 Report
cyberagentdevelopers
PRO
1
390
【2025年度新卒技術研修】100分で学ぶ サイバーエージェントのデータベース 活用事例とMySQLパフォーマンス調査
cyberagentdevelopers
PRO
7
10k
【CA.ai #1】未来を切り拓くAIエージェントの可能性
cyberagentdevelopers
PRO
3
150
【CA.ai #1】MCP世界への招待:AIエンジニアが創る次世代エージェント連携の世界
cyberagentdevelopers
PRO
2
160
【CA.ai #1】ABEMA のコンテンツ制作を最適化! 生成 AI × クラウド映像編集システム
cyberagentdevelopers
PRO
0
130
Other Decks in Technology
See All in Technology
KubeCon + CloudNativeCon Japan 2025 Recap
ren510dev
1
300
無意味な開発生産性の議論から抜け出すための予兆検知とお金とAI
i35_267
0
860
KubeCon + CloudNativeCon Japan 2025 に行ってきた! & containerd の新機能紹介
honahuku
0
120
PHPでWebブラウザのレンダリングエンジンを実装する
dip_tech
PRO
0
220
Node-RED × MCP 勉強会 vol.1
1ftseabass
PRO
0
180
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
1.2k
開発生産性を組織全体の「生産性」へ! 部門間連携の壁を越える実践的ステップ
sudo5in5k
0
340
OPENLOGI Company Profile
hr01
0
67k
2025-06-26_Lightning_Talk_for_Lightning_Talks
_hashimo2
2
110
生成AI時代の開発組織・技術・プロセス 〜 ログラスの挑戦と考察 〜
itohiro73
1
370
KubeCon + CloudNativeCon Japan 2025 Recap by CA
ponkio_o
PRO
0
240
CI/CD/IaC 久々に0から環境を作ったらこうなりました
kaz29
1
200
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
331
24k
Agile that works and the tools we love
rasmusluckow
329
21k
Fireside Chat
paigeccino
37
3.5k
RailsConf 2023
tenderlove
30
1.1k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Site-Speed That Sticks
csswizardry
10
670
Practical Orchestrator
shlominoach
188
11k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Being A Developer After 40
akosma
90
590k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Scaling GitHub
holman
459
140k
Transcript
小売アプリのための アクセシビリティ 1 増山 洸輝
2 増山 洸輝 2023年度 中途入社 AI 事業本部 アプリ運用カンパニー所属 @masssun モバイルアプリチームのリードエンジニアを
しています
アプリ運用カンパニーとは • 小売企業様と協業して、アプリを中心としたデジタルでの購買体験の実現を 行う事業部 3
アジェンダ 1.アクセシビリティとは 2.何故アクセシビリティが必要なのか 3.Flutter におけるアクセシビリティ対応 4.アクセシビリティ対応 Tips a.スクリーンリーダー b.大きいフォント 5.まとめ
4
アジェンダ 1.アクセシビリティとは 2.何故アクセシビリティが必要なのか 3.Flutter におけるアクセシビリティ対応 4.アクセシビリティ対応 Tips a.スクリーンリーダー b.大きいフォント 5.まとめ
5
アクセシビリティとは ・Accessibility is the practice of making your websites usable
by as many people as possible. (アクセシビリティとは、ウェブサイトをできるだけ多くの人が利用できるように することです。) https://developer.mozilla.org/en-US/docs/Learn/Accessibility/What_is_accessibility 6
アクセシビリティとは ❌ 障害を持つ人のための対応 ⭕ 障害を持つ人だけでなく、異なる情報端末やソフトウェアを利用する人でも 情報にアクセスできるようにすること 7
モバイルにおけるアクセシビリティ ・VoiceOver / TalkBack 画面が見えなくてもアプリのインターフェイスを体験できるよう、画面の表示内 容の説明を読み上げる機能 8
モバイルにおけるアクセシビリティ ・文字サイズのカスタマイズ 文字を太くする、文字を大きくする、コントラストを上げる、カラーの反転 9
モバイルにおけるアクセシビリティ ・Assistive Touch 音量を調節する、画面をロックするといったボタンを押す操作を画面のタップに 置き換える 10
アジェンダ 1.アクセシビリティとは 2.何故アクセシビリティが必要なのか 3.Flutter におけるアクセシビリティ対応 4.アクセシビリティ対応 Tips a.スクリーンリーダー b.大きいフォント 5.まとめ
11
何故アクセシビリティが必要なのか ・今回の案件は既存アプリのリニューアル ・すでに多くのユーザーを抱えていて、様々な世代な人々が使用している 12
何故アクセシビリティが必要なのか ・日本における身体障害者の割合 ・約 3 % https://www8.cao.go.jp/shougai/whitepaper/h29hakusho/zenbun/siryo_02.h tml 13
アジェンダ 1.アクセシビリティとは 2.何故アクセシビリティが必要なのか 3.Flutter におけるアクセシビリティ対応 4.アクセシビリティ対応 Tips a.スクリーンリーダー b.大きいフォント 5.まとめ
14
Flutter におけるアクセシビリティ対応 ・スクリーンリーダー (VoiceOver / TalkBack) ・OS の設定に基づいたフォントサイズ ・十分なコントラスト https://docs.flutter.dev/ui/accessibility-and-internationalization/access
ibility 15
スクリーンリーダー ・Semantics widget ・widget ツリーに、widget の説明を追加する ・e.g. このテキストが何であるか、ボタンをタップすると何が起こるのか https://api.flutter.dev/flutter/widgets/Semantics-class.html 16
Semantics widget 17
Semantics widget ・標準 widget の多くは Semantics で wrap されている ・e.g.
AppBar, Text, etc. 18
AppBar 19
OS の設定に基づいたフォントサイズ ・Text widget を使っていれば、フォントサイズは OS の設定に基づいて Flutter が自動的に計算する 20
Flutter におけるアクセシビリティ対応 ・特別な対応をせずとも、アクセシブルなアプリケーションを構築することがで きる 21
アジェンダ 1.アクセシビリティとは 2.何故アクセシビリティが必要なのか 3.Flutter におけるアクセシビリティ対応 4.アクセシビリティ対応 Tips a.スクリーンリーダー b.大きいフォント 5.まとめ
22
アジェンダ 1.アクセシビリティとは 2.何故アクセシビリティが必要なのか 3.Flutter におけるアクセシビリティ対応 4.アクセシビリティ対応 Tips a.スクリーンリーダー b.大きいフォント 5.まとめ
23
画像 24
画像 ・https://pub.dev/packages/cached_network_image を使用していたので、 Semantics widget で wrap した ・Image widget
を使用している場合は、semanticsLabel に文字列を渡せば良い 25
画像 26
複数スタイルのテキスト 27
複数スタイルのテキスト 28
複数スタイルのテキスト ・読み上げられるテキストは分かれてしまうので、まとめたい 29
複数スタイルのテキスト ・MergeSemantics widget https://api.flutter.dev/flutter/widgets/MergeSemantics-class.html ・RichText widget (※) 30
MergeSemantics widget 31
RichText widget ・textScaleFactor のデフォルト値が 1 のため、 MediaQuery.textScaleFactorOf(context) を指定する必要がある 32
アイコン付きのボタン 33
アイコン付きのボタン ・アイコン部分は読み上げたくない 34
アイコン付きのボタン ・ExcludeSemantics widget https://api.flutter.dev/flutter/widgets/ExcludeSemantics-class.html 35
テキスト 36
テキスト ・semanticsLabel を設定する 37
ListView 38
ListView 39
ListView ・children に渡した widget で ひとつの semantics tree が構築される 40
ListView ・SingleChildScrollView + Column に変更した ・パフォーマンスの劣化が懸念されるが、レンダリングコストが低い画面だった ため、許容 41
ListView を使わなければならない場合 ・addSemanticIndexes に false を指定し、子 widget を IndexedSemantics で
wrap する 42
スナックバー 43
スナックバー ・コンテンツが表示されたことに気づけないため、自動で読み上げる必要がある ・Semantics.liveRegion に true を設定する 44
タップ領域 ・小さすぎると、UI を発見することができない ・最低でも 44px * 44px を確保する https://developer.apple.com/jp/design/tips/ 45
アジェンダ 1.アクセシビリティとは 2.何故アクセシビリティが必要なのか 3.Flutter におけるアクセシビリティ対応 4.アクセシビリティ対応 Tips a.スクリーンリーダー b.大きいフォント 5.まとめ
46
Text widget ・Text Scale Factor ・ フォントサイズは OS の設定に基づいて Flutter
が自動的に計算する 47
Text Scale Factor で気をつけること ・Layout overflow を起こさないような UI の組み方をする 48
Layout overflow を防ぐ ・SizedBox で width, height を固定にしない ・ConstrainedBox で
minWidth, minHeight を設定し、child の大きさに応じて 拡大できるようにする 49
Layout overflow を防ぐ ・Column の子 widget は Wrap / Expanded
で wrap し、画面端で改行される ようにする 50
Layout overflow を防ぐ ・GridView 51
Layout overflow を防ぐ ・flutter_layout_grid を使って高さが可変になるようにしている https://pub.dev/packages/flutter_layout_grid 52
53 レイアウト崩れを起こしていない ≠ 違和感のないデザイン
54
1行におさめる ・TextOverflow.ellipsis を指定して、三点リーダーで切る ・FittedBox を使用する (fit には BoxFit.scaleDown を指定) ・textScaleFactor
の上限値を設定する 55
FittedBox を使用する ・同じような UI を並べる場合には不向き 56
textScaleFactor の上限値を設定する 57
アジェンダ 1.アクセシビリティとは 2.何故アクセシビリティが必要なのか 3.Flutter におけるアクセシビリティ対応 4.アクセシビリティ対応 Tips a.スクリーンリーダー b.大きいフォント 5.まとめ
58
まとめ ・アクセシビリティ対応は難しくない ・プロジェクトの初期から実装することで、自然とアクセシブルになり、アクセ シビリティのための追加の工数はほとんど必要ない 59