# Supabase・Vercel からの移行

Supabase や Vercel で作ったアプリは、コードをほとんど変えずに移せます。各手順に、そのまま動くものと確認することを書きました。順番に進めてください。

## 1. プロジェクトを作り、フォルダをつなぐ

`create_project`（リージョンは作成時に一度だけ選びます。blackwall://start）。アプリのフォルダで `oneend login --token <トークン>` と `oneend link --project <ref>`（blackwall://cli）。

## 2. データベースを移す

`oneend db pull` が現在のスキーマを最初のマイグレーションとして書き出し、バージョン付き SQL は `oneend db push` で適用します（blackwall://migrations）。
Supabase 向けの SQL はそのまま動きます。`public.`・`auth.`・`storage.` と `anon`・`authenticated`・`service_role` が置き換わり、置き換えた内容は応答の `translated` に出ます（blackwall://access-rules）。
カスタムスキーマ、`pg_cron`、`pg_net`、Vault も使えます（blackwall://database-features）。同期の `http` 拡張はありません。`net.http_get` か関数を使ってください。
**移行後の確認:** list_policies でこのプロジェクトの実際のロール名を見ます。表が空に見えるときは、ほぼアクセスルールが原因です（blackwall://access-rules）。

## 3. supabase-js はそのまま使う

アドレスを `https://<ref>.<zone>`、キーを公開キーにします。`SUPABASE_URL`、`SUPABASE_ANON_KEY`、`SUPABASE_SERVICE_ROLE_KEY`（と `NEXT_PUBLIC_` 形式）はビルドと関数にすでに入っているので、`createClient(Deno.env.get('SUPABASE_URL')!, ...)` は直さなくて済みます（blackwall://env）。
`generate_typescript_types` が `Database` 型を作ります（blackwall://migrations）。

## 4. サインインとファイル

プロバイダ、リダイレクト先、`custom:<名前>` の OAuth プロバイダは blackwall://auth、バケット・署名付き URL・S3 互換アクセスは blackwall://storage にあります。

## 5. 関数

Supabase 向けの Deno 関数はそのまま動きます。`Deno.serve`、`npm:` の import、`_shared` フォルダ、呼び出し元の `Authorization` ヘッダーも使えます。フォルダは `oneend functions deploy <名前> <フォルダ>` でデプロイします（blackwall://functions）。
1 回の呼び出しは既定で 150 秒まで。Supabase と同じです。

## 6. サイトをデプロイする

git にプッシュするか、デプロイのツールを使います（blackwall://deploy）。ドメイン、リダイレクト、プレビュー保護は blackwall://domains と blackwall://previews にあります。
`@vercel/analytics` と `@vercel/speed-insights` を使うアプリは、コードを変えずに集計されます。`track` のカスタムイベントはまだ保存しません（blackwall://edge）。

## 同じではないところ

- 直接接続（psql）では名前は置き換わりません。`app_<ref>` の名前を使ってください。
- データ API は、他のスキーマを公開するまで public だけに答えます。
- ここに書いていないことは約束しません。使う前に該当するページを確認してください。

---

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