
VizDiff
vizdiff.io · コーディング
VizDiff は Storybook 向けのセルフホスト型ビジュアルリグレッションテストツールです。CI でコンポーネントを撮影し、ピクセルの変化を示し、マージ前に GitLab や GitHub へステータスチェックを送ります。

VizDiff について
What Is VizDiff
VizDiff は、コードレビューだけでは見逃してしまう UI の変化を捕まえます。すでにある Storybook の設定に載り、コミットのたびに各ストーリーを撮影し、新しい画像群を保存済みの基準と比べます。動いた箇所はすべて印を付け、人が承認するか却下するかに回します。
このツールは自前のインフラで動きます。共有のクラウドアカウントはなく、スクリーンショットは自分のストレージバケットに残ります。UI を第三者に渡さずに済むビジュアルリグレッションテストです。Storybook スクリーンショットテストは CI の中で走り、どのスクリーンショットテストも変わった箇所に印を付けます。チームがすでに GitLab や GitHub で Storybook をビルドしているなら、VizDiff は引っ越しを求めるのではなく、今あるパイプラインに収まります。
主な制約は守備範囲です。VizDiff は Storybook のストーリーを理解するだけで、それ以外はほとんど扱いません。ページ全体やアプリの流れを試すチームには、もっと広い道具が要ります。また、自分でデプロイして運用する前提なので、何も動かしたくない場合は選択肢から外れます。
Getting Started
- アイデンティティプロバイダー経由で VizDiff にサインインします(GitLab では Microsoft Entra か SSO、GitHub では GitHub OAuth)。
- プロジェクトを追加し、そのリポジトリ用に生成された Project Token をコピーします。
- トークンを
VIZDIFF_PROJECT_TOKENとして CI のシークレットか変数に保存します。 - パイプラインにアップロード手順を足し、Storybook のビルド先(たとえば
storybook-static)を指します。 - マージリクエストを開き、VizDiff で撮影されたスクリーンショットを見て、ビルドを承認するか却下します。
AIツール情報
VizDiffの料金、対応プラットフォーム、性能を簡単に確認できます。
こんな人におすすめ
このツールが最も力を発揮するユーザー、タスク、シーン。
ユーザー
- Storybook でコンポーネントライブラリを作り、マージ前にリグレッションを捕まえたいフロントエンドチーム
- すでに CI パイプラインを動かしていて、別のクラウドアカウントを増やしたくない GitLab や GitHub の利用者
- データの扱いが厳しく、スクリーンショットを自社インフラに留める必要がある組織
- 小さなコンポーネント案件で Docker デプロイを自分で立ち上げられる個人開発者
タスク
- コードがメインブランチに入る前に、プルリクエストでビジュアルリグレッションを捕まえる
- 2 つの Storybook ビルドの間でどのストーリーが変わったかを見て、一つずつ確認する
- チーム全員が比べられる、承認済みスクリーンショットの共通基準を保つ
- 未承認の UI 変更を持ち込むコミットで、マージを自動的に止める
シーン
- デザインシステムのコンポーネントを作り直し、他にどの画面を揺らしたか正確に知りたい
- 少しのスタイル変更が数十のストーリーに波及する、育ち続けるコンポーネントライブラリを保つ
- レビュー担当がアプリを手元で動かせない分散チームで、UI を目で確かめる
- ユニットテストが緑でも UI の不具合がすり抜け続けるリリース工程を引き締める
主な機能
Storybook Integration
VizDiff はチームがすでに書いたストーリーを読み込むので、別のテスト群を維持する必要はありません。パイプラインが Storybook をビルドすると、CLI が出力をアップロードし、ツールがストーリーごとに 1 枚のスクリーンショットを描画します。Storybook にコンポーネントを足せば、余分な設定なしで次の比較に現れます。
GitLab and GitHub Status Checks
このツールは GitLab のマージリクエストにコミットステータスを、GitHub のプルリクエストにチェックを送ります。GitLab ビジュアルテストと GitHub ビジュアルテストが同じ流れに乗ります。スクリーンショットの描画中、そして新規や変更分を誰かが見る間、このチェックは保留のままです。何も変わっていなければ自動で成功に変わるので、定型的なコミットは誰も手を動かさずに通ります。
Pixel-Level Diff Views
変更のあったストーリーは、Old、New、Diff、2-Up の 4 つの表示を持つ比較ダイアログで開きます。Diff 表示はピクセル差分ツールとして動いたピクセルを目立たせ、2-Up モードは 2 つの版を並べます。矢印キーで次々に移れるので、1 つのブランチが数十のストーリーに触れるときに効きます。
Shared Baselines
承認済みのスクリーンショットは、次のビルドが比べられる基準になり、チーム全員が同じ一式で作業します。スクリーンショットは自分の S3 互換バケットに保存されるので、参照画像がインフラの外に出ることはありません。承認済みのコミットから分岐すれば、比較は意味を保ち、全部が新規に戻ることはありません。
Self-Hosted Deployment
VizDiff は MIT ライセンスのオープンソースプロジェクトとして配布され、api、worker、frontend の 3 サービスとして PostgreSQL と自分で用意するバケット上で動きます。バージョン付きのマルチアーキテクチャイメージが GitHub Container Registry に公開され、Docker Compose ファイルと Helm chart のどちらでも設置できます。ベンダーのアカウントも、席ごとの料金もありません。
メリットとデメリット
メリット
- スクリーンショットと基準が自分のインフラに残り、データ方針が厳しいチームに向く
- パイプラインがすでに作る Storybook ビルドで動くので、導入はほぼ CI の編集だけで済む
- ステータスチェックがマージを自動で止め、変化がなければ自然に解除される
- MIT ライセンスのオープンソースで、席ごとの料金交渉が不要
- UI リグレッションテストが裏で動き続け、レビュー担当は何かが動いたときだけ目をやればよい
- GitLab と GitHub の両方に対応し、セルフホストの GitLab も含む
デメリット
- 設置にはデプロイの運用と保守が要り、Docker、PostgreSQL、ストレージバケットが付いてくる
- Storybook のストーリーしか試さないので、ページ全体や多段の流れは守備範囲の外
- ブランチでの初回実行は基準を作るだけなので、最初のコミットはすべてが新規に見える
- サインインが外部のアイデンティティプロバイダー頼みで、完全にローカルなチームは配線が増える
よくある質問
CI パイプラインが動くたびに各 Storybook ストーリーを撮影し、結果を承認済みの基準と比べ、どれが変わったかを知らせます。その変化はマージリクエストやプルリクエスト上のステータスチェックとして現れ、そこで同僚が承認するか却下します。
関連コンテンツ
VizDiffに関連するツール、スキル、記事を探す。
VizDiffの代替ツール
Forefront
Forefront · コーディングForefrontはオープンソースAIで構築するためのウェブプラットフォームだ。主要なオープンソース言語モデルを自分のデータで微調整し、性能を評価し、API経由で実行したり、エクスポートして自分でホストしたりできる。クローズドなプラットフォームの手軽さを求めつつ、モデルとデータの所有権にはこだわる開発者が対象だ。
Startkit
StartKit.AI · コーディングStartkitは、AI SaaSとAIラッパー製品を作るためのボイラープレートだ。面倒な部分をあらかじめ配線済みにしたAIスタートアップボイラープレートと考えればいい。認証、StripeとLemon Squeezyの決済、利用制限、トランザクションメール、そしてOpenAI、Anthropic、Groq、Llamaと通信するAI APIスターターキットが含まれる。リポジトリをクローンして価格を設定し、ユーザーが実際にお金を払う部分に取りかかれる。ReactとTailwind上のNext.jsで作られているため、ボイラープレートコードの多くはすでに見慣れたものだ。
Testim
Tricentis · コーディングTestimは、Web・モバイル・Salesforceアプリ向けにエンドツーエンドテストを構築して実行するAIテスト自動化プラットフォームだ。機械学習を頼りに、インターフェースが変わってもテストを安定させ、チームが壊れたセレクターの修正に費やす時間を減らす。今日から使い始められる自動テストツールとしては悪くない。ブラウザで操作を録画してテストを作り、より細かい制御が必要なときはJavaScriptを足す。忙しいQAチームにとって堅実な選択肢である。
