mcpField
S
sandbox-sdk

sandbox-sdk

github.com/cloudflareクラウド・DevOps3.2k32.9k 回インストール今日更新
リポジトリ

sandbox-sdk について

Workers 上で Cloudflare Sandbox SDK を使い、分離されたコード実行環境を構築・運用するためのスキルです。設定要件に加え、実行、ファイル操作、ポート公開の方法を案内します。

主な機能

  1. 01インストールと設定の案内
  2. 02シェルコマンドとコード実行のパターン
  3. 03ファイル操作
  4. 04HTTP サービスのポート公開
  5. 05ライフサイクルとクリーンアップの案内
  6. 06ドキュメントとサンプルへの参照

活用シーン

  1. 01Sandbox SDK プロジェクトのセットアップ
  2. 02スクリプトや LLM 生成コードの実行
  3. 03分離環境でのビルドとテスト
  4. 04サンドボックス内サービスの公開

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cloudflare/skills --skill sandbox-sdk

インストール後、Claude Code で/sandbox-sdkを入力して読み込まれたか確認します。

同梱ファイルreferences/api-quick-ref.mdreferences/examples.md

詳細

Cloudflare Sandbox SDK

Cloudflare Workers 上で、安全に分離されたコード実行環境を構築します。

最初に:インストールを確認する

npm install @cloudflare/sandbox
docker info  # Must succeed - Docker required for local dev

情報の取得元

Sandbox SDK に関する知識は古くなっている可能性があります。Sandbox SDK に関する作業では、事前学習よりも情報の取得を優先してください。

リソースURL
ドキュメントhttps://developers.cloudflare.com/sandbox/
API リファレンスhttps://developers.cloudflare.com/sandbox/api/
サンプルhttps://github.com/cloudflare/sandbox-sdk/tree/main/examples
はじめにhttps://developers.cloudflare.com/sandbox/get-started/

機能を実装する際は、まず該当するドキュメントページまたはサンプルを取得してください。

必須の設定

wrangler.jsonc(正確な内容です。構造を変更しないでください):

{
  "containers": [{
    "class_name": "Sandbox",
    "image": "./Dockerfile",
    "instance_type": "lite",
    "max_instances": 1
  }],
  "durable_objects": {
    "bindings": [{ "class_name": "Sandbox", "name": "Sandbox" }]
  },
  "migrations": [{ "new_sqlite_classes": ["Sandbox"], "tag": "v1" }]
}

Worker エントリーポイント - Sandbox クラスを再エクスポートする必要があります:

import { getSandbox } from '@cloudflare/sandbox';
export { Sandbox } from '@cloudflare/sandbox';  // Required export

クイックリファレンス

タスクメソッド
サンドボックスを取得getSandbox(env.Sandbox, 'user-123')
コマンドを実行await sandbox.exec('python script.py')
コードを実行(インタープリター)await sandbox.runCode(code, { language: 'python' })
ファイルを書き込むawait sandbox.writeFile('/workspace/app.py', content)
ファイルを読み込むawait sandbox.readFile('/workspace/app.py')
ディレクトリを作成await sandbox.mkdir('/workspace/src', { recursive: true })
ファイルを一覧表示await sandbox.listFiles('/workspace')
ポートを公開await sandbox.exposePort(8080)
破棄await sandbox.destroy()

主なパターン

コマンドを実行する
const sandbox = getSandbox(env.Sandbox, 'user-123');
const result = await sandbox.exec('python --version');
// result: { stdout, stderr, exitCode, success }
コードインタープリター(AI に推奨)

豊富な出力を得るには、LLM が生成したコードの実行に runCode() を使用します:

const ctx = await sandbox.createCodeContext({ language: 'python' });

await sandbox.runCode('import pandas as pd; data = [1,2,3]', { context: ctx });
const result = await sandbox.runCode('sum(data)', { context: ctx });
// result.results[0].text = "6"

言語:python、javascript、typescript

状態はコンテキスト内で保持されます。本番環境では明示的にコンテキストを作成してください。

ファイル操作
await sandbox.mkdir('/workspace/project', { recursive: true });
await sandbox.writeFile('/workspace/project/main.py', code);
const file = await sandbox.readFile('/workspace/project/main.py');
const files = await sandbox.listFiles('/workspace/project');

用途に応じた使い分け

必要な処理使用するもの理由
シェルコマンド、スクリプトexec()直接制御、ストリーミング
LLM が生成したコードrunCode()豊富な出力、状態の保持
ビルド/テストパイプラインexec()終了コード、標準エラーの取得
データ分析runCode()グラフ、テーブル、pandas

Dockerfile の拡張

ベースイメージ(docker.io/cloudflare/sandbox:0.7.0)には、Python 3.11、Node.js 20、および一般的なツールが含まれています。

Dockerfile を拡張して依存関係を追加します:

FROM docker.io/cloudflare/sandbox:0.7.0

# Python packages
RUN pip install requests beautifulsoup4

# Node packages (global)
RUN npm install -g typescript

# System packages
RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*

EXPOSE 8080  # Required for local dev port exposure

イメージは軽量に保ってください。コールドスタート時間に影響します。

プレビュー URL(ポートの公開)

サンドボックス内で実行されている HTTP サービスを公開します:

const { url } = await sandbox.exposePort(8080);
// Returns preview URL for the service

本番環境での要件:プレビュー URL には、ワイルドカード DNS(*.yourdomain.com)を設定したカスタムドメインが必要です。.workers.dev ドメインでは、プレビュー URL のサブドメインはサポートされていません。

こちらを参照してください:https://developers.cloudflare.com/sandbox/guides/expose-services/

OpenAI Agents SDK との統合

SDK には、@cloudflare/sandbox/openai で OpenAI Agents 用のヘルパーが用意されています:

import { Shell, Editor } from '@cloudflare/sandbox/openai';

統合パターンの全体像については、examples/openai-agents を参照してください。

サンドボックスのライフサイクル

  • getSandbox() はすぐに戻ります。コンテナは最初の操作時に遅延起動します
  • コンテナは非アクティブな状態が 10 分続くとスリープします(sleepAfter で設定可能です)
  • リソースをすぐに解放するには、destroy() を使用します
  • 同じ sandboxId には常に同じサンドボックスインスタンスが返されます

アンチパターン

  • 内部クライアント(CommandClient、FileClient)を使用しないでください - sandbox.* メソッドを使用してください
  • Sandbox のエクスポートを省略しないでください - export { Sandbox } がないと Worker をデプロイできません
  • 複数ユーザー向けにサンドボックス ID をハードコードしないでください - ユーザーまたはセッションの識別子を使用してください
  • クリーンアップを忘れないでください - 一時的なサンドボックスでは destroy() を呼び出してください

詳細なリファレンス

コメント