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)。
仕組み:
- PR を開くと Supabase GitHub App が PR comment に branch URL を post
- workflow は
gh apiで PR comments を読み取り、postgresql://...を抽出 - URL を
DATABASE_URLenv としてcheck-migration-drift.ts/npm run test:unitを実行 - 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
関連
- memory: project_parky_e2e_framework_2026_04_26 — test user seed の方針
- parky/infra/supabase/migrations/ — 193 migrations
- memory: feedback_supabase_db_best_practices
- 公式: https://supabase.com/docs/guides/platform/branching