Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Sandbox SDK

最終更新 Markdown で表示Agent セットアップ

安全で分離されたコード実行環境を構築する

Workers Paid プランで利用できます

Sandbox SDK を使うと、信頼できないコードを分離環境で安全に実行できます。Containers の上に構築され、コマンド実行、ファイル管理、バックグラウンドプロセスの実行、サービスの公開を、Workers アプリケーションから簡単な API で行えます。

サンドボックスは、コード実行が必要な AI エージェント、対話型の開発環境、データ分析プラットフォーム、CI/CD システム、エッジで安全なコード実行が必要なアプリケーションに向いています。各サンドボックスは、完全な Linux 環境を持つ独自の分離コンテナーで動き、性能を保ちながら強いセキュリティ境界を提供します。

Sandbox では、Python スクリプトの実行、Node.js アプリケーションの実行、データ分析、コードのコンパイル、複雑な計算ができます。TypeScript API は簡潔で、管理するインフラはありません。

import { getSandbox } from '@cloudflare/sandbox';

export { Sandbox } from '@cloudflare/sandbox';

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const sandbox = getSandbox(env.Sandbox, 'user-123');

		// Execute a command and get the result
		const result = await sandbox.exec('python --version');

		return Response.json({
			output: result.stdout,
			exitCode: result.exitCode,
			success: result.success
		});
	}
};
import { getSandbox } from '@cloudflare/sandbox';

export { Sandbox } from '@cloudflare/sandbox';

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const sandbox = getSandbox(env.Sandbox, 'user-123');

		// Create a Python execution context
		const ctx = await sandbox.createCodeContext({ language: 'python' });

		// Execute Python code with automatic result capture
		const result = await sandbox.runCode(`
import pandas as pd
data = {'product': ['A', 'B', 'C'], 'sales': [100, 200, 150]}
df = pd.DataFrame(data)
df['sales'].sum()  # Last expression is automatically returned
	`, { context: ctx });

			return Response.json({
				result: result.results?.[0]?.text,
				logs: result.logs
			});
		}
	};
import { getSandbox } from '@cloudflare/sandbox';

export { Sandbox } from '@cloudflare/sandbox';

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const sandbox = getSandbox(env.Sandbox, 'user-123');

		// Create a project structure
		await sandbox.mkdir('/workspace/project/src', { recursive: true });

		// Write files
		await sandbox.writeFile(
			'/workspace/project/package.json',
			JSON.stringify({ name: 'my-app', version: '1.0.0' })
		);

		// Read a file back
		const content = await sandbox.readFile('/workspace/project/package.json');

		return Response.json({ content });
	}
};
import { getSandbox } from '@cloudflare/sandbox';

export { Sandbox } from '@cloudflare/sandbox';

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const sandbox = getSandbox(env.Sandbox, 'user-123');

		// Watch for file changes in real-time
		const watcher = await sandbox.watch('/workspace/src', {
			include: ['*.js', '*.ts'],
			onEvent: (event) => {
				console.log(`${event.type}: ${event.path}`);
				if (event.type === 'modify') {
					// Trigger rebuild or hot reload
					console.log('Code changed, recompiling...');
				}
			},
			onError: (error) => {
				console.error('Watch error:', error);
			}
		});

		// Stop watching when done
		setTimeout(() => watcher.stop(), 60000);

		return Response.json({ message: 'File watcher started' });
	}
};
import { getSandbox } from '@cloudflare/sandbox';

export { Sandbox } from '@cloudflare/sandbox';

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const url = new URL(request.url);

		// Terminal WebSocket connection
		if (url.pathname === '/ws/terminal') {
			const sandbox = getSandbox(env.Sandbox, 'user-123');
			return sandbox.terminal(request, { cols: 80, rows: 24 });
		}

		return Response.json({ message: 'Terminal endpoint' });
	}
};

WebSocket でブラウザーターミナルをサンドボックスのシェルへ直接接続します。詳細: ブラウザーターミナル

import { getSandbox } from '@cloudflare/sandbox';

export { Sandbox } from '@cloudflare/sandbox';

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		// Connect to WebSocket services in sandbox
		if (request.headers.get('Upgrade')?.toLowerCase() === 'websocket') {
			const sandbox = getSandbox(env.Sandbox, 'user-123');
			return await sandbox.wsConnect(request, 8080);
		}

		return Response.json({ message: 'WebSocket endpoint' });
	}
};

サンドボックス内で動く WebSocket サーバーへ接続します。詳細: WebSocket 接続

始める

API リファレンス


