【Chromatic】Storybookビジュアルテストの導入ガイド - セットアップからCI連携まで
【Chromatic】Storybookビジュアルテストの導入ガイド
Chromaticは、Storybook社が提供するビジュアルテスト・UIレビュープラットフォームです。UIコンポーネントのスクリーンショットを自動的に撮影し、変更前後の差分をピクセル単位で検出できます。この記事では、Chromaticのセットアップ方法からGitHub Actionsとの連携まで、実践的な導入手順を解説します。
Chromatic の主な機能
UIコンポーネントのスクリーンショットを自動撮影し、変更前後の画像をピクセル単位で比較します。意図しないUI変更を検出できます。
PRごとにStorybookを自動デプロイし、チームメンバーがブラウザ上でUIをレビュー・コメントできます。デザイナーとの協業にも有効です。
Storybookを自動的にクラウドにパブリッシュします。バージョン管理や履歴の保持、共有URLの発行ができます。
GitHub、GitLab、Bitbucket等と統合し、PRにステータスチェックを追加できます。変更があった場合のみレビューを要求します。
前提条件
| 要件 | バージョン |
|---|---|
| Storybook | 6.5以上(推奨: 7.6以上) |
| Node.js | 18, 20, 21 |
セットアップ手順
アカウント作成とプロジェクトトークン取得
Chromatic にアクセスし、GitHub / GitLab / Bitbucket / Email のいずれかでサインアップします。
ダッシュボードから新規プロジェクトを作成し、Project Token をコピーします。このトークンは後のステップで使用します。
パッケージインストール
お使いのパッケージマネージャーに応じてインストールします。
# npm
npm install --save-dev chromatic
# yarn
yarn add --dev chromatic
# pnpm
pnpm add -D chromatic
初回ビルド(ベースライン作成)
以下のコマンドで初回ビルドを実行します。すべてのStorybookストーリーのスクリーンショットが撮影され、ベースラインとして保存されます。
npx chromatic --project-token=<your-project-token>
ベースラインは、UIの「正しい状態」を表すスクリーンショットのセットです。以降のビルドではこのベースラインと比較して差分を検出します。
package.json にスクリプト追加
{
"scripts": {
"chromatic": "chromatic"
}
}
環境変数でトークンを管理する場合は、.env やCI環境変数に設定します。
# .env または CI環境変数に設定
CHROMATIC_PROJECT_TOKEN=your-token-here
以降は以下のコマンドで実行できます。
npm run chromatic
GitHub Actions 連携
ワークフローファイルの作成
.github/workflows/chromatic.yml を作成します。
name: Chromatic
on:
push:
branches:
- main
- develop
pull_request:
branches:
- main
jobs:
chromatic:
runs-on: ubuntu-latest
steps:
# コードをチェックアウト(履歴全体を取得)
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # TurboSnapに必要
# Node.jsセットアップ
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
# 依存関係インストール
- name: Install dependencies
run: npm ci
# Chromatic実行
- name: Run Chromatic
uses: chromaui/action@latest
with:
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
onlyChanged: true # TurboSnap有効化
fetch-depth: 0 は必須です。TurboSnapがGit履歴を使って変更ファイルを特定するため、履歴全体が必要になります。
GitHub Secrets の設定
リポジトリの Settings → Secrets and variables → Actions に移動します。
New repository secret をクリックし、以下を入力して保存します。
| 項目 | 値 |
|---|---|
| Name | CHROMATIC_PROJECT_TOKEN |
| Value | プロジェクトトークン |
レビューワークフロー
Chromaticを導入した後の開発フローは以下のようになります。
主要な CLI オプション
| オプション | 説明 |
|---|---|
--project-token | プロジェクトトークン |
--only-changed | TurboSnap(変更のあるストーリーのみテスト) |
--auto-accept-changes | 変更を自動承認(mainブランチ用) |
--exit-zero-on-changes | 変更があっても終了コード0 |
--skip | ビルドをスキップ |
--dry-run | 実際にアップロードせずテスト |
--debug | デバッグログ出力 |
# TurboSnapを有効にして実行
npx chromatic --only-changed
# mainブランチでは自動承認
npx chromatic --auto-accept-changes="main"
mainブランチにマージされたコードは「正しい状態」として扱いたい場合、--auto-accept-changes="main" を指定すると、mainブランチへのプッシュ時にベースラインが自動更新されます。
TurboSnap(高速化機能)
TurboSnapは、変更のあったファイルに関連するストーリーのみテストする機能です。ビルド時間とスナップショット消費を大幅に削減します。
GitHub Actions での設定
- uses: chromaui/action@latest
with:
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
onlyChanged: true
externals: "public/**" # 静的ファイルの変更も検知
変更されたストーリーのみテスト。スナップショット消費が少なく高速。
全ストーリーをテスト。毎回大量のスナップショットを消費。
.gitignore に追加
Chromaticのビルドログや一時ファイルをバージョン管理から除外します。
# Chromatic
build-storybook.log
chromatic.log
chromatic-build-*.xml
storybook-static/
料金プラン
| プラン | スナップショット/月 | 価格 |
|---|---|---|
| Free | 5,000 | 無料 |
| Pro | 35,000〜 | $149/月〜 |
| Enterprise | カスタム | 要相談 |
月5,000スナップショットは、50個のストーリーを毎日1回テストした場合、約3ヶ月分に相当します。TurboSnapを有効にすればさらに節約できます。
セットアップチェックリスト
- アカウント Chromaticにサインアップ済み
- トークン Project Tokenを取得済み
- パッケージ chromaticをdevDependenciesにインストール済み
- 初回ビルド ベースラインを作成済み
- CI連携 GitHub Actionsワークフローを設定済み
- Secrets CHROMATIC_PROJECT_TOKENを設定済み
- gitignore ログファイルを除外済み
参考文献
- Chromatic Setup Guide
- Chromatic Quickstart
- Automate Chromatic with GitHub Actions
- Configuration Reference
- chromaui/action - GitHub
まとめ
Chromaticを導入することで、UIの意図しない変更を自動的に検出し、チーム内でのUIレビューを効率化できます。TurboSnapを活用すれば無料枠でも十分に運用可能です。GitHub Actionsとの連携により、PRごとにビジュアルテストが自動実行される仕組みを構築できます。