機能 · データベース
本物のデータベース。もうつながっています。
TofuのマネージドPostgresは、データベースサービスのアカウントを作らずに使えます。有料プランなら、マネージドデータベースの枠は、アプリごとではなく、すべてのアプリでまとめて使えます。デプロイ時にデータベースを1つ選ぶと、Tofuが1回の操作で作成と接続を済ませ、そのあとで初めてビルドします。ビルドで実行するマイグレーションは、最初のビルドから新しいデータベースに適用されます。Freeプランでも、アプリにマネージドデータベースが1つ付きます。サーバーで動くアプリなら最初のデプロイ時に、それ以外のアプリなら公開後に使えるようになります。アプリがオンラインの間は保持されます。
Take my restaurant app live, with a database.
tofu · setFramework nextjs
confirmed
tofu · deploy database: true
managed database ready · Postgres
DATABASE_URL + 5 more · write-only
build ready
HTTP 200 · publicly reachable
Live at https://franks-kitchen-3f9a1c07b2e4.trytofu.app
操作は1つ
作成、接続、そのあとでビルド。 この順番のまま、1ステップで。
データベースは、デプロイ時に選びます。ダッシュボードならチェックボックス、コーディングエージェントからならdatabase: true、コマンドラインからならdeploy --databaseです。データベースを作るたびに、プランに含まれるデータベースの枠を1つ使います。そのため、何もしなければ作成されず、あなたがそのアプリのために選んだときだけ作成されます。
データベースを作成
アプリ専用のPostgresデータベースを作成します。リージョンはAmericas、EMEA、またはAPACから選べます。正常になるまで待つ
最大2分待ちます。それまでに接続が完了しなければ、ビルドには進みません。結果でデータベースの状態を確認できます。接続設定を書き込む
アプリのホスティングプロジェクトに、接続設定を書き込みます。書き込んだ値は、あとから読み出せません。データベースの公開証明書も一緒に書き込みます。初回のデプロイでは、この時点でTofuがそのプロジェクトを作成します。データベースができてからビルド
ここで初めてビルドします。ビルドでマイグレーションを実行するなら、そのマイグレーションは公開前の最初のビルドで、新しいデータベースに適用されます。
「データベース」ページで以前作成したデータベースも、次のデプロイで同じように接続されます。接続が済んでから、そのデプロイのビルドが行われます。
アプリが受け取るもの
接続は設定済み。 値は表示されません。
Tofuは接続設定を、ホスティングサービスの機密扱いの環境変数に直接書き込みます。書き込んだ値は、Tofuから読み出せない形(書き込み専用)で保存されます。データベースの公開証明書は、同じ環境変数に通常の値として並べます。Tofu自身が保持するのは変数名だけで、service-roleキーは使いません。
| 変数 | 受け取る側 |
|---|---|
| DATABASE_URL | すべてのアプリに、データベースサービスのトランザクションプーラー経由で接続文字列を渡します。 |
| SUPABASE_URL | すべてのアプリに、データベースプロジェクトの公開アドレスを渡します。 |
| SUPABASE_ANON_KEY | すべてのアプリに、データベースプロジェクトの公開キーを渡します。 |
| SUPABASE_CA_CERT | すべてのアプリに、データベースサーバーの公開ルート証明書を渡します。アプリのコードは、接続先が自分のデータベースであることを確かめられます。秘密情報ではありません。 |
| ‹prefix›SUPABASE_URL‹prefix›SUPABASE_ANON_KEY‹prefix›SUPABASE_PUBLISHABLE_KEY | Next.js (NEXT_PUBLIC_)、Vite (VITE_)、Astro (PUBLIC_)のアプリには、同じ公開アドレスと公開キーを、ブラウザ側のコードが読む変数名でも渡します。 |
ほかのフレームワークのアプリは、Python、Go、JavaScriptのサーバーアプリも含めて、サーバー側の変数名だけを受け取ります。Tofuがブラウザ用の接頭辞を推測しないからです。
データベースが接続される前に、アプリのフレームワークを確認してください。ブラウザ側の変数名は、接続した時点でフレームワークに応じて決まり、あとから追加されることはありません。
Freeプランでは、アプリがTofuの共有静的ホスティング上にある場合、ページはブラウザから直接データベースに接続します。そのため、VITE_付きの公開アドレスと公開キーだけを受け取り、DATABASE_URLと証明書は受け取りません。それ以外の場合は、有料プランと同じ変数を受け取ります。
マイグレーションは、ビルドが実行します。
データベースが最初は空なのは意図的です。スキーマは、それを定義するリポジトリのものです。マイグレーションをビルドコマンドに入れておけば、デプロイのたびにスキーマも一緒に届きます。認証情報がどこにもコピーされることはありません。スキーマが同じデプロイで届くコードより遅れることもありません。
2026年10月30日から、Supabaseはpublicスキーマに新しく作ったテーブルへの権限を、アプリのページが使うロールに自動では与えなくなります。そのため、テーブルを作るマイグレーションで、そのテーブルへの権限を付ける必要があります。anonへのselectは、サインインしていない訪問者が読んでよいものだけに付けます。authenticatedにはselect, insert, update, deleteを付けます。サーバー側のコードがservice_roleを使うなら、同じ権限をそのロールにも付けます。ビューにはgrant selectが別に必要です。作成時にsecurity_invoker = trueを指定すれば、ビューの下にある行は、元のテーブルのアクセスルールで守られたままになります。
ビルドが実行するマイグレーションが失敗すると、ビルドも失敗し、前のバージョンはそのまま動き続けます。失敗するまでに適用されたSQL文は、取り消されません。
アプリの「データベース」ページに、Tofuがマイグレーションを適用すると書かれている場合、Tofuは更新のたびに、ビルドの前にsupabase/migrationsフォルダのファイルを適用します。1つでも失敗すると、Tofuはその更新を、ビルドを始める前に止めます。すでに公開されているバージョンは、そのまま動き続けます。
構造は届く。データは届かない。ビルドが実行するマイグレーションは、このデータベースに反映されます。手元のマシンにしかない行は、マイグレーションが挿入しない限り反映されません。
Freeプランでは、アプリがTofuの共有静的ホスティング上にある場合、サイトのビルドでマイグレーションは実行されません。テーブルはビルドとは別に作成します。手順はアプリの「データベース」ページに表示されます。共有静的ホスティング上にないアプリなら、Freeプランでも、有料プランと同じくビルドでマイグレーションを実行できます。
{
"scripts": {
"build": "prisma migrate deploy && next build"
}
}drizzle-kit migrateを使います。Supabase CLIならsupabase db push --db-url "$DATABASE_URL"を使います。SQLをそのまま書くなら、リポジトリにすでにあるランナーを使います。データを見る
テーブルエディタです。 SQLコンソールではありません。
アプリの「データベース」ページでは、publicスキーマのテーブルを一覧でき、行を1ページずつ見られます。SQLコンソールは誰にも渡しません。
閲覧
データベースのすべてのテーブルを、1ページ25行で表示
アプリ自身のスキーマに加えて、データベースサービスがアプリ用に持っているスキーマも見られます。サービス側のスキーマは閲覧のみで、サインイン用のアカウントを保存しているテーブルも含まれます。パスワードとトークンは「表示」を押すまで隠れています。各列の型、主キー、行レベルセキュリティの有無もわかります。行数はデータベースの推定値で、画面にもその旨が表示されます。
書き込み
オンにするまで、書き込みはオフです
書き込みはアプリごとのスイッチで切り替えます。オンにすると、追加・変更・削除は1回の操作につき1行だけで、実行するたびに確認を求められます。その間にほかの場所で変更されていた行は、上書きせず、そのことを知らせます。
一切なし
スキーマの変更も、SQLも、エクスポートもできません
エディタでは、テーブルや列などを作成・変更・削除できません。行をまとめて取り出すこともできず、画面に1ページずつ表示されるだけです。
あなただけのもの
エディタがあるのは、エージェントではなく、あなたのダッシュボードです
どのエージェントも、行を読み書きできません。エディタはデータベース自身の管理者ロールで接続するため、行レベルセキュリティの制限を受けません。管理者ロールで接続していることも、画面に表示されます。
ずっとあなたのもの
データはあなたのもの。 離れるときも、持ち出せます。
あなた名義のSupabase組織へ移管できます
ご希望があれば、データベースをあなた名義のSupabase組織へ移管します。移管後も、データベースのリージョンは変わりません。進め方はあなたと相談して決め、確認を経てから行います。ボタン1つで終わるものではありません。
接続文字列は、必要なときに取り出せます
ローカルのツールを使うときや、一度だけデータを直したいときに、「データベースキーを表示」を押すと、接続文字列が作り直されます。作り直せるのは所有者であるあなただけで、作り直した記録も残ります。エージェントが受け取ることはありません。
削除は、あなたが決めたときだけ
データベースを削除できるのは所有者だけです。アプリ名を入力すると、データベースとそのスキーマ、保存されているデータがまとめて削除されます。この削除では、復元用のコピーは作成されません。
まだできていないこと
ブラウザ側の変数名を受け取るのはNext.js、Vite、Astroのアプリだけです。 ほかのプリセットは、サーバー側の変数名だけを受け取ります。PythonとGoのアプリは、マネージドデータベースにつないで、通しで動かしたことはまだありません。
パスワードの定期変更はありません。 ダッシュボードのどこからも、データベースのパスワードは変更できません。漏えいが疑われる場合は、サポートにご連絡ください。
このデータベースの動き方
Tofuはテーブルを自分で設計せず、SQLコンソールもありません。 アプリのテーブルは、アプリ自身のマイグレーションによって作られます。アプリの「データベース」ページにその旨が書かれている場合、Tofu自身が毎回の更新の前に、supabase/migrationsフォルダ内のファイルを適用します。それ以外の場合は、ビルドに組み込んだマイグレーションステップか、データベースキーを持つ手元のマシンで適用されます。SQLコンソールは方針としてあえて用意していません。アップロードされたソースは信頼できない入力で、運営側の認証情報が1つあれば、すべてのマネージドデータベースを操作できてしまうからです。
ローカルのデータはローカルのまま。 手元のマシンにしかない行は、マイグレーションが挿入しない限り反映されません。
Tofu独自のテーブルやポリシーはありません。 データベースは空の状態で始まります。テーブルも、アプリが頼りにする行レベルセキュリティのポリシーも、ご自身のマイグレーションが作ります。
使えるデータベースの数はプランで決まります。 この数は、すべてのアプリを合わせた合計です。データベースが含まれるプランと、その数は、料金ページに載っています。
作りたいアプリを言葉で伝えるか、エージェントが作ったアプリを持ち込むだけ。Tofuがオンラインにします。
どのコーディングエージェントでも使えます
© 2026 Tofu
trytofu.ai
英語版からの翻訳です。内容に違いがある場合は、英語の原文が優先されます。