機能

Sandbox アプリケーションをデプロイする

Worker をデプロイし、npm パッケージとコンテナーイメージを同じリリース系列に揃えます。

コマンドを安全に実行する

シェルコマンド、Python スクリプト、Node.js アプリケーションなどを、ストリーミング出力と自動タイムアウト処理付きで実行します。

ファイルとプロセスを管理する

サンドボックスのファイルシステムでファイルの読み書きと操作を行います。バックグラウンドプロセスの実行、出力の監視、長時間処理の管理ができます。

プレビュー URL でサービスを公開する

サンドボックス内で動く HTTP サービスを、自動生成されるプレビュー URL で公開します。対話型の開発環境とアプリケーションホスティングに向いています。

コードを直接実行する

チャート、テーブル、画像を含む豊富な出力で、Python と JavaScript のコードを実行します。実行間で状態を保持し、AI 生成コードと対話型ワークフローに使えます。

対話型ターミナルを構築する

WebSocket でサンドボックスのシェルへ直接つながる、ブラウザーベースのターミナル画面を作ります。共同作業ターミナル、対話型の開発環境、自動再接続付きのリアルタイムシェルアクセスを構築できます。

オブジェクトストレージで永続化する

S3 互換のオブジェクトストレージ(R2、S3、GCS など)をローカルファイルシステムとしてマウントします。標準のファイル操作でバケットへアクセスし、データはサンドボックスのライフサイクルをまたいで残ります。本番デプロイが必要です。

ファイルのリアルタイム変更を監視する

ネイティブのファイルシステムイベントで、ファイルとディレクトリの変更を監視します。ホットリロード開発サーバー、ビルド自動化、設定監視ツールの構築に向いています。

送信トラフィックを扱う

サンドボックスからの送信 HTTP を遮断、許可、傍受します。送信ハンドラーで認可ヘッダーを注入し、認証情報は Worker に置いたままにできます。


ユースケース

Sandbox で強力なアプリケーションを構築します。

AI によるコード実行

大規模言語モデルが生成したコードを、安全かつ確実に実行します。Workers AI の GPT-OSS などのモデルとのネイティブ統合により、サンドボックス実行付きの function calling が使えます。信頼できないコードを動かす AI エージェント、コードアシスタント、自律システムに向いています。

データ分析とノートブック

pandas、NumPy、Matplotlib を使った対話型のデータ分析環境を作ります。チャート、テーブル、可視化を、豊富な出力の自動整形付きで生成します。

対話型の開発環境

完全な Linux 環境とプレビュー URL を使い、クラウド IDE、コーディングプレイグラウンド、共同開発ツールを構築します。

CI/CD とビルドシステム

分離環境でテスト、コンパイル、ビルドパイプラインを実行します。並列実行とストリーミングログに対応します。


関連プロダクト

Containers

Sandbox を動かすサーバーレスのコンテナーランタイムです。コンテナ化した任意のワークロードをエッジで実行できます。

Workers AI

ネットワーク上で機械学習モデルと LLM を実行します。Sandbox と組み合わせて、安全な AI コード実行ワークフローを作れます。

Durable Objects

強い一貫性を持つ永続環境を Sandbox が維持するための、ステートフルな調整レイヤーです。


その他のリソース

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

エージェント向けに Cloudflare Skills を入れます(Agent setup)。現行の安定版パッケージを使っているあいだは、このサイトの本編ドキュメントと sandbox-stable を使います。@cloudflare/sandbox@next には sandbox-next を使います(新規プロジェクトに推奨)。既存アプリを移植する準備ができたら、sandbox-migrate-to-next を使います。

チュートリアル

AI によるコード実行、データ分析、対話型環境を含む、一連の例を確認します。

How-to ガイド

Sandbox SDK で特定の問題を解き、機能を実装する方法を学びます。

1.0 プレビュー

@cloudflare/sandbox@next をインストールし、Sandbox SDK 1.0 のリリースに備えます。

概念

Sandbox SDK の主要な概念とアーキテクチャを学びます。

設定

Sandbox SDK の設定オプションを学びます。

GitHub リポジトリ

SDK のソースコードを確認し、問題を報告し、プロジェクトへ貢献します。

料金

基盤の Containers プラットフォームに基づく Sandbox の料金を理解します。

制限

リソース制限、クォータ、その範囲で作業するためのベストプラクティスを学びます。

Discord コミュニティ

Discord でコミュニティとつながります。質問する、作っているものを共有する、ほかの開発者から助けを得る、ができます。

役に立ちましたか?