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
670
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
reg-suit_CircleCIで_Visual_Regression_Test環境の構築.pdf
toshiokun
May 20, 2021
More Decks by toshiokun
See All by toshiokun
直感と論理をつなぐ_思考法.pdf
toshiokun
1
290
Other Decks in Technology
See All in Technology
データエンジニアリングとドメイン駆動設計
masuda220
PRO
14
2.5k
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
170
Aurora MySQL 8.4リリース! Rubyistが備えること / what-rubyist-should-prepare-for-aurora-mysql-8-4
fkmy
0
780
Jitera Company Deck
jitera
0
280
変更し続けられるシステムをどう保つか — AI時代のSSoTという設計原則
kawauso
1
1.1k
AI_Dev_Day_製造業領域でのAI活用から見た活用の罠と成功に導く実践知.pdf
kintotechdev
0
170
AI Native なプロダクト組織の立ち上げ方 : 生産性 100 倍への挑戦
mikesorae
0
1.3k
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
410
事業成長とAI活用を止めないデータ基盤アーキテクチャの設計思想
hiracky16
0
540
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
160
_NIKKEI_Tech_Talk__勉強会は熱量では続かない___17回続いた輪読会の設計術.pdf
_awache
2
110
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
370
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Measuring & Analyzing Core Web Vitals
bluesmoon
9
900
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
510
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
350
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
250
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Navigating Weather and Climate Data
rabernat
0
400
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
エンジニアに許された特別な時間の終わり
watany
108
250k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
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に画像を公開するためセキュリティリスクがある