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
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
小売アプリのためのアクセシビリティ / Accessibility for Retail Apps
CyberAgent
PRO
November 21, 2023
More Decks by CyberAgent
See All by CyberAgent
”AIを使う” から ”AIに任せる” へ ─ 開発プロセスを再設計してAIを組織標準にするまで
cyberagentdevelopers
PRO
2
320
Databricks 導入から Genie 活用まで、全部やった話
cyberagentdevelopers
PRO
0
1.6k
専任DEゼロからの データ基盤構築 - Databricks x IaC x AIで 進める「データの民主化」-
cyberagentdevelopers
PRO
1
1.1k
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
10
9.7k
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
1
430
Local LLM Meetup #1 Opening
cyberagentdevelopers
PRO
1
500
LocalLLMで機密データを匿名化したい
cyberagentdevelopers
PRO
2
550
Vibe Fine-Tuning Version 2 — RunPod SSH で安く学習してみた
cyberagentdevelopers
PRO
1
510
2026年度新卒技術研修 サイバーエージェントのデータベース 活用事例とパフォーマンス調査入門
cyberagentdevelopers
PRO
11
13k
Other Decks in Technology
See All in Technology
DINO-EdgeQuery:Edge-First Polygon Decoding for Building Footprint Extraction from Satellite Imagery
lehupa
0
140
Benchmarking Vector Databases: pgvector vs. LanceDB
tsho
0
130
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
6
6.7k
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
430
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
3
760
魔法少女がClaude Codeを監視する / ccportal-deck
noriyukitakei
3
130
2026-09-04 SRE Tech Talk #15 怠惰なTerraform / Lazy Terraform
masasuzu
0
170
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
610
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
0
940
JAWS-UG初心者支部#88わいわい初心塾(夏休みの宿題やったかGit編)
otsuki
0
120
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
280
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
3
2k
Featured
See All Featured
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
430
Faster Mobile Websites
deanohume
310
32k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Bash Introduction
62gerente
615
220k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Making Projects Easy
brettharned
120
6.7k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
690
Rails Girls Zürich Keynote
gr2m
96
14k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
520
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