OmochiXを検索

Esc で閉じる

AI開発

Claude Code × SupabaseでQA専用DBを作る|Previewごとにテストデータを分離して安全にE2Eする【2026年版】

Vercel PreviewにPlaywrightを接続できても、接続先のデータベースがProductionと同じなら、安全なQA環境とは言えません。 E2Eテストでは、ログイン・顧客登録・フォーム送信・データ更新など、 […]

OmochiX 公開 更新 約14分で読めます
CD97DE13 225B 4A07 8CA0 F3086B43F589

Vercel PreviewにPlaywrightを接続できても、接続先のデータベースがProductionと同じなら、安全なQA環境とは言えません。

E2Eテストでは、ログイン・顧客登録・フォーム送信・データ更新など、実際にデータを書き換える操作を行います。

そのため本番DBへ接続したまま自動テストすると、テスト顧客・テスト案件・テスト請求などが実データへ混ざる可能性があります。

そこで今回作るのが、Claude Code × Supabase Branching × Vercel Preview × Playwrightを組み合わせたQA専用データ環境です。

この記事でわかること

  • なぜPreviewとProductionのDBを分離すべきなのか
  • Supabase Preview Branchの基本的な仕組み
  • Migrationとseed.sqlでQA環境を再現する方法
  • QA Tenant・QA User・テストデータを分離する設計
  • Vercel PreviewとPlaywrightまでつなぐ考え方

結論

AI開発を安全に自動化するなら、「Preview画面」だけでなく「Preview用DB」までProductionから分離することが重要です。Migrationでschemaを再現し、SeedでQA専用データを投入することで、AIやE2Eが何度失敗しても本番データを汚さない検証環境を作れます。

Preview環境だけ分けても安全とは限らない

Vercel Previewは、本番反映前にアプリケーションを実際のURLで確認できる非常に便利な仕組みです。

しかし、画面だけPreviewになっていても、環境変数のDATABASE_URLがProduction DBを向いていたら、アプリが操作するデータは本番と同じです。

たとえばPlaywrightが自動で次の処理をしたとします。

E2Eで発生する可能性がある書き込み

  • テスト顧客を新規登録する
  • 案件やタスクを作成する
  • 公開フォームを送信する
  • レコードを編集・削除する
  • Authユーザーを作成する

これらがProductionへ向いていれば、自動テストが実データを直接変更してしまいます。

最重要

PreviewでE2Eを実行する場合は、画面URLだけでなくDatabase・Auth・Storage・外部API・メール・決済などの接続先もProductionから分離されているか確認してください。

Supabase Branchingとは

Supabase Branchingを使うと、GitブランチやPull Requestに対応したPreview環境を作成できます。

Preview Branchごとに独立したDatabaseやAPI環境を持たせることができるため、Productionへ影響を与えずにschema変更・テストデータ・Auth設定などを検証できます。

Production

実ユーザー・実データが存在する本番環境です。

  • Production DB
  • Production Auth
  • 実データ

Preview Branch

Pull Requestなどに対応して作る検証用環境です。

  • Preview DB
  • Preview Auth
  • QA Data

Claude Code

Migration・Seed・E2Eを変更し、失敗したQAの修正を担当します。

  • Schema変更
  • Seed管理
  • 原因調査

理想のQA環境構成

Environment Architecture FLOW
Production
├── Production App
├── Production DB
├── Production Auth
├── Production Storage
└── 実ユーザー / 実データ

Preview / QA
├── Vercel Preview
├── Supabase Preview Branch
│   ├── QA Database
│   ├── QA Auth
│   └── QA Storage
├── QA Tenant
├── QA User
├── Seed Data
└── Playwright E2E

ポイントは、Playwrightが触る対象をすべてQA側へ閉じ込めることです。

OmochiX View

AIが自律的に実装・テスト・修正を繰り返すなら、AIそのものを信頼するより「壊しても問題ない環境」を先に作る方が安全です。

SchemaはMigrationで管理する

QA環境を再現可能にするためには、Database schemaを人の記憶やDashboard操作だけで管理しないことが重要です。

SupabaseではMigrationファイルを使ってschema変更をコードとして管理できます。

Terminal Shell
supabase migration new add_customer_status

Migrationファイルにschema変更を書きます。

supabase/migrations/…_add_customer_status.sql SQL
alter table public.customers
add column status text default 'active';

ローカル環境ではresetして、Migrationを最初から再実行できます。

Terminal Shell
supabase db reset

