visual-regression-testing について
フロントエンド開発者やテスター向けのビジュアル回帰テストガイドです。UI のスクリーンショットをバージョン間で比較し、意図しない変化を検出します。
主な機能
- 01スクリーンショットと基準画像の比較
- 02複数ビューポートでのレスポンシブ検証
- 03ブラウザー間テスト
- 04動的コンテンツへの対応
- 05コンポーネントの操作状態テスト
活用シーン
- 01CSS の回帰バグ検出
- 02PR のビジュアル変更レビュー
- 03デザインシステムのコンポーネント検証
- 04レイアウトのずれや重なりの発見
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ aj-geddes/ useful-ai-prompts --skill visual-regression-testingインストール後、Claude Code で/visual-regression-testingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/backstopjs-configuration.mdchromatic-for-storybook.mdcypress-visual-testing.mdhandling-dynamic-content.mdpercy-visual-testing.mdplaywright-visual-testing.mdtesting-responsive-components.mdtemplates/component-template.tsx詳細
ビジュアル回帰テスト
目次
概要
ビジュアル回帰テストでは、UI コンポーネントやページのスクリーンショットを撮影し、バージョン間で比較して意図しない視覚的な変更を検出します。この自動化された方法により、従来の機能テストでは見逃される CSS のバグ、レイアウトの問題、デザインのリグレッションを検出できます。
使用するタイミング
- CSS のリグレッションバグを検出する
- ビューポートごとにレスポンシブデザインを検証する
- 異なるブラウザーでテストする
- コンポーネントの視覚的な一貫性を確認する
- レイアウトのずれや重なりを検出する
- テーマの変更をテストする
- デザインシステムのコンポーネントを検証する
- PR の視覚的な変更をレビューする
クイックスタート
最小限の実行例:
// tests/visual/homepage.spec.ts
import { test, expect } from "@playwright/test";
test.describe("Homepage Visual Tests", () => {
test("homepage matches baseline", async ({ page }) => {
await page.goto("/");
// Wait for images to load
await page.waitForLoadState("networkidle");
// Full page screenshot
await expect(page).toHaveScreenshot("homepage-full.png", {
fullPage: true,
maxDiffPixels: 100, // Allow small differences
});
});
test("responsive design - mobile", async ({ page }) => {
await page.setViewportSize({ width: 375, height: 667 }); // iPhone SE
await page.goto("/");
await expect(page).toHaveScreenshot("homepage-mobile.png");
});
test("responsive design - tablet", async ({ page }) => {
// ... (see reference guides for full implementation)
リファレンスガイド
references/ ディレクトリにある詳細な実装ガイド:
| ガイド | 内容 |
|---|---|
| Playwright Visual Testing | Playwright によるビジュアルテスト |
| Percy Visual Testing | Percy によるビジュアルテスト |
| Chromatic for Storybook | Storybook 向け Chromatic |
| Cypress Visual Testing | Cypress によるビジュアルテスト |
| BackstopJS Configuration | BackstopJS の設定 |
| Handling Dynamic Content | 動的コンテンツの処理 |
| Testing Responsive Components | レスポンシブコンポーネントのテスト |
ベストプラクティス
✅ 推奨事項
- 動的コンテンツ(タイムスタンプ、広告)を非表示にするか、モックに置き換えます
- 複数のビューポートでテストします
- アニメーションや画像の読み込みを待ちます
- 一貫したビューポートサイズを使用します
- キャプチャ中はアニメーションを無効にします
- インタラクティブな状態(ホバー、フォーカス)をテストします
- 承認前に差分を注意深く確認します
- ベースラインをバージョン管理に保存します
❌ 避けること
- 常にコンテンツが変化するページをテストしないでください
- 小さくても妥当な差異を無視しないでください
- レスポンシブテストを省略しないでください
- デザイン変更後にベースラインを更新し忘れないでください
- ランダムなデータを含むページをテストしないでください
- しきい値を厳しくしすぎないでください(差分 0%)
- ブラウザーやデバイスの違いを考慮したテストを省略しないでください
- 未承認の差分をコミットしないでください
コメント
Markdown 対応