機能・ホスティングとデプロイ

公開中。元に戻せる。

アプリごとに専用のホスティングプロジェクトとtrytofu.appのアドレスが付きます。新しいバージョンは、ビルドの前にチェックされ、実際のリクエストに応答してから初めて公開されます。公開したバージョンは履歴に残り、ダッシュボードからでも、エージェントに頼んでも元に戻せます。

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

  • deploy
  • status
  • listDeployments
  • getBuildLogs
  • getRuntimeLogs
  • rollback
入口は3⁠つ

エージェントから始める。GitHubからでも。

どちらの方法でも、チェックと公開は同じ流れです。更新で置き換わるのは、ソースコードだけです。設定、アドレス、履歴はそのまま残ります。

  1. コーディングエージェント

    おすすめです。セットアッププロンプトを、どのコーディングエージェントにも貼り付けてください。エージェントがTofuのクライアントを検証してからインストールし、あなたがブラウザで短いコードを確認して承認します。あとは、あなたが頼んだときにだけ、会話の中でアップロード、チェック、デプロイまで進みます。更新しても、置き換わるのは同じプロジェクトのソースコードだけです。設定、ウェブアドレス、履歴はそのまま残ります。

    エージェントとコマンドライン

    ❯ setup prompt pasted · code approved

  2. GitHubブランチ

    読み取り専用の権限で、1⁠つのブランチを特定のコミットに固定して取り込みます。自動更新はどのプランでもオンにでき、オンにすると、プッシュのたびにそのブランチの最新コミットが同じ安全チェックを経てデプロイされます。

    main · push → deploy

  3. コマンドライン

    単体のクライアントを使えば、ターミナルやクラウドのサンドボックスからも同じ操作ができます。必要なのは、Node.js 22以降と、ブラウザでの承認1⁠回だけです。キーを貼り付ける必要はありません。

    $ node tofu-agent.mjs login

ビルド前

ビルドの前にチェック。拒否されたら、何も送信しない。

アップロードするファイルは、まず安全チェックを受けます。ビルドの直前にも、中身そのものに同じチェックをかけ直します。ほかの人に害が及ぶおそれのある問題(既知のマルウェアのパターン、フィッシング、漏えいしたキーなど)が見つかれば、そこで止まります。ホスティングサービスには何も届かず、公開中のバージョンはそのまま動き続けます。自分のアプリだけに影響する設定(たとえば、誰でも編集できるテーブル)は、警告が出るだけで、アプリは作ったとおりに公開されます。

安全チェックが見るもの、見ないもの

公開

「Ready」と表示されたビルドは、まだ公開中のアプリではない。

Tofuがアプリのアドレスを切り替えるのは、新しいバージョンがデプロイ専用のアドレスへのリクエストに応答してからです。

  1. チェック

    アップロードされたファイルをチェックします。公開を止める問題が見つかれば、ここで止まり、何も送信されません。
  2. ビルド

    ホスティングサービスがアプリ専用のホスティングプロジェクトでビルドします。その間も、公開中のバージョンは動き続けます。
  3. 応答確認

    Tofuが新しいデプロイ専用のアドレスにリクエストを送ります。判定に使うのは、応答の有無だけです。サインイン画面が返ってきた場合は、壊れているのではなく、保護されていると判断します。
  4. 公開

    ここまで進んで初めて、trytofu.appのアドレスが切り替わります。途中で失敗した場合は、前のバージョンがそのまま動き続けます。

エージェントが受け取る結果

deployは、結果が確定するまで一定時間だけ待ちます。続きはstatusで確認できます。応答は機械がそのまま読める形式なので、エージェントがアドレスを開いて推測する必要はありません。

publiclyReachable
匿名のリクエストに応答できたときだけtrueになります。「訪問者が今すぐ開けるか」への答えです。
verification.access
public(応答あり)、protection(匿名のアクセスは拒否。アクセス制限であり、ビルドの失敗ではない)、unreachable(404を返すか応答しないアドレスには、最大16⁠秒まで問い合わせ直してから判定)のいずれかです。
serving
このデプロイがアプリのアドレスへのリクエストに応答しているかどうかです。ビルドが「Ready」でも、応答していなければ公開されていません。
tofu · deployexample · excerpt
{
  "status": "ready",
  "managedUrl": "https://franks-kitchen-3f9a1c07b2e4.trytofu.app/",
  "serving": true,
  "publiclyReachable": true,
  "verification": {
    "access": "public",
    "httpStatus": 200
  }
}
履歴・ログ・復元

どの試行も、記録に残る。正常に動いていたバージョンなら、1クリックで元に戻せる。

  • listDeployments

    履歴

    デプロイの試行はすべて、状態付きで一覧でき、どれが公開中かもわかります。公開中なのは、実際に公開された最後のバージョンです。最新のデプロイとは限りません。

  • getBuildLogs · getRuntimeLogs

    ログ

    プロバイダーが出力したビルドログと実行中のログを確認できます。認証情報に見える行は、できる範囲で伏せています。

  • rollback

    復元

    ビルドし直さずに、アドレスを以前の正常なデプロイへ切り替えます。データは元に戻りません。切り替える前に、エージェントがあなたに確認します。

