機能 · データベース

本物のデータベース。もうつながっています。

TofuのマネージドPostgresは、データベースサービスのアカウントを作らずに使えます。有料プランなら、マネージドデータベースの枠は、アプリごとではなく、すべてのアプリでまとめて使えます。デプロイ時にデータベースを1⁠つ選ぶと、Tofuが1⁠回の操作で作成と接続を済ませ、そのあとで初めてビルドします。ビルドで実行するマイグレーションは、最初のビルドから新しいデータベースに適用されます。Freeプランでも、アプリにマネージドデータベースが1⁠つ付きます。サーバーで動くアプリなら最初のデプロイ時に、それ以外のアプリなら公開後に使えるようになります。アプリがオンラインの間は保持されます。

ドキュメントを読むエージェントのセットアップ

エージェントが呼び出すツール

  • deploy
  • databaseCreate
  • databaseStatus
  • databaseReconcile
claude · ~/franks-kitchen例

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⁠つ使います。そのため、何もしなければ作成されず、あなたがそのアプリのために選んだときだけ作成されます。

  1. データベースを作成

    アプリ専用のPostgresデータベースを作成します。リージョンはAmericas、EMEA、またはAPACから選べます。
  2. 正常になるまで待つ

    最大2⁠分待ちます。それまでに接続が完了しなければ、ビルドには進みません。結果でデータベースの状態を確認できます。
  3. 接続設定を書き込む

    アプリのホスティングプロジェクトに、接続設定を書き込みます。書き込んだ値は、あとから読み出せません。データベースの公開証明書も一緒に書き込みます。初回のデプロイでは、この時点でTofuがそのプロジェクトを作成します。
  4. データベースができてからビルド

    ここで初めてビルドします。ビルドでマイグレーションを実行するなら、そのマイグレーションは公開前の最初のビルドで、新しいデータベースに適用されます。

「データベース」ページで以前作成したデータベースも、次のデプロイで同じように接続されます。接続が済んでから、そのデプロイのビルドが行われます。

アプリが受け取るもの

接続は設定済み。 値は表示されません。

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_KEYNext.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プランでも、有料プランと同じくビルドでマイグレーションを実行できます。

package.jsonprisma
{
  "scripts": {
    "build": "prisma migrate deploy && next build"
  }
}
Drizzleなら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独自のテーブルやポリシーはありません。 データベースは空の状態で始まります。テーブルも、アプリが頼りにする行レベルセキュリティのポリシーも、ご自身のマイグレーションが作ります。

  • 使えるデータベースの数はプランで決まります。 この数は、すべてのアプリを合わせた合計です。データベースが含まれるプランと、その数は、料金ページに載っています。

プロンプトを1⁠つ貼る。10⁠分でオンライン。

アプリも、データベースも、ドメインも、サインインも。いつものエージェントを使えば、約10⁠分でそろいます。

無料で始める