この状態を作ることで、「新しいQA環境をゼロから作っても、同じschemaになる」状態を目指します。

テストデータはseed.sqlで管理する

Schemaだけ作っても、E2Eに必要なデータが存在しなければテストできません。

そこで、QA用の初期データをsupabase/seed.sqlへ定義します。

supabase/seed.sql SQL
insert into public.tenants (
  id,
  name,
  slug
)
values (
  '00000000-0000-0000-0000-000000000001',
  'QA Tenant',
  'qa'
);

insert into public.customers (
  tenant_id,
  name,
  email
)
values (
  '00000000-0000-0000-0000-000000000001',
  'QA Customer',
  'qa-customer@example.test'
);

こうしておけば、QA環境を作り直しても同じ初期状態からテストを開始できます。

本番データをSeedに入れない

Seedファイルには実在する顧客情報・メールアドレス・APIキー・認証情報などを入れず、QA専用のダミーデータだけを使用してください。

QA Tenantを固定しておく

マルチテナントSaaSでは、テスト対象をQA専用Tenantへ固定しておくと安全です。

たとえばPlaywrightが作成する顧客・案件・タスクは、すべてqa Tenantの中だけに作成します。

QA Tenantに用意したいもの

  • QA専用Tenant
  • 管理者権限のQA User
  • 一般権限のQA User
  • E2E用の初期顧客・案件
  • 公開フォームなどのテスト対象

QA Userの認証情報はSecretsで管理する

Playwrightからログインする場合でも、パスワードをRepositoryへ直接書くのは避けます。

GitHub ActionsのSecretsなどから環境変数として渡します。

GitHub Actions YAML
env:
  QA_EMAIL: ${{ secrets.QA_EMAIL }}
  QA_PASSWORD: ${{ secrets.QA_PASSWORD }}

そしてPlaywright側で読み込みます。

tests/login.spec.ts TypeScript
await page.getByLabel('メールアドレス').fill(
  process.env.QA_EMAIL || ''
);

await page.getByLabel('パスワード').fill(
  process.env.QA_PASSWORD || ''
);

Supabase Preview BranchをGitHubと連携する

SupabaseのGitHub IntegrationでAutomatic Branchingを有効にすると、GitHub側のbranchに対応するSupabase Branchを作る構成が取れます。

Preview BranchのDatabase schemaは、Repositoryに保存されたMigrationから構築されます。

本番Databaseの実データをそのままコピーするのではなく、Seedとして明示したテストデータだけを使う構成にできるのが大きなポイントです。

Branch Lifecycle FLOW
Feature Branch
↓
Pull Request
↓
Supabase Preview Branch
↓
Migrations
↓
Seed Data
↓
QA Database Ready

Preview BranchはProductionから分離される

Supabase Branchでは、それぞれのbranchが独立した環境として扱われます。

そのためPreview側でテストデータを作成・削除しても、Production側のデータへ直接影響しない構成を作れます。

重要

QAの安全性は「テストコードの品質」だけでなく、「Productionへ到達できない環境分離」によって担保する方が強いです。

Vercel PreviewとSupabase Branchをつなぐ

ここまでできたら、Vercel Preview側も対応するSupabase Preview Branchを使うようにします。

理想的な流れは次の通りです。

Preview Stack FLOW
GitHub PR
   ↓
┌────────────────────────────┐
│ Supabase Preview Branch    │
│ QA DB / Auth / Seed Data   │
└────────────────────────────┘
   ↓
Environment Variables
   ↓
┌────────────────────────────┐
│ Vercel Preview             │
│ Preview Application        │
└────────────────────────────┘
   ↓
Playwright E2E

SupabaseとVercelのBranching Integrationを利用する場合、Git branchに対応したSupabase Preview Branchの環境変数をVercel Previewへ同期する構成も利用できます。

Key Point

ApplicationのPreviewとDatabaseのPreviewを同じGit branchへ紐づけることで、「画面はPreviewなのにDBだけProduction」という危険な状態を避けやすくなります。

環境変数を確認する

Previewで特に確認したいのが、Database・API・Authの接続先です。

Previewでチェックする環境変数

  • DATABASE_URL
  • SUPABASE_URL
  • Supabase API Key
  • Auth Callback URL
  • メール・決済・Webhookなど外部サービス

PreviewだけProduction接続になっていないか確認

Preview環境変数にProductionのDATABASE_URLや本番用APIキーが残っていると、QA環境を分離した意味がなくなります。E2E開始前に接続先を必ず確認してください。

メール・通知・決済はQAでは無効化する

