Supabase Branching — PR 別 DB プレビュー

監査 P0 (B3 / 2026-04-26): PR ごとに migration を適用済みの隔離 DB を立てて、 壊れる migration が main / dev に流入する前に検出する。

状態: 雛形のみ。まず Pro plan へのアップグレードと branch 設定が必要。 本ドキュメントの手順を踏むと branching が稼働する。

何ができる

  • PR を開くたびに pr-123 のような エフェメラル DB branch が自動生成される
  • main の最新 migrations + その PR が触る migration を全部適用した状態
  • E2E / Schemathesis を branch DB に向けて実行できる
  • PR が merge / close されると branch DB は自動破棄

公式 docs: https://supabase.com/docs/guides/platform/branching

前提

  • Supabase project が Pro plan 以上 (free plan では branching 不可)
  • Project Ref: afmyqhicretqrjwmvsaa
  • GitHub 連携済み (Supabase Dashboard → Project Settings → Integrations → GitHub)

セットアップ手順

1. Pro plan へのアップグレード (manual)

Supabase Dashboard → Project Settings → Subscription Plan → Pro。 月額 $25。Parky は本番化前に必須。

2. Branching を有効化 (manual)

Project Settings → Branching → Enable。"Persistent branch" として main を設定。 GitHub repo high-field/parky をリンク。

3. supabase/config.toml で branch policy を定義

config 雛形は parky/infra/supabase/config.toml の末尾に コメントアウト状態で配置済み (Phase 33)。Pro plan upgrade 後にコメントを外す

[experimental.branching]
enabled = true

# main / dev は persistent (常時稼働)、PR は ephemeral (close で破棄)
[experimental.branching.persistent]
branches = ["main", "dev"]

[experimental.branching.ephemeral]
auto_destroy_after_close = true

4. PR テンプレに branch 名を追加 (任意)

.github/PULL_REQUEST_TEMPLATE.md に branch URL の自動展開コメント枠を用意する。

5. CI で branch DB を target にして migration drift / unit test を実行

実装は .github/workflows/supabase-branch-validate.yml (Phase 33)。

仕組み:

  1. PR を開くと Supabase GitHub App が PR comment に branch URL を post
  2. workflow は gh api で PR comments を読み取り、postgresql://... を抽出
  3. URL を DATABASE_URL env として check-migration-drift.ts / npm run test:unit を実行
  4. branch URL が無い (branching 未有効) 場合は早期 skip — Pro plan 化前でも安全に merge 可能
# 抜粋: comment から URL 抽出
comment_body=$(gh api "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" \
  --jq '.[] | select(.user.login == "supabase[bot]") | .body')
url=$(echo "$comment_body" | grep -oE 'postgresql://[^ )]+' | tail -n1)

E2E (Playwright) は別途 e2e-smoke.yml で扱う。branch URL を Playwright fixture に渡す配線は次 Wave。

運用ルール

migration の書き方

  • branching が有効になると、Supabase が PR の migration 差分を全部 branch に流す
  • そのため migration は べき等 + 後方互換 を厳守 (CLAUDE.md §1 と同じ)
  • DROP / TRUNCATE / DELETE は branch でも危険なので避ける (memory: feedback_supabase_mcp_auto_approve)

既知の制約

  • branching は Auth ユーザーを コピーしない (空の auth.users で始まる)
  • E2E では seed-test-user (memory: project_parky_e2e_framework_2026_04_26) を fixture migration で投入する必要あり
  • Storage bucket / Edge Functions は branch にコピーされない (Phase 2 で対応)

コスト

  • Pro plan $25/mo 固定
  • Branch ごとに minor compute / storage、PR 1 件あたり数 cent
  • ephemeral なので PR が閉じれば 0

関連

↗ Source markdown (supabase-branching.md)