更新に失敗したとき

ビルドに失敗しても、公開中のバージョンは変わりません。エージェントには、直すために必要な情報が届きます。

新しいバージョンは、Tofuからのリクエストに応答できるようになってから公開されます。ビルドに失敗しても、公開中のバージョンはそのまま動き続けます。Tofuは、失敗の内容、ログ、次の手順をコーディングエージェントに渡します。

  1. 公開中のバージョンはそのまま

    ビルドに失敗したバージョンや、応答できなかったバージョンは、決して公開されません。アプリは、ひとつ前のバージョンで動き続けます。
  2. エージェントへの説明

    失敗の内容、シークレットの値を除いたログの要約、次の手順が入っています。どのプランでも同じ内容です。
  3. 直して、もう一度デプロイ

    エージェントがコードを直して、もう一度デプロイします。そのときも、同じ安全チェックと応答の確認を通ります。

デプロイに失敗したときは、エージェントに修正を頼んでください。エージェントはrepairContextを読み、失敗したデプロイ、いま公開中のバージョン、次にすべきことを把握します。Tofuが自分でコードやGitHubリポジトリに書き込むことはありません。

環境変数

名前はTofuで管理。値は書き込み専用。

変数名と適用範囲はダッシュボードにあり、値はプロバイダーに直接保存されます。シークレットはプロバイダーに書き込み専用で保管され、ダッシュボードからも、Tofuからも、エージェントからも読み出せません。

.envファイルを貼り付けると、すべての値がシークレットとして扱われます。VERCEL_*という名前は予約済みで、使えません。Tofuがマネージドデータベース用に書き込む値は、Tofuの管理下にあり、読み取り専用です。変更を保存しても再デプロイは行われません。次のデプロイで反映されます。

どのプランでも使えるGitHub連携

プッシュするだけでデプロイ。同じ安全チェックを通ります。

ブランチを取り込み、フレームワークを確認して、自動更新をオンにします。プッシュするたびに、そのブランチの最新コミットがデプロイされます。安全チェックも公開の流れも、ほかの方法と同じです。更新に失敗しても、それまで正常に動いていたバージョンが公開されたままになります。

Tofuは、有効期限の短い読み取り専用トークンでリポジトリを読むだけで、書き込むことはありません。手動でアップロードすると自動更新は一時停止するので、アップロードした内容が上書きされることはありません。エージェントは自動更新をオフにできますが、オンに戻すには、ご自身でブラウザからGitHubの承認が必要です。

Tofuがホストするもの

アクセスがあるときだけ動くウェブアプリ。いつもの技術スタックのまま。

どれもリクエストに応答し、リクエストがない間は0まで縮小します。どのプランでも、ページとその裏で動くコードをホスティングできます。

サイトとウェブフレームワーク
  • Next.js
  • Vite
  • Astro
  • SvelteKit
  • Nuxt
  • React Router
  • Gatsby
  • Static HTML

プロバイダがフレームワーク標準のビルドを実行します。ビルド済みの静的サイトは、そのまま公開します。

Python
  • FastAPI
  • Flask
  • Django
  • Python

アプリのマニフェストからビルドし、HTTPプロセスとして起動します。アプリのアドレスへのリクエストに応答します。

Go
  • Go

アプリのgo.modからビルドし、環境変数PORTを読み取るHTTPプロセスとして起動します。

JavaScriptサーバー
  • Express
  • Hono
  • NestJS
  • Node.js server

プロバイダがファイル名をもとにエントリーポイントを1⁠つ見つけ、HTTPプロセスとして起動します。サーバーはルート(/)へのリクエストに応答します。

コンテナ
  • Dockerfile (container)

プロバイダは、アプリのコンテナファイルが定義するイメージをビルドし、サービスとして動かします。

近日対応

  • プレビューデプロイ。 GitHubからの更新の対象は、プロジェクトごとに1⁠つのブランチと1⁠つのアプリのルートフォルダだけです。プルリクエストごとのプレビューも、タグによるデプロイもありません。デプロイされるのは、すべてのコミットではなく、そのブランチの最新コミットだけです。

  • コンテナアプリのランタイムログ。 これまでログは読めませんでした。読もうとすると、空のログが表示されるのではなく、「利用できない」と表示されます。

まだできていないこと

  • 上限を超える完成したサイトには、有料プランが必要です。 Freeプランで公開できるのは、完成したページをそのまま送ったサイトで、500ファイル、50 MBまでです。

Tofuがしないこと

  • ずっと動かしておくもの。 バックグラウンドで動くワーカー、キューを処理するプログラム、常時稼働のスケジューラー、HTTP以外のサービスは、Tofuでは動かせません。どのプランでも変わりません。

  • 自分のcronスケジュール。 アプリのvercel.jsonに書いたcronは、Tofuでは動きません。定期的に動かしたい場合は、アプリを呼び出すサービス側でスケジュールを設定します。

  • 稼働率の保証は、どのプランにも含まれていません。 Tofuは、アプリをいつでも使える状態に保つよう努めています。稼働率の保証(SLA)は、ご要望に応じてご用意します。必要な内容をお知らせください。

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

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

無料で始める