Skip to content

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

コードインタープリター

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

Python、JavaScript、TypeScript のコードを実行できます。データ可視化、表、豊富な出力形式に対応しています。コンテキストは、実行をまたいで状態(変数、インポート、関数)を保持します。

メソッド

createCodeContext()

コード実行用の永続コンテキストを作成します。

const context = await sandbox.createCodeContext(options?: CreateContextOptions): Promise<CodeContext>

パラメーター:

  • options(任意):
    • language - "python" | "javascript" | "typescript"(デフォルト: "python"
    • cwd - 作業ディレクトリ(デフォルト: "/workspace"
    • envVars - 環境変数
    • timeout - リクエストのタイムアウト(ミリ秒、デフォルト: 30000)

戻り値: idlanguagecwdcreatedAtlastUsed を持つ Promise<CodeContext>

const ctx = await sandbox.createCodeContext({
	language: "python",
	envVars: { API_KEY: env.API_KEY },
});
const ctx = await sandbox.createCodeContext({
  language: 'python',
  envVars: { API_KEY: env.API_KEY }
});

runCode()

コンテキストでコードを実行し、完全な結果を返します。

const result = await sandbox.runCode(code: string, options?: RunCodeOptions): Promise<ExecutionResult>

パラメーター:

  • code - 実行するコード(必須)
  • options(任意):
    • context - 実行先のコンテキスト(推奨 — 下記参照)
    • language - "python" | "javascript" | "typescript"(デフォルト: "python"
    • timeout - 実行タイムアウト(ミリ秒、デフォルト: 60000)
    • onStdoutonStderronResultonError - ストリーミング用コールバック

戻り値: 次を含む Promise<ExecutionResult>:

  • code - 実行したコード
  • logs - stdoutstderr の配列
  • results - リッチ出力の配列(リッチな出力形式 を参照)
  • error - 実行エラー(ある場合)
  • executionCount - 実行回数カウンター

推奨: コンテキストを明示的に作成する:

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

await sandbox.runCode("import math; radius = 5", { context: ctx });
const result = await sandbox.runCode("math.pi * radius ** 2", { context: ctx });

console.log(result.results[0].text); // "78.53981633974483"
const ctx = await sandbox.createCodeContext({ language: 'python' });

await sandbox.runCode('import math; radius = 5', { context: ctx });
const result = await sandbox.runCode('math.pi * radius ** 2', { context: ctx });

console.log(result.results[0].text); // "78.53981633974483"

エラー処理:

const result = await sandbox.runCode("x = 1 / 0", { language: "python" });

if (result.error) {
	console.error(result.error.name); // "ZeroDivisionError"
	console.error(result.error.value); // "division by zero"
	console.error(result.error.traceback); // Stack trace array
}
const result = await sandbox.runCode('x = 1 / 0', { language: 'python' });

if (result.error) {
  console.error(result.error.name);      // "ZeroDivisionError"
  console.error(result.error.value);     // "division by zero"
  console.error(result.error.traceback); // Stack trace array
}

JavaScript と TypeScript の機能:

JavaScript と TypeScript のコード実行は、トップレベルの await と、同じコンテキスト内での実行をまたいだ変数の永続化に対応しています。

const ctx = await sandbox.createCodeContext({ language: "javascript" });

// Execution 1: Fetch data with top-level await
await sandbox.runCode(
	`
const response = await fetch('https://api.example.com/data');
const data = await response.json();
`,
	{ context: ctx },
);

// Execution 2: Use the data from previous execution
const result = await sandbox.runCode("console.log(data)", { context: ctx });
console.log(result.logs.stdout); // Data persists across executions
const ctx = await sandbox.createCodeContext({ language: 'javascript' });

// Execution 1: Fetch data with top-level await
await sandbox.runCode(`
const response = await fetch('https://api.example.com/data');
const data = await response.json();
`, { context: ctx });

// Execution 2: Use the data from previous execution
const result = await sandbox.runCode('console.log(data)', { context: ctx });
console.log(result.logs.stdout); // Data persists across executions

constletvar で宣言した変数は実行をまたいで残るため、複数ステップのワークフローに使えます。

const ctx = await sandbox.createCodeContext({ language: "javascript" });

await sandbox.runCode("const x = 10", { context: ctx });
await sandbox.runCode("let y = 20", { context: ctx });
const result = await sandbox.runCode("x + y", { context: ctx });

console.log(result.results[0].text); // "30"
const ctx = await sandbox.createCodeContext({ language: 'javascript' });

await sandbox.runCode('const x = 10', { context: ctx });
await sandbox.runCode('let y = 20', { context: ctx });
const result = await sandbox.runCode('x + y', { context: ctx });

console.log(result.results[0].text); // "30"

listCodeContexts()

有効なコード実行コンテキストをすべて一覧します。

const contexts = await sandbox.listCodeContexts(): Promise<CodeContext[]>
const contexts = await sandbox.listCodeContexts();
console.log(`Found ${contexts.length} contexts`);
const contexts = await sandbox.listCodeContexts();
console.log(`Found ${contexts.length} contexts`);

deleteCodeContext()

コード実行コンテキストを削除し、リソースを解放します。

await sandbox.deleteCodeContext(contextId: string): Promise<void>
const ctx = await sandbox.createCodeContext({ language: "python" });
await sandbox.runCode('print("Hello")', { context: ctx });
await sandbox.deleteCodeContext(ctx.id);
const ctx = await sandbox.createCodeContext({ language: 'python' });
await sandbox.runCode('print("Hello")', { context: ctx });
await sandbox.deleteCodeContext(ctx.id);

リッチな出力形式

結果には次が含まれます。texthtmlpngjpegsvglatexmarkdownjsonchartdata

チャート(matplotlib):

const result = await sandbox.runCode(
	`
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))
plt.show()
`,
	{ language: "python" },
);

if (result.results[0]?.png) {
	const imageBuffer = Buffer.from(result.results[0].png, "base64");
	return new Response(imageBuffer, {
		headers: { "Content-Type": "image/png" },
	});
}
const result = await sandbox.runCode(`
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))
plt.show()
`, { language: 'python' });

if (result.results[0]?.png) {
  const imageBuffer = Buffer.from(result.results[0].png, 'base64');
  return new Response(imageBuffer, {
    headers: { 'Content-Type': 'image/png' }
  });
}

表(pandas):

const result = await sandbox.runCode(
	`
import pandas as pd
df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
df
`,
	{ language: "python" },
);

if (result.results[0]?.html) {
	return new Response(result.results[0].html, {
		headers: { "Content-Type": "text/html" },
	});
}
const result = await sandbox.runCode(`
import pandas as pd
df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
df
`, { language: 'python' });

if (result.results[0]?.html) {
  return new Response(result.results[0].html, {
    headers: { 'Content-Type': 'text/html' }
  });
}

関連リソース

役に立ちましたか?