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
Jetpack Composeから始める、頑張らないVRT
Search
Yasuhiro Shimizu
August 18, 2022
Programming
0
1.2k
Jetpack Composeから始める、頑張らないVRT
Yasuhiro Shimizu
August 18, 2022
Tweet
Share
More Decks by Yasuhiro Shimizu
See All by Yasuhiro Shimizu
Kotlin Multiplatform Projectを導入してみて
yshrsmz
1
1.1k
BIP39について
yshrsmz
0
180
Android Fireside Chatまとめ
yshrsmz
3
2.2k
RxJava1からRxJava2へ
yshrsmz
0
110
Other Decks in Programming
See All in Programming
ビルドプロセスをデバッグしよう!
yt8492
0
260
Blazing Fast UI Development with Compose Hot Reload (Bangladesh KUG, October 2025)
zsmb
2
470
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.7k
NIKKEI Tech Talk#38
cipepser
0
390
O Que É e Como Funciona o PHP-FPM?
marcelgsantos
0
250
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
120
MCPサーバー「モディフィウス」で変更容易性の向上をスケールする / modifius
minodriven
4
960
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
130
Designing Repeatable Edits: The Architecture of . in Vim
satorunooshie
0
240
AI 駆動開発におけるコミュニティと AWS CDK の価値
konokenj
5
330
自動テストのアーキテクチャとその理由ー大規模ゲーム開発の場合ー
segadevtech
1
610
SODA - FACT BOOK(JP)
sodainc
1
9.2k
Featured
See All Featured
Gamification - CAS2011
davidbonilla
81
5.5k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
Agile that works and the tools we love
rasmusluckow
331
21k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
GitHub's CSS Performance
jonrohan
1032
470k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
650
Navigating Team Friction
lara
190
15k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
A Tale of Four Properties
chriscoyier
161
23k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Transcript
Jetpack Composeから始 める、頑張らないVRT
自己紹介 清水泰博 Androidアプリ書いたりWebフロントエンド書いたり --- Twitter: @_yshrsmz GitHub: @yshrsmz その他: AndroidDagashiの運営とか
VRT?
VRTとは - Visual Regression Testing - 画像回帰テスト - 視覚的にリグレッションテストを行うこと -
変更前後のスクリーンショットを比較して、差分を検出する - ユニットテストでは担保しづらい、見た目をテストできる
VRTのつらいところ
VRTのつらいところ - テストケースのメンテ - 単純に書くものが増える - 実機/エミュレータを使う必要がある - 時間がかかる -
テストの実行結果が不安定 - CIで動かすにしても/SaaS 使うにしても手間がかかる - 💰💰💰 でも…
Jetpack Compose なら楽して VRT できる!
今日の内容を3行で
- airbnb/showkase で、`@Preview` Composable 関数を収集 - cashapp/paparazzi で、実機/エミュレータ不要でスクリーンショット を取得 -
reg-viz/reg-suit で、リッチなVRTレポートを作る
各ツールの紹介
airbnb/showkase - Jetpack Compose の `@Preview` からUIカタログを作るライブラリ - kapt/ksp で
`@Preview` 付き Composable の一覧を作り - その一覧を表示する Activity を提供する
cashapp/paparazzi - 安心の square 製 - 実機/エミュレータ無しで Android View や
Composable 関数を描画し、スクリーン ショットを取得できる - これ単体でも VRT を提供している
paparazzi 単体での VRT expected, actual, diff を含む画像を生成する
- showkase x paparazzi だけでも VRT はできる - しかし paparazzi
の VRT は非常にプリミティブで、レポートもない - もっとリッチに、かつ PR 上から確認できるようにしたい → reg-suit を使おう
reg-viz/reg-suit - Node.js 製の画像回帰テストツール - 画像の差分検知と、リッチなレポートサイトを提供する - GitHub 連携で簡単なレポートを表示できる -
アップロード先は S3 と GCS をサポート
None
reg-suit の比較元検出方法 - トピックブランチがマージ先から分岐したコミットに紐づくレポート
手順
https://github.com/android/nowinandroid/pull/101 “Add automatic preview screenshot testing with Paparazzi and Showkase”
showkase x paparazzi の設定はこのPRで詳しく見れます
テスト対象のモジュールに showkase を追加
テスト用モジュールの作成
src/test/kotlin/…/ScreenshotShowkaseModule showkase のエントリポイント
src/test/kotlin/…/PreviewScreenshotTests 今回のテストパラメータ - showkase の収集した Composable - テスト対象の端末 - テストしたい
Font Scale
テストの基本設定
パラメータの準備(1)
パラメータの準備(2)
テスト本体
$ ./gradlew :preview-screenshots:recordPaparazzi スクリーンショットの取得 $ ./gradlew :preview-screenshots:verifyPaparazzi 画像回帰テスト
reg-suit の設定 - Node.js が必要 - プラグインは reg-keygen-git-hash-plugin, reg-notify-github-plugin, reg-publish-s3-plugin
を選択 - 画像ディレクトリは preview-screenshots/src/test/snapshots/images を指定 - paparazzi の output ディレクトリ
AWS S3 の設定 - reg-suit のウィザードの中で作成できる - Google Cloud Storage
でも可 - Webページを公開できるように設定する
CIの設定(GitHub Actions)-1
CIの設定(GitHub Actions)-2
CIの設定(GitHub Actions)-3
CI の設定 - pull request と main ブランチへの push タイミングで実行する
- main への push タイミングは比較元のレポートを作成するため - 比較元のコミットを判別するため、git は完全なクローンが必要 - デフォルトでは depth=1 でクローンしている - detached HEAD ではなく、ブランチをチェックアウトしていること - AWS S3 へのアクセスは OIDC の設定が必要 - CodeBuild の設定するよりは遥かに楽だった (個人的感想です)
まとめ - airbnb/showkase で、`@Preview` Composable 関数を収集 - cashapp/paparazzi で、実機/エミュレータ不要でスクリーンショットを取得 -
reg-viz/reg-suit で、リッチなVRTレポートを作る
Thanks!