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
4年間のVRT運用、続ける理由とその方法
Search
Recruit
PRO
March 03, 2025
Technology
2
11
4年間のVRT運用、続ける理由とその方法
2025/2/20に開催したRecruit Tech Conference 2025の蝦名のLT資料です
Recruit
PRO
March 03, 2025
Tweet
Share
More Decks by Recruit
See All by Recruit
大規模プロダクトにおける フロントエンドモダナイズの取り組み紹介
recruitengineers
PRO
4
18
技術的ミスと深堀り
recruitengineers
PRO
3
19
『ホットペッパーグルメ』における マルチプラットフォーム化の歩み
recruitengineers
PRO
2
10
『じゃらんnet』アプリ 改善活動の軌跡
recruitengineers
PRO
2
7
『スタディサプリ for SCHOOL』における Flutter導入とその成果
recruitengineers
PRO
2
9
よりよいビジネスの「実現」のために エンジニアリングを発揮する
recruitengineers
PRO
3
20
イテレーティブな開発で 不確実性を乗り越える
recruitengineers
PRO
3
8
株式会社リクルート 社内ISUCONの裏側
recruitengineers
PRO
1
13
エンジニア主導の企画立案を可能にする組織とは?
recruitengineers
PRO
1
22
Other Decks in Technology
See All in Technology
AIエージェント時代のエンジニアになろう #jawsug #jawsdays2025 / 20250301 Agentic AI Engineering
yoshidashingo
8
3.6k
EDRの検知の仕組みと検知回避について
chayakonanaika
11
4.8k
あなたが人生で成功するための5つの普遍的法則 #jawsug #jawsdays2025 / 20250301 HEROZ
yoshidashingo
2
280
Goで作って学ぶWebSocket
ryuichi1208
3
2.7k
サイト信頼性エンジニアリングとAmazon Web Services / SRE and AWS
ymotongpoo
7
1.5k
Potential EM 制度を始めた理由、そして2年後にやめた理由 - EMConf JP 2025
hoyo
2
2.6k
役員・マネージャー・著者・エンジニアそれぞれの立場から見たAWS認定資格
nrinetcom
PRO
3
5.9k
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
170
1行のコードから社会課題の解決へ: EMの探究、事業・技術・組織を紡ぐ実践知 / EM Conf 2025
9ma3r
10
3.7k
日経のデータベース事業とElasticsearch
hinatades
PRO
0
230
【内製開発Summit 2025】イオンスマートテクノロジーの内製化組織の作り方/In-house-development-summit-AST
aeonpeople
2
610
クラウドサービス事業者におけるOSS
tagomoris
4
1k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
427
65k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Scaling GitHub
holman
459
140k
Code Review Best Practice
trishagee
67
18k
A Philosophy of Restraint
colly
203
16k
Documentation Writing (for coders)
carmenintech
67
4.6k
Faster Mobile Websites
deanohume
306
31k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Transcript
4年間のVRT運用、続ける理由とその方法 RECRUIT TECH CONFERENCE 2025 蝦名 一真 株式会社リクルート プロダクトディベロップメント室 マネジャー
蝦名 一真 (えびな かずま) アコースティックギター 経歴 / Career SIerでSE職を勤めたのち、2019年にリクルートに キャリア採用入社。
『スタディサプリENGLISH』のWebフロント開発担当。 2022年からマネジャー任用。 ビルド環境をwebpackからViteに移行したり、 GitHub Actionsによるデプロイフローを整えたり、 Frontend Opsも得意。 趣味 / Hobbies プロダクトディベロップメント室 まなび 社会人・語学プロダクト開発部 Englishフロントエンド開発グループ GitHub @kazuma1989
Agenda 1. Visual Regression Testing (VRT)を身近にしたい 2. 『スタディサプリENGLISH』のVRT事情 3. VRTの恩恵:
修正結果の検証が簡単になる 4. VRTの苦労: ”育てる”ことと”品質”の維持 5. VRTを”育てる” 6. VRTの”品質”を維持する 7. 4年間のVRT運用、続ける理由とその方法 8. (付録) 具体的なVRT構成 メリット訴求 導入判断、運用設計 の参考に まとめ
Visual Regression Testing (VRT)を身近にしたい Visual Regression Testing (VRT)とは? • スナップショットテストの1種で、コード改修前後のUIの視覚的変化を検知するテスト
• 改修による意図しないデザイン崩れ(visual regression)を早期発見できる CHANGED NEW DELETED が期待どおりか 調べる
Visual Regression Testing (VRT)を身近にしたい VRTはコストに比べて得られる安心感が高いので、おすすめ! 具体的な事例をお伝えして、みなさんのVRTに対する解像度を高めたい 図: 初めてのVRTに驚嘆する様子
『スタディサプリENGLISH』のVRT事情 『スタディサプリENGLISH』 英語のオンライン学習サービス (iOS/Android/Web対応) • AndroidとWebでVRTを導入 (詳細は付録ページで) • Visual Regression
Testing はじめました - 具体的な運用 Tips (Web導入時の紹介) から4年! 開発フロー 1. エディタやブラウザでプレビューしながらUIを実装し プルリクエストとしてレビューに提出 2. 10分〜20分ほど待つと、プレビューしていたものが VRTレポートとしてプルリクエストのコメントに届く 3. レビュアーはVRTレポートを参考にレビュー
VRTの恩恵: 修正結果の検証が簡単になる ∵ フロントエンドの修正結果 ≒ 見た目(UI)の変化 = VRTレポート • 全UIの全バリエーションを見直す手間を省いてくれる
◦ ブラウザ間の挙動 (とくにCSS) の違い、複数の画面サイズ ◦ 到達しづらいUIステート (日数が必要、クレジットカードが必要、など) • 致命的なランタイムエラーを見つけてくれる ◦ Botによるライブラリアップデートにとくに有効 修正内容の検証が簡単になると… • リファクタリングに対する心理的な障壁が下がる • ライブラリアップデートを滞らせない • ほかのチームにも修正してもらえる 積極的にコード改善に取り組める!
素敵なVRTライフを! …困りごとも当然あるでしょう?
VRTの苦労: ”育てる”ことと”品質”の維持 2500枚に”育てる”までの苦労と、2500枚の”品質”を維持する苦労 (VRTに限らず、自動テスト一般に当てはまる) • ”育てる” ◦ 撮影対象が十分な数あること • ”品質”
◦ Flaky tests (結果が”安定しない”テスト)が少なく、実行時間が短いこと ※ともかく始めることに については、ツール/ サービス/ブログが充実 しておりハードルは低め 1.撮影対象の実装 2.描画, 撮影 (保存) 3.差分レポート作成 図: VRT実行の3ステップ ↓”育てる”対象 ↓”品質”維持対象
VRTを”育てる”
VRTを”育てる” VRTを”育てる”公式: 手間 < インセンティブ 手間を減らす(≒ 1.を簡単にする) • コンポーネント設計を改善する(グローバルステートへの依存を減らすなど) •
ボイラープレートを減らす or コピー&ペースト実装を推奨する or 生成AI活用 インセンティブを増やす(≒ 1.を増やしたい状況をつくる) • VRTを使うのが速くて安心という意識の醸成 • 「コードの品質担保は”自分たち”の責務」という意識を持つ組織を見つける ◦ 『スタディサプリENGLISH』では、開発者=”自分たち”だった (幸運) ◦ 開発者以外が1.を推進するか、組織設計や契約設計を考えるか 1.撮影対象の実装 2.描画, 撮影 (保存) 3.差分レポート作成
VRTの”品質”を維持する
VRTの”品質”を維持する VRTを”育てる”公式: 手間 < インセンティブ Flaky tests (結果が”安定しない”テスト) を減らす •
CHANGED🟥対象が毎回変わる • 変えていないのにCHANGED🟥になる • 全部NEW⬜になる Flaky testsが多いと… • VRTへの信頼を損なう=インセンティブが減る • 撮影対象個別のflaky対策をすると、手間が増える VRTが”育たない” (∵公式) 定常的な CHANGED🟥の山 全部NEW⬜の 縦縞
VRTの”品質”を維持する ※「変えていないのにCHANGED🟥になる」の具体例
VRTの”品質”を維持する 1.よりもまず2.の描画と撮影で対策。本番との差異を許容するのも大事 描画環境(CIコンテナ)の準備 • 画像はコンテナローカルのダミーに差し替える • Webフォントはコンテナにインストール(フォントの中身が別でも名前を揃えればOK) 撮影の工夫 • アンチエイリアスやCSSアニメーションをオフにする
• リソース読み込みを待つ(実行時間とトレードオフ) • DOM要素や属性の変化を検知して撮影タイミングを図る • 複数回撮影し、画像のバイナリデータに変化がなくなるのを待つ 1.撮影対象の実装 2.描画, 撮影 (保存) 3.差分レポート作成
4年間のVRT運用、続ける理由とその方法 まとめ • 4年間続けたのは、苦労もあるが得るものが大きいから • 4年間続けるには、インセンティブ設計が最重要 素敵なVRTライフを!
(付録) 具体的なVRT構成 Android (Jetpack Compose) 1. エディタでのプレビュー用に `@Preview` アノテーションを付与して実装 (UIカタログはShowkaseが自動で収集して作ってくれる)
2. Paparazziで描画しスクリーンショットを撮影、Cloud Storage(GCS)に保存 3. reg-suitで差分レポートを作成、プルリクエストに添付 Web (React) 1. Storybook(UIカタログ共有)用に `*.stories.tsx` を実装 2. Playwrightで、Chromium/WebKitブラウザに描画させ、スクリーンショットを撮影、 Amazon S3に保存 3. reg-suitで差分レポートを作成、プルリクエストに添付 1.撮影対象の実装 2.描画, 撮影 (保存) 3.差分レポート作成
Showkase & Paparazzi (or Roborazzi)がおすすめ Roborazzi*, Paparazzi* reg-suit (w/ plugins)
reg-cli Roborazzi Paparazzi Showkase (付録) VRTツール/サービスの守備範囲(Android) 1.撮影対象の実装 2.描画, 撮影 (保存) 3.差分レポート作成 Roborazzi*, Paparazzi* … 差分レポート作成のタスクも持つ ※『スタディサプリENGLISH』ではShowkase, Paparazzi (撮影のみ), reg-suitを採用 ※『スタディサプリ小学・中学講座』ではShowkase, Roborazzi (撮影のみ), reg-suitを採用
1.は開発環境、2.&3.はPlaywright (visual comparisons)がもっとも手軽。 StorybookがすでにあるならChromaticもおすすめ SaaS (Chromatic, Lost Pixel) Playwright (visual
comparisons) reg-suit (w/ plugins) reg-cli Browsers* Storycap Storybook your dev server (付録) VRTツール/サービスの守備範囲(Web) 1.撮影対象の実装 2.描画, 撮影 (保存) 3.差分レポート作成 Browsers* … Puppeteer, Playwright, Selenium, etc. ※『スタディサプリ ENGLISH』ではStorybook, Playwright (撮影のみ), reg-suitを採用 (運用開始時点から変更)