Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
93
小売アプリのためのアクセシビリティ / Accessibility for Retail Apps
CyberAgent
PRO
November 21, 2023
Tweet
Share
More Decks by CyberAgent
See All by CyberAgent
IBC 2025 動画技術関連レポート / IBC 2025 Report
cyberagentdevelopers
PRO
2
380
2025年度 生成AI 実践編
cyberagentdevelopers
PRO
6
560
LLMを用いたメタデータベースレコメンド検証
cyberagentdevelopers
PRO
6
2.1k
CodeAgentとMCPで実現するデータ分析エージェント
cyberagentdevelopers
PRO
1
480
SQL Agentによるタップルのデータ利活用促進
cyberagentdevelopers
PRO
3
1.3k
NAB Show 2025 動画技術関連レポート / NAB Show 2025 Report
cyberagentdevelopers
PRO
1
540
【2025年度新卒技術研修】100分で学ぶ サイバーエージェントのデータベース 活用事例とMySQLパフォーマンス調査
cyberagentdevelopers
PRO
8
12k
【CA.ai #1】未来を切り拓くAIエージェントの可能性
cyberagentdevelopers
PRO
4
390
【CA.ai #1】MCP世界への招待:AIエンジニアが創る次世代エージェント連携の世界
cyberagentdevelopers
PRO
2
330
Other Decks in Technology
See All in Technology
AWS Bedrock AgentCoreで作る 1on1支援AIエージェント 〜Memory × Evaluationsによる実践開発〜
yusukeshimizu
6
360
世界最速級 memcached 互換サーバー作った
yasukata
0
320
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
0
680
AI活用によるPRレビュー改善の歩み ― 社内全体に広がる学びと実践
lycorptech_jp
PRO
1
180
Sansanが実践する Platform EngineeringとSREの協創
sansantech
PRO
2
580
SSO方式とJumpアカウント方式の比較と設計方針
yuobayashi
7
280
形式手法特論:CEGAR を用いたモデル検査の状態空間削減 #kernelvm / Kernel VM Study Hokuriku Part 8
ytaka23
2
440
バグハンター視点によるサプライチェーンの脆弱性
scgajge12
3
970
Karate+Database RiderによるAPI自動テスト導入工数をCline+GitLab MCPを使って2割削減を目指す! / 20251206 Kazuki Takahashi
shift_evolve
PRO
1
460
第4回 「メタデータ通り」 リアル開催
datayokocho
0
110
eBPFとwaruiBPF
sat
PRO
4
2.5k
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
120
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
186
22k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
We Have a Design System, Now What?
morganepeng
54
7.9k
Site-Speed That Sticks
csswizardry
13
990
For a Future-Friendly Web
brad_frost
180
10k
GitHub's CSS Performance
jonrohan
1032
470k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Faster Mobile Websites
deanohume
310
31k
The World Runs on Bad Software
bkeepers
PRO
72
12k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
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