# データベースブランチ（プレビュー用データベース）

ブランチは、プロジェクトの**スキーマから作るデータベース**です。gitブランチごとに1つ置くと、そのブランチのプレビューデプロイが
本番のデータベースではなくブランチを使います。Proプランからプロジェクトごとに3つまで（エンタープライズは10）持てます。

- 作るときに、プロジェクトのマイグレーション履歴（`apply_migrations`や`oneend db push`で適用したもの）を順に再実行し、
  シードSQLがあれば実行します。**データはコピーしません。**
- ブランチは独自のrefを持つプロジェクトです。`list_branches`の`ref`を`run_sql`、`get_project_keys`、
  `get_database_connection`などすべてのツールにそのまま使います。アドレス、キー、ユーザー、ファイルも別です。
- ブランチのgitブランチからプレビューをデプロイすると、デプロイの環境変数にブランチの`SUPABASE_URL`、`NEXT_PUBLIC_SUPABASE_URL`、
  `SUPABASE_ANON_KEY`、`NEXT_PUBLIC_SUPABASE_ANON_KEY`、`SUPABASE_SERVICE_ROLE_KEY`、`DATABASE_URL`、
  `POSTGRES_URL`、`DIRECT_URL`、`ONEEND_DB_BRANCH`が入ります。プレビュー用の環境変数のうち、本番プロジェクトの
  アドレスやキーを持つ値もブランチのものに置き換わります。
- `merge_branch`は、ブランチにだけあるマイグレーションを本番に適用します。そのため、ブランチでスキーマを変えるときは
  `run_sql`ではなく`apply_migrations { ref: <ブランチのref> }`で変えてください。
- gitブランチを削除するかプルリクエストを閉じると、ブランチも削除されます。最後のデプロイの後、保持期間（既定14日）が過ぎても
  削除されます。サイズが上限（既定1GB）を超えると一時停止します。

```
create_branch { ref, git_branch: "feature/login" }
list_branches { ref }
apply_migrations { ref: "<branch ref>", migrations: [{ version: "20261005000000", name: "add_profiles", sql: "..." }] }
merge_branch { ref, name: "feature-login" }
reset_branch { ref, name: "feature-login", confirm: "feature-login" }
delete_branch { ref, name: "feature-login", confirm: "feature-login" }
set_branching { ref, automatic: true, seed_sql: "insert into plans (code) values ('free');", lifetime_days: 14 }
```

`set_branching`の`automatic`をオンにすると、プレビューとしてデプロイされるgitブランチごとにブランチが自動で作られます。

**料金:** ブランチのデータベース容量はデータベースの保存容量として、ブランチがある間は1時間あたり0.25GBのサーバーメモリ
（`runtime_gb_hour`）として、プロジェクトの組織に請求されます。毎晩のバックアップは取りません。

HTTPでは`GET /branches`、`POST /branches`、`POST /branches/<名前>/merge`、`POST /branches/<名前>/reset`、
`DELETE /branches/<名前>`、`PUT /branching`です。

---

https://end.blackall.ai/docs/branches?lang=ja
