PR

【AI開発】githubactionsでchromaui/actionによるUIの自動テストをさせてみる

ALL開発
PR
PR

なぜおすすめなのか

  1. 圧倒的に導入が簡単
  2. Storybookとの完璧な統合
  3. デザインレビューが捗った

chromaui/actionとは

chromaui/actionは、Storybook のメンテナーが作成している Storybook 用のツールです。Storybook をビルドして公開したり、ストーリーごとのスクリーンショットを撮影し、差分を比較してくれる機能を提供します。

主な機能

  • ビジュアルリグレッションテスト(VRT): UI の予期せぬ変更を事前に検知
  • Storybookのホスティング: クラウド上でStorybookを公開
  • 自動レビューフロー: PRと連携したUI変更の確認プロセス

必要な設定準備

Chromaticプロジェクトトークンの取得

  1. Chromaticにアカウント作成
  2. プロジェクトを作成してトークンを取得
  3. GitHubリポジトリのSettings → Secrets and variablesでCHROMATIC_PROJECT_TOKENを設定

実践的な設定例

1. コスト削減型設定

yamlname: 'Chromatic'

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]
    paths:
      - 'src/**'
      - 'stories/**'
      - '.storybook/**'
      - 'package.json'
      - 'package-lock.json'

jobs:
  chromatic-deployment:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Check for frontend changes
        id: check_changes
        run: |
          CHANGED_FILES=$(gh pr diff ${{ github.event.pull_request.number }} --name-only | grep -E '^src/|^stories/|package.json' || true)
          if [ -z "$CHANGED_FILES" ]; then
            echo "skip=true" >> $GITHUB_OUTPUT
          else
            echo "skip=false" >> $GITHUB_OUTPUT
          fi
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Install dependencies
        if: steps.check_changes.outputs.skip == 'false'
        run: npm ci

      - name: Publish to Chromatic
        uses: chromaui/action@v11
        with:
          projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
          onlyChanged: true
          turboSnap: true
          exitZeroOnChanges: true
          skip: ${{ steps.check_changes.outputs.skip }}

2. モノレポ対応設定

yamlname: 'Chromatic'

on:
  pull_request:
    paths:
      - 'packages/ui/**'

jobs:
  chromatic-deployment:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: packages/ui

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install dependencies
        run: npm ci

      - name: Publish to Chromatic
        uses: chromaui/action@v11
        with:
          projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
          workingDir: 'packages/ui'
          onlyChanged: true

3. プレビューリンクコメント付き設定

yamlname: 'Chromatic'

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  chromatic-deployment:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install dependencies
        run: npm ci

      - name: Publish to Chromatic
        id: chromatic
        uses: chromaui/action@v11
        with:
          projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
          exitZeroOnChanges: true

      - name: Comment PR with Chromatic link
        if: github.event_name == 'pull_request'
        uses: peter-evans/create-or-update-comment@v3
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          issue-number: ${{ github.event.pull_request.number }}
          body: |
            ## 🎨 Chromatic Visual Review
            
            **Storybook Preview**: ${{ steps.chromatic.outputs.storybookUrl }}
            **Build Status**: ${{ steps.chromatic.outputs.buildUrl }}
            
            Review changes and approve in Chromatic to complete the UI review process.

コスト最適化のベストプラクティス

1. 実行条件の最適化

  • フロント差分が含まれていなければスキップする設定
  • pathsフィルターでファイル変更を限定
  • onlyChanged: trueで変更部分のみテスト

2. 効率的なキャッシュ活用

  • turboSnap: trueで高速化
  • npm/yarnキャッシュの活用

3. テスト対象の最適化

  • VRT専用ストーリーの作成
  • 不要なストーリーのVRT除外設定

メリットと効果

開発効率向上

  • リファクタリングなど既存実装に修正を加えた際に、意図しないUIの崩れが起きることを防ぎたい
  • 導入が簡単でした。Storybook 公式ドキュメント にもChromaticの導入手順が書かれており、この通りに行うとものの数分で設定が完了

レビューフロー改善

  • デザインレビューが捗った
  • PRでの視覚的な変更確認が自動化

品質向上

  • コードではなくてビジュアル要素(画像)で比較できるので、エラーの原因を直感的に理解しやすくなり、診断と修正のプロセスが迅速化

chromaui/action@v11は、視覚的なリグレッションテスト向けのツールは多々あります。Storybook のメンテナーが作成した無料のホスティングサービスである Chromatic がオススメですとして、現代のフロントエンド開発にとても便利なツールとなっています。