Skip to content
Latchkey

ビジュアルリグレッションテストとは? 意図しないUI変更の検出

ビジュアルリグレッションテストは、UIのスクリーンショットを撮影し、承認済みのベースラインとピクセル単位で比較して、予期しない視覚的変更を検出します。

機能テストは動作を確認しますが、視覚的な崩れは見逃します。ボタンがずれていたり色が間違っていたりしても、クリックテストは通ってしまうのです。ビジュアルリグレッションテストは、UIをレンダリングし、スクリーンショットを撮り、それをベースライン画像とdiffします。どんな差異もレビュー用に提示されます。スクリーンショットは環境に敏感なため、これらを安定して実行することは、主にCIの一貫性の問題です。

仕組み

テストはコンポーネントやページをレンダリングし、スクリーンショットを撮り、保存されたベースラインと比較します。ピクセルが閾値を超えて異なる場合、テストは失敗し、diffを表示するので、人間が変更を承認または却下できます。

ベースラインと承認

ベースラインは、合意された正しい見た目です。変更が意図的な場合はベースラインを更新し、そうでない場合はコードを修正します。ベースラインの管理はビジュアルテストの中核のworkflowです。

不安定さ(flakiness)という課題

  • フォントのレンダリングはOSごとに異なります。
  • アニメーションやタイミングが不安定なキャプチャを引き起こします。
  • 日付のような動的データが画像を変化させます。

Storybookとの組み合わせ

storyは決定的なコンポーネントの状態であり、ビジュアルテストの入力として理想的です。多くのチームはすべてのstoryをスナップショットして、各コンポーネントの状態に保護されたベースラインを持たせています。

CI/CDにおけるビジュアルリグレッションテスト

これらのテストはpipelineでビルド済みのアプリやStorybookに対して実行されるため、一貫性がすべてです。ローカルとCIでフォントや画面サイズが異なると、誤ったdiffが生じます。安定した同一のrunnerでキャプチャを実行することで、ベースラインの信頼性が保たれます。マネージドrunner(Latchkeyなど)はその一貫した環境を提供し、スクリーンショットのdiffがrunnerのノイズではなく実際の変更を反映するようにします。

重要なポイント

  • ビジュアルリグレッションテストは、UIのスクリーンショットを承認済みのベースラインとdiffします。
  • ベースラインの管理が中核のworkflowです。意図的な変更はベースラインを更新します。
  • レンダリングの違いによる誤ったdiffを避けるには、一貫したCI runnerが不可欠です。

関連ガイド