- AIエージェントのコード実行向け軽量サンドボックスで、コンテナ比 100倍高速な起動速度 と 10〜100倍高いメモリ効率を提供
- V8 JavaScriptエンジンの isolate技術 を基盤とし、数ミリ秒で起動し数MBしか使用しないため、リクエストごとに新しいサンドボックスを生成・破棄する運用が可能
- エージェントがツール呼び出しの代わりに TypeScriptコードを直接記述・実行 する Code Mode 方式により、トークン使用量を最大81%削減
- HTTPフィルタリング、クレデンシャルインジェクション、仮想ファイルシステムなどのセキュリティ・ユーティリティライブラリも提供し、エージェント開発エコシステムを構築
- コンテナベースのサンドボックスが抱えるコスト・遅延・拡張性の限界を超え、コンシューマー規模のエージェントサービス を可能にするインフラ転換
背景: エージェントのコード実行におけるセキュリティ問題
- エージェント(またはMCPサーバー)がAIによってその場で生成されたコードを実行するには、そのコードが安全な環境で動作する必要がある
- アプリ内で
eval() により直接実行すると、悪意あるユーザーが プロンプトインジェクション を通じて脆弱性を埋め込める
- アプリケーションと外部世界から 隔離されたサンドボックス が必要であり、コードがアクセスすべき特定の機能だけを許可しなければならない
既存のコンテナ方式の限界
- 現在、業界の大半は Linuxベースの コンテナ をサンドボックスとして利用している
- コンテナは起動に数百ミリ秒、実行には 数百MBのメモリ を要する
- 遅延を防ぐにはウォーム状態の維持が必要で、既存コンテナを複数の作業で再利用するとセキュリティが低下する
- すべてのエンドユーザーがエージェントを持ち、各エージェントがコードを書く コンシューマー規模 では、コンテナでは十分でない
Dynamic Worker Loader: 軽量サンドボックス
- Cloudflare Workerが ランタイム時にコードを指定して、新しいWorkerを自身のサンドボックス内で即座に生成 できるAPI
- 昨年9月の Code Mode 投稿で実験的機能として紹介され、現在は オープンベータとしてすべての有料Workersユーザーに提供 されている
- Worker生成時には
compatibilityDate、mainModule、modules でコードを指定し、env でRPCスタブを渡し、globalOutbound でインターネットアクセスを遮断またはインターセプトできる
100倍高速
- Dynamic Workers は、Cloudflare Workersプラットフォームが8年間使ってきた同じサンドボックス機構である V8 isolate を基盤としている
- isolate は Google Chrome で使われているものと同じ V8 JavaScript実行エンジン のインスタンス
- 起動は 数ミリ秒、メモリ使用量は 数MB で、コンテナ比で約100倍高速、10〜100倍メモリ効率が高い
- すべてのユーザーリクエストごとに新しい isolate を生成し、コード片を1つ実行した後に破棄する運用が可能
無制限の拡張性
- 多くのコンテナベースのサンドボックス事業者は、グローバル同時サンドボックス数 と生成速度に制限を設けている
- Dynamic Worker Loader はプラットフォームを支えてきたのと同じ技術のAPIであるため、こうした制限がない
- 秒間 100万件のリクエスト を処理しつつ、各リクエストごとに別個の Dynamic Worker サンドボックスをロードして同時実行できる
ゼロレイテンシ
- 使い捨ての Dynamic Workers は通常、生成したWorkerと 同じマシン、同じスレッド 上で実行される
- ウォーム済みサンドボックスを探すために世界中と通信する必要がなく、リクエストが到着した場所ですぐに実行される
- Cloudflare の 数百のグローバル拠点 すべてでサポートされる
JavaScript専用の実行環境
- コンテナと比べた唯一の制約は、エージェントが JavaScriptを書く 必要がある点
- Workers は技術的には Python と WebAssembly もサポートするが、エージェントがその場で生成する小さなコード片には JavaScript のほうがはるかに高速にロード・実行できる
- LLM は主要なあらゆる言語に習熟しており、JavaScript の 学習データが膨大 である
- JavaScript はWebの特性上、サンドボックス化のために設計された言語 でもある
TypeScriptで定義するツールAPI
- MCP はフラットなツール呼び出しスキーマしか定義せず、OpenAPI はREST APIを表現できるが、スキーマ自体も呼び出しコードも冗長になりがち
- JavaScript に公開されるAPIには TypeScript が単一の最適解
- TypeScript インターフェースは、同じ OpenAPI 仕様に比べて はるかに少ないトークン でAPIを正確に記述できる
- Workers Runtime がサンドボックスとホストコードの間に Cap'n Web RPC ブリッジを自動設定するため、エージェントはローカルライブラリのようにAPIを呼び出せる
HTTPフィルタリングとクレデンシャルインジェクション
globalOutbound オプションで、すべてのHTTPリクエストに対する コールバックを登録 し、リクエストの検査・書き換え・認証キー注入・遮断などを行える
- クレデンシャルインジェクション(トークンインジェクション): エージェントが認証を要するサービスにHTTPリクエストを送る際、送信リクエストにクレデンシャルを追加し、エージェント自身には秘密のクレデンシャルを知らせないようにする
- よく知られたAPIがエージェントの学習データに含まれている場合や、REST APIベースのライブラリをサンドボックス内で実行する場合に有用
- ただし互換性要件がないなら、TypeScript RPCインターフェースのほうがHTTPより優れる: トークン消費が少なく、呼び出しコードがより簡潔で、API表面を正確に絞り込みやすい
実証済みのセキュリティアーキテクチャ
- isolate ベースのサンドボックスはハードウェア仮想マシンより 複雑な攻撃面 を持ち、V8 のセキュリティバグは一般的なハイパーバイザーより頻繁に発生する
- 約10年にわたり isolate ベースのプラットフォームを保護してきた経験を持つ
- V8 セキュリティパッチを Chrome より速く数時間以内に本番展開 している
- カスタムの 第2層サンドボックス と、リスク評価に基づく動的テナント隔離(cordoning)を適用
- MPK のようなハードウェア機能を活用して V8 サンドボックスを拡張
- TU Graz と協力し、Spectre防御 など新しい防御手法を開発
- 悪性パターンの自動スキャンと遮断/追加サンドボックス化システムを運用
ヘルパーライブラリ
Code Mode (@cloudflare/codemode)
- モデルが生成したコードを Dynamic Workers でAIツールに対して実行することを簡素化するライブラリ
- 中核は
DynamicWorkerExecutor() で、コード正規化により一般的なフォーマットエラーを処理し、globalOutbound fetcher に直接アクセスできる
codeMcpServer({ server, executor }) は既存の MCP Server をラップし、ツール表面を単一の code() ツールに置き換える
openApiMcpServer({ spec, executor, request }) は OpenAPI 仕様と実行器を受け取り、search() と execute() ツールを備えた 完全なMCP Serverを自動構築 する
バンドリング (@cloudflare/worker-bundler)
- Dynamic Workers が期待する 事前バンドル済みモジュール を生成
- ソースファイルと
package.json を渡すと、npm依存関係を解決し、esbuild でバンドルし、Worker Loader が期待するモジュールマップを返す
createApp を通じて、サーバーWorker、クライアントJavaScript、静的アセットをまとめてバンドルする フルスタックアプリ をサポート
- コンテンツタイプ、ETag、SPAルーティングを処理する内蔵アセット配信を含む
ファイル操作 (@cloudflare/shell)
- Dynamic Worker 内でエージェントに 仮想ファイルシステム を提供
state オブジェクトの型付きメソッドにより、read、write、search、replace、diff、glob、JSONクエリ/更新、アーカイブなどを実行
- ストレージは 永続的なWorkspace(SQLite + R2)にバックアップされ、実行をまたいでファイルを保持
searchFiles、replaceInFiles、planEdits のような大規模処理により RPC往復を最小化 — 個別ファイルのループではなく1回の呼び出しで済む
- バッチ書き込みはデフォルトで トランザクショナル: 1つでも失敗すると以前の書き込みを自動ロールバック
- 事前ビルド済みの TypeScript 型宣言とシステムプロンプトテンプレートを提供
活用事例
Code Mode の活用
- エージェントが逐次的なツール呼び出しの代わりに TypeScript関数を1つ書いて 複数のAPI呼び出しを連結し、Dynamic Worker で実行した後に最終結果だけを返す
- 中間ステップではなく出力だけがコンテキストウィンドウに入るため、レイテンシとトークン使用量の両方が減少 する
- Cloudflare MCP サーバーはこの方式で構築されており、Cloudflare API 全体を わずか2つのツール(search, execute) と 1,000トークン未満で公開している
カスタム自動化の構築
- Zite は、ユーザーがチャットインターフェースで操作するアプリプラットフォームを構築中
- LLM が背後で TypeScript を書き、CRUDアプリ生成、Stripe・Airtable・Google Calendar 連携、バックエンドロジック実行を行う
- 各自動化はそれぞれ専用の Dynamic Worker で実行され、そのエンドポイントに必要な 特定のサービスとライブラリにのみアクセス できる
- Zite CTO の Antony Toron: 「即時性があり、分離され、安全な実行レイヤー」として、ベンチマークしたすべてのプラットフォームの中で 速度とライブラリサポートが最高 であり、現在は毎日数百万件の実行リクエストを処理している
AI生成アプリケーションの実行
- AIで完全なアプリケーションを生成するプラットフォームの構築に活用
- 各アプリを オンデマンドで生成 し、再び呼び出されるまでコールドストレージに保管
- 高速な起動時間により、活発な開発中でも 変更内容のプレビュー が容易
- 生成されたコードのネットワークリクエストを遮断またはインターセプトすることで、AI生成アプリの安全な実行 を保証
価格体系
- 動的にロードされた Workers は、1日あたりのユニークWorkerロードごとに $0.002 を課金(通常の Workers のCPU時間および呼び出し料金は別途)
- AI生成の「Code Mode」ユースケースでは、すべての Worker が 使い捨て のため、ロードごとに $0.002 となり、コード生成の推論コストに比べれば通常は無視できる水準
- ベータ期間中は $0.002 の料金を免除
まだコメントはありません。