Storybookを利用したビジュアルリグレッションテスト
最終更新
ビジュアルリグレッションテスト(以下、VRT)は、画像回帰テストとも呼ばれます。
VRTは、改修による予期せぬ UI のデザイン崩れを検出することを目的としています。 UIのスクリーンショットを撮り、それらをコミット間で比較して、変更を特定します。
当社のReactを利用したプロジェクトではデザインシステムの構築にStorybookを利用しています。 細かい運用はこの記事では割愛しますが、見た目上のバリエーションが存在するコンポーネントについては、1つのコンポーネントにつき下記の2画面を用意するようにしています。
Basic: StorybookのControlsアドオンを利用して動作確認できる
All: バリエーションが一覧できる
reg-keygen-git-hash-plugin: 比較すべきコミットを特定します。
reg-notify-github-plugin: GitHubのPRにレポートを通知します。
reg-publish-s3-plugin: 差分レポートをS3にアップロードします
これらのツールを組み合わせることで、Pull Requestにテスト結果の通知が届くようになります。 通知内のリンクから、さらに詳細なレポートを確認することもできます。
yarnやnpmを利用して、パッケージのインストールをおこなってください。 npm-scriptsにも、CIで動かすためのタスクを追加します。
GitHub Actions で正常に動かなったため、タスクを「Storybookのビルド(ci:storybook-generate)」と「スクリーンショットの撮影(ci:storycap)」に分割しています。
CIツールによっては、タスク分割せずに実行が可能かもしれません。
reg-suitの設定ファイルです。
のコマンドでひな形を生成することができます。
ワークフローをトリガーするGitHubイベントは、pull_requestではなく、pushである必要があります。
ubuntu-latestのイメージには、日本語が含まれていないため、日本語フォントインストールのジョブを入れています。Storybook上で日本語を利用していない場合は不要です。
これらのID/KEYは、GitHubのsecretに登録する必要があります。 以上でVRTのために必要な設定は完了です。
上記の設定だけでもVRTとして正しく機能しますが、プレセナでは画面幅に応じた見た目の変化など細かくUIを確認できるようにしています。
上記のような記述を追加することで、画像幅の異なるスクリーンショットを撮ることが可能になります。これによって、網羅性の高いテストを目指すことが可能です。
が存在しますが、プレセナでは下記のツールを利用しています。 以下、VRTを導入していく手順を紹介します。
: Storybookをクロールし、スクリーンショット画像を取得します。
: 画像の差分をレポートとして出力してくれます。
storycapの公式が推奨するコマンドは下記のため、 ( )
REG_NOTICE_CLIENT_IDは、を参考に、 GitHubにreg-suitアプリを追加して取得してください。
AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYは、regconfig.jsonに記載したbucketにアクセスできるものをIAMなどで作成してください。 ポリシーなどの詳細は、を参考にしてください。 S3の細かい設定はこの記事では割愛します。
本サイトの更新情報は、Twitterので発信しています。ご確認ください。