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
89
小売アプリのためのアクセシビリティ / Accessibility for Retail Apps
CyberAgent
PRO
November 21, 2023
Tweet
Share
More Decks by CyberAgent
See All by CyberAgent
2025年度 生成AI 実践編
cyberagentdevelopers
PRO
4
330
LLMを用いたメタデータベースレコメンド検証
cyberagentdevelopers
PRO
6
1.9k
CodeAgentとMCPで実現するデータ分析エージェント
cyberagentdevelopers
PRO
1
350
SQL Agentによるタップルのデータ利活用促進
cyberagentdevelopers
PRO
1
510
NAB Show 2025 動画技術関連レポート / NAB Show 2025 Report
cyberagentdevelopers
PRO
1
460
【2025年度新卒技術研修】100分で学ぶ サイバーエージェントのデータベース 活用事例とMySQLパフォーマンス調査
cyberagentdevelopers
PRO
8
11k
【CA.ai #1】未来を切り拓くAIエージェントの可能性
cyberagentdevelopers
PRO
4
280
【CA.ai #1】MCP世界への招待:AIエンジニアが創る次世代エージェント連携の世界
cyberagentdevelopers
PRO
2
260
【CA.ai #1】ABEMA のコンテンツ制作を最適化! 生成 AI × クラウド映像編集システム
cyberagentdevelopers
PRO
0
240
Other Decks in Technology
See All in Technology
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
スマートファクトリーの第一歩 〜AWSマネージドサービスで 実現する予知保全と生成AI活用まで
ganota
2
220
S3アクセス制御の設計ポイント
tommy0124
3
200
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
940
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
190
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
870
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
480
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
10k
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
410
Webブラウザ向け動画配信プレイヤーの 大規模リプレイスから得た知見と学び
yud0uhu
0
230
AI開発ツールCreateがAnythingになったよ
tendasato
0
130
人工衛星のファームウェアをRustで書く理由
koba789
15
8k
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
173
14k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Building an army of robots
kneath
306
46k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
51
5.6k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Site-Speed That Sticks
csswizardry
10
820
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
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