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
How To Improve UI Quality And Performance
Search
CyberAgent
PRO
November 21, 2023
Technology
0
62
How To Improve UI Quality And Performance
CyberAgent
PRO
November 21, 2023
Tweet
Share
More Decks by CyberAgent
See All by CyberAgent
KDD2024参加報告
cyberagentdevelopers
PRO
1
300
FastlyとfalcoでNode.jsレスなWebサーバーの構築: IPTV版ABEMAアプリのインフラ刷新
cyberagentdevelopers
PRO
1
60
Amebaチョイス立ち上げの裏側 ~ 依存システムとの闘い ~
cyberagentdevelopers
PRO
1
81
マイグレーションコード自作して File-Based Routing に自動移行!! ~250 ページの歴史的経緯を添えて~
cyberagentdevelopers
PRO
2
34
コードメトリクス計測による課題可視化と品質確保
cyberagentdevelopers
PRO
1
55
サイバーエージェントにおけるインナーソーシングの取り組み
cyberagentdevelopers
PRO
3
1.5k
ABEMAにおけるLLMを用いたコンテンツベース推薦システム導入と効果検証
cyberagentdevelopers
PRO
6
3.1k
クリエイティブ制作領域の データ活用を0から推進した話
cyberagentdevelopers
PRO
3
910
opt-in camera:カメラによる行動計測におけるオプトインの仕組みの実現
cyberagentdevelopers
PRO
3
880
Other Decks in Technology
See All in Technology
【shownet.conf_】革新と伝統を融合したファシリティ
shownet
PRO
0
310
普通の Web エンジニアのための様相論理入門 #yapcjapan / YAPC Hakodate 2024
ytaka23
5
1.3k
LeSSはスクラムではない!?LeSSにおけるスクラムマスターの振る舞い方とは / Scrum Master Behavior in LeSS
toma_sm
0
170
Azure App Service on Linux の Sidecar に Phi-3 を配置してインテリジェントなアプリケーションを作ってみよう/jazug-anniv14
thara0402
0
360
【shownet.conf_】AI技術とUX監視の応用でShowNetの基盤を支えるモニタリングシステム
shownet
PRO
0
350
How CERN serves 1EB of data via FUSE
ennael
PRO
0
16k
エムスリー全チーム紹介資料 / Introduction of M3 All Teams
m3_engineering
1
280
スモールスタート、不都合な真実 〜 耳当たりの良い言葉に現場が振り回されないために/20240930-ssmjp-small-start
opelab
13
1.8k
【shownet.conf_】放送局とShowNetが共創する、未来の放送システム ~Media over IP 特別企画の裏側~
shownet
PRO
0
330
LINEヤフー新卒採用 コーディングテスト解説 実装問題編
lycorp_recruit_jp
1
12k
Oracle Database 23ai 新機能#4 Real Application Clusters
oracle4engineer
PRO
0
150
分析者起点の企画を成功させた連携面の工夫
lycorptech_jp
PRO
1
250
Featured
See All Featured
Bash Introduction
62gerente
608
210k
Learning to Love Humans: Emotional Interface Design
aarron
272
40k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
37
1.7k
Typedesign – Prime Four
hannesfritz
39
2.3k
Thoughts on Productivity
jonyablonski
67
4.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.8k
How To Stay Up To Date on Web Technology
chriscoyier
787
250k
RailsConf 2023
tenderlove
28
840
From Idea to $5000 a Month in 5 Months
shpigford
380
46k
Into the Great Unknown - MozCon
thekraken
30
1.4k
Building an army of robots
kneath
302
42k
How to train your dragon (web standard)
notwaldorf
87
5.6k
Transcript
How To Improve UI Quality And Performance CA.flutter 11/14 naruogram
自己紹介 名前: なるお(naruogram) 技術: Flutter, Swift X: @naruogram 所属: Amebaマンガ
経歴: CA24卒内定者
目次 - 第一章: Visual Regression Test 導入へ - 第二章: VRT運用について考える
- 第三章: integration testでパフォーマンス計測
UIの品質とは
UIの品質とは そのサービスがユーザーにとってどれだけ使いやすく、 理解しやすく、効率的であるか (ChatGPT調べ)
UIの品質チェックリスト(自分調べ) - 異なるデバイスでもUIが崩れないか - 異なる状況においてUIが崩れないか - 異なる状況において操作を阻害しないか - 端末の文字サイズによってUIが崩れないか -
エラーハンドリングができているか - アクセシビリティ準拠されているか - その他諸々
手動で確認するのは時間がかかりすぎて辛い😡
テストを使って自動化しよう🥺
第一章: Visual Regression Test 導入へ
第一章: Visual Regression Test 導入へ VRT(Visual Regression Test)とは UIの変更を自動的に検出するテスト手法の一つです。 これにより、新
しいコードの導入や変更がグラフィカルユーザーインターフェースに与 える影響を迅速にキャッチすることができます。 つまりUIの見た目やUIの差分変更を可視化することができる🔥
第一章: Visual Regression Test 導入へ 使用技術 flutter Package: playbook-ui Test
Tool: reg-suit CI: GitHub Actions(linux) Storage: Google Cloud Storage(AWS等でも可)
第一章: Visual Regression Test 導入へ 導入手順 1. playbookを使ってstoryを書く(各ページ等) 2. widgetTestを書く
3. GitHubへPushしてCIを回す 4. reg-suitにて差分比較ができる
第一章: Visual Regression Test 導入へ 1. playbookを使ってstoryを書く(各ページ等)
第一章: Visual Regression Test 導入へ 2. WidgetTestを書く ※ここで端末などを指定できる
第一章: Visual Regression Test 導入へ 3. GitHubActionsでCIを回す ビルドできる状態でreg-suitを走らせる
第一章: Visual Regression Test 導入へ 4. 差分検証 PRにVRTの結果が送られる
第一章: Visual Regression Test 導入へ 4. 差分検証 意図しない変更やUI崩れを確認できる 崩れていた場合は修正できるので 品質を保つ運用ができる
第一章: まとめ - 導入自体はコストが低い - 新規アプリの場合は、最初から導入していると運用が楽 - 既存プロダクトの場合は、重要な部分のみ導入でも効果あり
第二章: VRT運用について考える
UIの品質チェックリスト - 異なるデバイスでもUIが崩れないか - 異なる状況においてUIが崩れないか - 異なる状況において操作を阻害しないか - 端末の文字サイズによってUIが崩れないか -
エラーハンドリングができているか - アクセシビリティ準拠されているか
UIの品質チェックリスト - 異なるデバイスでもUIが崩れないか - 異なる状況においてUIが崩れないか - 異なる状況において操作を阻害しないか - 端末の文字サイズによってUIが崩れないか -
エラーハンドリングができているか - アクセシビリティ準拠されているか VRTで網羅できる部分を考える
UIの品質チェックリスト - 異なるデバイスでもUIが崩れないか - 異なる状況においてUIが崩れないか(一部) - 異なる状況において操作を阻害しないか - 端末の文字サイズによってUIが崩れないか -
エラーハンドリングができているか(一部) - アクセシビリティ準拠されているか(一部)
2-1: 異なるデバイスでもUIが崩れないか
1. 異なるデバイスでもUIが崩れないか Case1: 例えばiOS14以上に対応するアプリを作ったとする iOS14はiPhoneSE(第2世代)がサポートしている。 その場合、サイズの小さい iPhoneSEのサイズにも対応する必要があ る。
1. 異なるデバイスでもUIが崩れないか Case1: 例えばiOS14まで対応するアプリを作ったとする。 iPhone11 iPhoneSE(第二世代)
1. 異なるデバイスでもUIが崩れないか 問題: デバイスによるUI崩れが発生する 解決策: VRTテストにおいてテストする端末を増やす iOS iPhoneSE iPhone11 iPadProMini6
iPadPro6 Android pixel4 lavieT8 xperiaZTablet チームでは下記の端末に対応
1. 異なるデバイスでもUIが崩れないか 選定理由 各OSでの、通常サイズ、タブレットサイズにて 一番大きい端末、小さい端末を採用する 画面サイズの差で起きるUI差分を極限まで減らす
1. 異なるデバイスでもUIが崩れないか 活用事例 - iPhoneSEなどの小さい端末でのUI崩れの発見 - タブレットサイズに対してのUI崩れの発見
2-2: 異なる状況でもUIが崩れないか
2. 異なる状況でもUIが崩れないか Case1: 文字が長いケース Case2: 正しく画像等を取得できなかった場合(通信状況が悪い) UIの状況は、一画面に対しても様々である。
2. 異なる状況でもUIが崩れないか 問題 - 長い文字列や画像のPathがない場合にUIが崩れる 解決策 - 長い文字列のStoryを用意する - 画像がないケースのStoryを用意する
2. 異なる状況でもUIが崩れないか 運用方法 - UIへのチェック項目をルール化する - 複数のシナリオを用意する 効果 - UI崩れの早期発見になる
- UI修正タスクが減少する
2. 異なる状況でもUIが崩れないか 運用方法 - UIへのチェック項目をルール化する - 複数のシナリオを用意する 効果 - UI崩れの早期発見になる
- UI修正タスクが減少する 引数を渡さないと検証できないの?
2. 異なる状況でもUIが崩れないか Fakeを使ってデータを差し替える 1. FakeXXXを用意 2. VRT時にProviderをoverride ※ VRT時は通信処理は使えない
2. 異なる状況でもUIが崩れないか Case3: リファクタリング等で現状のUIを崩していないか否か 機能追加やリファクタリングがUI崩れに繋がる時もあります。 Component等は特に気をつけるべき🚨
2. 異なる状況でもUIが崩れないか 問題 ・リファクタリングなどの変更による デグレの発生 解決策 ・reg-suitを使い、不要な差分を早期発見👀
2. 異なる状況でもUIが崩れないか 活用例 1. リファクタリングをした場合に差分がないか 2. デザイン修正した場合に、不要な差分がないかを確認できる 3. タップ領域のみを拡大した場合に差分がないか (a11y対応)
2-3: 端末の文字サイズによってUIが崩れないか
3. 端末の文字サイズによってUIが崩れないか Case1: 端末の文字サイズを1.5倍や2倍にしている場合 ユーザーは各OSにおいて文字サイズを設定することができる。 その文字サイズはアプリを制御していない場合を除き、適用する。
3. 端末の文字サイズによってUIが崩れないか iOSでの文字サイズの標準と最大の違い
3. 端末の文字サイズによってUIが崩れないか iOSでの文字サイズの標準と最大の違い 文字サイズの変更に対応しなければUIが崩れる
3. 端末の文字サイズによってUIが崩れないか iOSでの文字サイズの標準と最大の違い 文字サイズの変更に対応しなければUIが崩れる 文字サイズに対応することはAccessibility的にも大切
3. 端末の文字サイズによってUIが崩れないか Flutter Accessibility Large Fonts Render text widgets with
user-specified font sizes (引用: flutter.dev) FlutterのAccessibility的にも推奨されている👀
3. 端末の文字サイズによってUIが崩れないか Flutter Accessibility Large Fonts Render text widgets with
user-specified font sizes (引用: flutter.dev) FlutterのAccessibility的にも推奨されている👀 どう対応するのか?
3. 端末の文字サイズによってUIが崩れないか 端末の文字サイズを検知する The number of font pixels for each
logical pixel. For example, if the text scale factor is 1.5, text will be 50% larger than the specified font size. (引用: flutter.dev)
3. 端末の文字サイズによってUIが崩れないか 問題 文字サイズによるUI崩れが発生 解決策 TextScaleFactorの値を設定し、 複数パターンの文字サイズをテストする。
3. 端末の文字サイズによってUIが崩れないか 実際のVRTを実行した結果 1倍 1.5倍
3. 端末の文字サイズによってUIが崩れないか 活用事例 チームでは文字サイズを1倍と1.5倍を使い、テストをしている。 早期発見できた問題 1. サイズを固定にしているWidgetでのUI崩れ(AppBarなど) 2. VRTは成功しているが、文字サイズが大きく、見切れているケース
3. 端末の文字サイズによってUIが崩れないか 引用: https://developers.cyberagent.co.jp/blog/archives/36310/ 詳しくは CyberAgent Developer Blogへ
第二章: まとめ - 効果を大きくするためには、テストする項目を決めるのが大事 - アプリのケースによって、何をテストするかを決めよう - VRTを駆使すれば、作業時間の減少することができる
第三章: flutter integration testで計測する
第三章: integration testで計測 flutter integration testとは Flutterアプリケーションの特定の部分または全体をテストするための方法 です。Integration Testは、アプリケーションの異なる部分が連携して正しく 機能することを確認します。(統合テスト)
※統合テストとは 個々のモジュールやコンポーネントが正しく連携して動作するかを確 認するテスト
第三章: integration testで計測 flutter_integration_testは計測できる👀 特定のタスクの実行中にパフォーマンスタイムラインを記録 し、結果の概要をローカルファイルに保存するテストを作成す る方法。 引用: flutter.dev
第三章: integration testで計測 flutter_integration_testは計測できる👀 特定のタスクの実行中にパフォーマンスタイムラインを記録 し、結果の概要をローカルファイルに保存するテストを作成す る方法。 引用: flutter.dev integration
testを導入してみよう
第三章: integration testで計測 - 従来のintegration testを記述する。 今回のテストではListViewをスクロールし て、一番最後の要素を見つけたら成功とい う処理を書いている。
integration testを使ってパフォーマンス計測してみよう
第三章: integration testで計測 計測するためには 1. traceActionを使用する 2. reportKeyを設定する 引用: flutter.dev
第三章: integration testで計測 計測するためには 3. test_driverフォルダの中に perf_driver.dartを作成する。 4.
テストを実行し、計測結果のjsonが 生成される 引用: flutter.dev
第三章: integration testで計測 生成されたJson - 平均フレームビルド時間 - 最長フレームビルド時間 - 平均フレーム描画時間
- 最長フレーム描画時間 - 平均CPU使用率 - 平均メモリ使用率 これ以外のメトリクスを取得可能
第三章: integration testで計測 - 平均フレームビルド時間: 16ms未満だと60fpsで描画される - 平均CPU使用率: アプリ全体に対して、特定のアクションが異常値の場合、改善の余地あり -
平均メモリ使用率: アプリ全体に対して、特定のアクションが異常値の場合、改善の余地あり (特に対応している最低のスペック端末での検証だと効果が見えやすい)
Tips: 複数のテストを同時に計測する
第三章: integration testで計測 問題 現状だと値が渡せないので、特定のテスト しか、実行できず、都度書き換える必要が ある。
第三章: integration testで計測 解決策(手順1) integrationTestで複数のケースを一度のアクションで実行するには、 all_test.dart(ファイル名は問わない)というファイルを用意し、それぞれのテストを 呼び出す必要がある。
第三章: integration testで計測 解決策(手順2) 1. integration testのシナリオを置い ているフォルダに対して、テスト名 を取得する。 2.
取得したテスト名一覧を使用し、パ フォーマンスの計測結果を複数作成す る。
現実的に活用できる体制を考える
第三章: integration testで計測 効果が期待できる使用方法 1. 現在のアプリのパフォーマンスを確認する。 2. パフォーマンスが落ちている原因を探す。 3. パフォーマンス改善タスクの際に、ローカルで都度テストをして、計測する。
4. 定期的にintegration testのCIを回し、パフォーマンスの著しい低下を防ぐ。
第三章: integration testで計測 効果が期待できない使用方法 1. PR時にPushごとにintegration_testのCIを回す。 - CIのコストが高いため、コストに対しての効果が期待できない。 2. パフォーマンスが求められないアプリでの実行
- 基本的に複雑なアプリではない限り、気にしなくても快適に使用できる。
第三章: まとめ - integration testの導入はコストが高いので必要なケースから対応する - チームの状況によって活用方法は考えるべき
最後に
まとめ - テストは各チームによって必要なものが変わるので、導入は慎重に - VRTは導入コストが低い - integration testは導入コストが高いため検討が必要
ご清聴ありがとうございました🙇