@next では、コードインタープリターはオプトインの拡張機能であり、素の Sandbox 上のメソッドではありません。メソッド名は安定版のインタープリターと同じです。一度取り付けると、sandbox.interpreter.* を呼び出します。runCode は Worker と Durable Object の境界を越えて、プレーンなシリアライズ可能なデータを返します。
シグネチャと型は Interpreter API を参照してください。
import { Sandbox as BaseSandbox } from "@cloudflare/sandbox";
import { withInterpreter } from "@cloudflare/sandbox/interpreter";
export class Sandbox extends BaseSandbox {
interpreter = withInterpreter(this);
}import { Sandbox as BaseSandbox } from "@cloudflare/sandbox";
import { withInterpreter } from "@cloudflare/sandbox/interpreter";
export class Sandbox extends BaseSandbox<Env> {
interpreter = withInterpreter(this);
}このクラスを Worker からエクスポートします。サイドカーは初回利用時にプロビジョニングされます。
| 言語 | イメージ |
|---|---|
| JavaScript / TypeScript | デフォルトのサンドボックスイメージ(または JS ランタイム付きの任意のバリアント) |
| Python | -python イメージバリアント |
プレビューの Worker パッケージとコンテナイメージは、同じ系統を使います。Dockerfile を参照してください。
コンテキスト は、削除するかコンテナを置き換えるまで、変数とインポートを保持します。
const sandbox = getSandbox(env.Sandbox, "user-123");
const context = await sandbox.interpreter.createCodeContext({
language: "python",
cwd: "/workspace",
});
await sandbox.interpreter.runCode("x = 2", { context });
const result = await sandbox.interpreter.runCode("x * 21", { context });
if (result.error) {
console.error(result.error.name, result.error.message);
} else {
console.log(result.results, result.logs.stdout);
}const sandbox = getSandbox(env.Sandbox, "user-123");
const context = await sandbox.interpreter.createCodeContext({
language: "python",
cwd: "/workspace",
});
await sandbox.interpreter.runCode("x = 2", { context });
const result = await sandbox.interpreter.runCode("x * 21", { context });
if (result.error) {
console.error(result.error.name, result.error.message);
} else {
console.log(result.results, result.logs.stdout);
}context を省略すると、runCode はその言語のデフォルトコンテキストを使います(デフォルト言語は python)。使える言語は python、javascript、typescript です。
結果のフィールド、ストリーミング(runCodeStream)、コンテキストの一覧・削除メソッドは、Interpreter API を参照してください。
コンテキストは 現在のコンテナ にだけ存在します。停止または置き換えのあとは、新しく作成してください。サンドボックスのライフサイクル を参照してください。
- Interpreter API
- 拡張機能
- 移行
- 安定版ガイド: コードインタープリターを使う