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
reg-suit_CircleCIで_Visual_Regression_Test環境の構築.pdf
Search
toshiokun
May 20, 2021
Technology
2
640
reg-suit_CircleCIで_Visual_Regression_Test環境の構築.pdf
toshiokun
May 20, 2021
Tweet
Share
More Decks by toshiokun
See All by toshiokun
直感と論理をつなぐ_思考法.pdf
toshiokun
1
230
Other Decks in Technology
See All in Technology
How We Built a Secure Sandbox Platform for AI
flatt_security
1
110
雲勉LT_Amazon Bedrock AgentCoreを知りAIエージェントに入門しよう!
ymae
2
210
事業状況で変化する最適解。進化し続ける開発組織とアーキテクチャ
caddi_eng
1
7.1k
今すぐGoogle Antigravityを触りましょう
rfdnxbro
0
160
レガシーで硬直したテーブル設計から変更容易で柔軟なテーブル設計にする
red_frasco
4
580
ローカルVLM OCRモデル + Gemini 3.0 Proで日本語性能を試す
gotalab555
1
150
AI × クラウドで シイタケの収穫時期を判定してみた
lamaglama39
1
390
信頼性が求められる業務のAIAgentのアーキテクチャ設計の勘所と課題
miyatakoji
0
150
現地速報!Microsoft Ignite 2025 M365 Copilotアップデートレポート
kasada
2
1.7k
AI駆動開発を実現するためのアーキテクチャと取り組み
baseballyama
17
12k
個人から巡るAI疲れと組織としてできること - AI疲れをふっとばせ。エンジニアのAI疲れ治療法 ショートセッション -
kikuchikakeru
5
1.9k
TypeScript×CASLでつくるSaaSの認可 / Authz with CASL
saka2jp
2
130
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
11
940
How to Ace a Technical Interview
jacobian
280
24k
Typedesign – Prime Four
hannesfritz
42
2.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Embracing the Ebb and Flow
colly
88
4.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Agile that works and the tools we love
rasmusluckow
331
21k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Faster Mobile Websites
deanohume
310
31k
Writing Fast Ruby
sferik
630
62k
Transcript
reg-suit+CircleCIで Visual Regression Test環境の構築 谷口 俊博
フリーランス フロントエンドエンジニア React/NextJSが現在の主戦場 Rails/React Native/Swift/Ionic(AngularJS)など を経験してきました Twitter: @toshiokun0322 Zenn: https://zenn.dev/toshiokun
github: https://github.com/toshiokun 自己紹介 谷口 俊博
https://zenn.dev/toshiokun/articles/3d7087b84ba1d9 Zennに投稿したこちらの記事の内容 を話します
アジェンダ reg-suitという画像差分検出ツールがとてもよい フロントエンドのリグレッションテストは難しいよ Jestのsnapshotを導入した際の散々な結果 reg-suitとCircleCIでVRT環境を構築する スタリングのリグレッションをせねばと思ったある日のこと
ある日のこと
デザイナーから依頼されたレ イアウト修正の対応が終わっ たし、本番に反映するぞー
リリース前 カタカタターン!! ※画像はイメージです
リリース後 うげ!CSS当たってな いじゃん!! ※画像はイメージです
突然の スタイル崩壊!!
CSSの変更の影響範囲読めねー な、、、 フロントエンドでもリグレッションテスト 必要だな
しかし
フロントエンドの リグレッションテストは難 しいよ
なぜか?
①UIはアプリケーションの中で一番変更されやすい →リグレッションテスト自体のメンテナンスコストが高くつく ②HTMLやCSSの修正によるリグレッションは、ロジック面ではなくビジュアル面 でのリグレッションになる →最終的には人間の目による確認が必要になる なぜフロントエンドのリグレッションテス トは難しい?
UIは一番変更されやすい ソフトウェア設計の第一のルールは、その理由がテスト容易性 だろうと何だろうと、常に同じである。それは、変化しやすいも のに依存しないだ。GUIは変化しやすい。GUIを使用してシス テムを操作するテストスイートは脆弱である。したがって、GUI を使用しなくてもビジネスルールのテストができるように、シス テムとテストを設計しなければいけない。 Robert C.Martin,角 征典,高木
正弘. Clean Architecture 達人に学ぶソフトウェアの構造と設計 (Japanese Edition)
Jestのsnapshotを導入し た際の散々な結果
components ├── __tests__ │ ├── fuga.spec.tsx │ ├── hoge.spec.tsx │
└── piyo.spec.tsx ├── fuga.tsx ├── hoge.tsx └── piyo.tsx ディレクトリ構成
package.json
jestの設定
コンポーネント
Snapshotテストの設定
スナップショットの取得
スナップショットとの差分確認
。。。
アップデート実行
①JestのSnapshotはHTMLしか保存しないため、CSSによるスタイリングは保 存されない ②テスト失敗時の差分はほとんど`git diff`で確認している内容と同じようなもの しか確認できない ③結果、差分確認をしてそのままスナップショットをアップデートするだけで、「想 定しないコンポーネントのレイアウト崩れの検知」という目的が全く達成されない Jestのsnapshotを導入した際の散々 な結果
そんな中出会ったツール が
reg-suit https://github.com/reg- viz/reg-suit
正確に言うとreg-suitは画像の差分比較ができるツール ①指定のフォルダに配置されている画像ファイルをS3(またはGoogle Cloud Storage)に格納する ②PullRequestを作成すると、merge先のブランチの画像とmerge元のブランチ の画像の差分を比較することができる reg-suitの特徴
①画像差分を比較するレポートが視覚的にわかりやすい ②スクリーンショットを撮影するツールは何でもいい ③画像を上げる先はS3、Google Cloud Storageどちらも選択できる ④githubやslackに差分比較結果を通知するプラグインがある reg-suit採用のメリット
リグレッションテスト用のツールreg-suit (reg-suitの仕組み)
リグレッションテスト用のツールreg-suit (出力レポートイメージ)
リグレッションテスト用のツールreg-suit (出力レポートイメージ)
リグレッションテスト用のツールreg-suit (出力レポートイメージ)
リグレッションテスト用のツールreg-suit (出力レポートイメージ)
リグレッションテスト用のツールreg-suit (出力レポートイメージ)
リグレッションテスト用のツールreg-suit (出力レポートイメージ)
reg-suit+storycap+Circ leCIによるVRT環境構築
①アップロード先のS3の準備をする ②コンポーネントのスクリーンショットを取る ③reg-suitの初期設定をする ④CircleCI上で、スクリーンショットを取りreg-suitによるS3アップロード&画像 比較を実行できるようにする ⑤PRの作成 VRT環境構築の大まかな手順
パブリックアクセスの設定に気をつける ①アップロード先のS3の準備をする
該当のS3バケットにアクセスできるユーザーを作成する ①アップロード先のS3の準備をする
今回はStorybookで定義したコンポーネントを撮影するstorycapというツールを 使用 (※reg-suitと同じ開発者によるライブラリ) https://github.com/reg-viz/storycap ②コンポーネントのスクリーショットを撮る
storycapとpuppeteerのインストール > yarn add storycap puppeteer ※puppeteerをインストールするのは、puppeteerを使用してスクリーンショットを撮影するため ②コンポーネントのスクリーショットを撮る
package.json "scripts": { "storybook": "start-storybook -p 6006 -c .storybook", "screenshot":
"storycap -C puppeteer --serverCmd \"start-storybook -p 6006\" http://localhost:6006 --serverTimeout 60000", }, ②コンポーネントのスクリーショットを撮る
storybookの設定 ②コンポーネントのスクリーショットを撮る
storybookの設定 ②コンポーネントのスクリーショットを撮る
storybookの設定 ②コンポーネントのスクリーショットを撮る
yarn screenshotを叩いた結果 ※Storybookで定義したコンポーネントが画像として__screenshots__配下に出力される ②コンポーネントのスクリーショットを撮る
> yarn add reg-suit > yarn reg-suit init --use-yarn #
--use-yarnはpluginをインストールする際にyarnの使用を指定するオプショ ン …(pluginや設定の選択が表示されるが省略) ③reg-suitの初期設定を行う
reg-suitのインストールと初期設定 > yarn add reg-suit > yarn reg-suit init --use-yarn
# --use-yarnはpluginをインストールする際にyarnの使用を指定するオプショ ン …(pluginや設定の選択が表示されるが省略) ③reg-suitの初期設定を行う
package.jsonのscriptsの定義 "scripts": { "regression": "reg-suit run", }, ③reg-suitの初期設定を行う
④CircleCI上で、スクリーンショットを取りreg-suitによるS3アップロード&画像比較を実 行できるようにする .circleci/config.ymlにyarn screenshotとyarn regressionを実行するjobを定 義する
④CircleCI上で、スクリーンショットを取りreg-suitによるS3アップロード&画像比較を実 行できるようにする S3にアクセスできるようにするために、環境変数設定を忘れない
スタイルの修正をしてPRを作成 ⑤PRの作成
CircleCIのジョブが完了すると下記のようなコメントが自動で投稿される ⑤PRの作成
reg-suitのメリット/デメリット 【メリット】 ビジュアルの差分を画像ベースで検出するリグレッションテストのため、スタイリ ングの実装方法を変えた場合はテストが通る ex) CSS modules -> CSS in
JS(styled-components)への変更など 【デメリット】 パブリックアクセスができるS3に画像を公開するためセキュリティリスクがある