Databaseを分離しても、外部への副作用がProductionと同じなら事故につながる可能性があります。

たとえばQAテストでフォームを送信しただけなのに、実際の顧客や営業担当へ通知メールが届くような状態は避けるべきです。

Email

QAでは送信を無効化するか、テスト専用Inboxへ限定します。

  • 通知OFF
  • テスト宛先のみ

Payment

決済サービスは必ずSandbox / Test Modeを利用します。

  • Test Key
  • 本番課金禁止

Webhook

Productionの業務フローへイベントを送らないよう分離します。

  • QA Endpoint
  • Production遮断

QA環境を何度でも作り直せる状態にする

理想は、QA環境を長期間手作業で維持することではありません。

必要になったら作り、壊れたら捨て、またMigrationとSeedから再生成できる状態です。

Reproducible QA FLOW
Migration
+
Seed Data
+
Environment Config
       ↓
Fresh QA Environment
       ↓
Playwright E2E
       ↓
Destroy / Reset
       ↓
Recreate

この設計にすると、「QA環境だけ誰かが手作業で直したため、他の環境では再現できない」という状態を減らせます。

Claude CodeにQA環境の整合性も確認させる

Claude Codeには、アプリコードだけでなくMigration・Seed・E2Eの差分もまとめて確認させることができます。

Claude Code Prompt TEXT
今回の変更について以下を確認してください。

1. Prisma / Supabase migration
2. QA seed data
3. Preview環境変数
4. Playwright E2E
5. Productionへの副作用

問題がある場合は、

原因調査
↓
最小修正
↓
migration validation
↓
seed validation
↓
E2E
↓
diff report

まで進めてください。

Production DB・本番メール・本番通知・
本番決済への接続は禁止です。

Preview Branchのコストにも注意する

Preview Branchは便利ですが、それぞれが独立したSupabase環境としてリソースを利用します。

不要なbranchを大量に残し続けるより、Pull Requestが終わったら削除するなど、運用ルールを決めておく方が扱いやすくなります。

Branchを放置しない

Preview環境は無料のダミー環境ではありません。チームやAIエージェントが大量にbranchを作る運用では、不要になったPreview Branchの削除まで含めて設計しておきましょう。

AI自動開発とQA DBは相性がいい

AIエージェントは、人間より短時間で大量の変更を試せます。

一方で、そのたびにProduction DBへ影響する可能性があれば、自動化できる範囲は大きく制限されます。

そこで、

AI QA Loop FLOW
Claude Code
↓
Feature Branch
↓
Supabase Preview Branch
↓
Vercel Preview
↓
Seed Data
↓
Playwright E2E
↓
FAIL
↓
Claude Codeが修正
↓
QA環境で再検証
↓
PASS
↓
Human Review

という環境を作れば、AIがProductionから隔離された場所で何度も試行錯誤できるようになります。

OmochiX View

自動開発で本当に重要なのは「AIに失敗させないこと」ではなく、「AIが失敗しても安全に何度でもやり直せる環境」を作ることです。

Productionへ進める品質ゲート

Merge前の確認例

  • Migration validation PASS
  • Seed validation PASS
  • Build PASS
  • Preview E2E PASS
  • Production接続が存在しないことを確認
  • 必要な人間レビューPASS

3行まとめ

  • Preview E2EではアプリだけでなくDatabaseもProductionから分離する
  • Migration+SeedでQA環境を何度でも再現できる状態にする
  • Supabase Preview BranchとVercel Previewを組み合わせると、AIが安全に試行錯誤できる

次はテスト失敗をClaude Codeに自動修正させる

ここまでで、

実装 → Preview → QA DB → E2E

までがつながりました。

次の段階は、PlaywrightやCIが失敗したときに、その失敗情報をClaude Codeへ渡し、原因調査・修正・再テストまで自動化することです。

これができると、AI開発はさらに「人間が毎回指示する開発」から離れていきます。

前の記事

Claude Code × Vercel Preview × Playwrightで自動E2E環境を作る

QA専用DBへ進む前に、Vercel Preview URLへPlaywrightを自動実行する方法を確認したい方はこちら。

記事を読む

出典:Supabase公式ドキュメント / Vercel・Supabase Branching Integration公式ドキュメント / GitHub Actions公式ドキュメント

NEXT STEP

次に知りたいAI情報へ。

自分に合うAIツールを探す 最新のAIニュースをもっと見る

OmochiXをフォロー

最新のAIニュースや活用情報をSNSでも配信しています。