Novita SandboxでClaude Agent SDKをデプロイ・ホスティングする方法

Novita SandboxでClaude Agent SDKをデプロイ・ホスティングする方法

2026年、AIの世界は決定的な転換点を迎えました。実験的なインテリジェンスから工業化された実行への移行です。AIの第一波は会話に焦点を当てていましたが、現在の時代は「エージェント性」によって定義されます。

Claude Agent SDKのリリースにより、パラダイムはステートレスAPIからステートフルで持続可能なランタイムへとシフトしました。開発者はもはやコードを生成するだけのエージェントでは満足せず、自律的に実行、デバッグ、反復を行えるシステムを求めています。従来のLLMがリクエストのたびに「忘れてしまう」のに対し、Claude Agent SDKは継続的な推論ループを維持し、コードを書き、リアルタイムでデバッグし、複雑なファイルシステムを管理します。

しかし、重要なギャップが残っています。それはインフラストラクチャです。デモからプロダクショングレードのデジタルワーカーへと移行するには、エージェントは知能だけでなく、安全でスケーラブル、高性能かつ手頃な実行環境を必要とします。

このギャップをコスト効率の高いエンタープライズグレードのインフラで埋める、E2B互換のクラウド実行環境であるNovita Sandboxを使用して、Claudeエージェントを本番環境にデプロイ・ホスティングする方法を学びましょう。

💡 さっそく始めてみませんか?
Novitaは、インタラクティブなCLI、ツール実装、ベストプラクティスを備えた、本番環境対応の完全なClaude Agent SDKサンプルを提供しています。リポジトリをクローンして、数分で最初のエージェントを実行できます。

コアの利点:Anthropic向けに設計

1. 真の「ゼロリファクタリング」移行

Novitaは完全互換のAnthropic APIエンドポイントを提供しています。baseURLを1つ変更するだけで、既存のClaude搭載アプリケーションに実世界での実行能力を与えられます。

  • ネイティブ統合@anthropic-ai/sdkをそのまま使用―新しいフレームワークを学ぶ必要はありません。
  • シームレスな切り替えcontext-managementthinkingモードを含むすべてのベータ機能と互換性があります。
import Anthropic from "@anthropic-ai/sdk";

// baseURLを変更するだけで、シームレスにNovitaに切り替え
const anthropic = new Anthropic({
  baseURL: "https://api.novita.ai/anthropic",
  apiKey: process.env.NOVITA_API_KEY,
});

// Anthropic SDKの使用方法はすべてそのまま
const response = await anthropic.messages.create({
  model: "zai-org/glm-4.7",
  max_tokens: 4096,
  messages: [{ role: "user", content: "Hello, World!" }],
});

2. クラウド分離型「サンドボックスラボラトリー」

Novita Sandboxは、ファイルシステムアクセス、ネットワーク通信、バックグラウンドプロセスを備えた即時起動のLinux環境を提供します。

  • 安全な分離:各リクエストは独立したサンドボックスで実行され、コードの汚染を防ぎます。
  • フルスタック機能:Node.js、Python、Jupyter環境が組み込まれており、動的なnpmおよびpipインストールをサポートします。
  • インスタントプレビュー:ワンクリックで公開HTTPSポートを公開―生成したページをすぐに表示できます。
import { Sandbox } from "novita-sandbox/code-interpreter";

// 数秒で分離されたクラウド環境を作成
const sandbox = await Sandbox.create({ timeoutMs: 10 * 60 * 1000 });

// ファイルを作成
await sandbox.files.write("index.html", "<h1>Hello from Sandbox!</h1>");

// バックグラウンドサービスを起動し、公開URLを取得
const handle = await sandbox.commands.run("npx http-server -p 3000", { background: true });
const publicUrl = `https://${sandbox.getHost(3000)}`;

console.log(`🌐 プレビューURL: ${publicUrl}`);

3. コンテキストの自己修復とインテリジェントな認識

Claudeのツール使用機能を活用することで、エージェントは以下のことが可能になります。

  • 適応と修復:ランタイムエラーが発生すると、エージェントはstderrを確認し、コードを自動的に書き換えます。
  • メモリの最適化contextManagement戦略と組み合わせることで、システムは古いコードブロックを自動的にクリアし、集中力を維持します。
// context-managementベータ機能を有効化
// 参考: https://platform.claude.com/docs/en/build-with-claude/context-editing
const response = await anthropic.beta.messages.create({
  model: "zai-org/glm-4.7",
  max_tokens: 4096,
  betas: ["context-management-2025-06-27"],
  contextManagement: {
    edits: [
      {
        type: "clear_tool_uses_20250919",
        trigger: { type: "input_tokens", value: 10000 },  // 1万トークンを超えるとクリーンアップをトリガー
        keep: { type: "tool_uses", value: 2 },            // 最後の2回のツール呼び出しを保持
        clear_tool_inputs: true,                          // ツール入力もクリア
      },
    ],
  },
  tools: TOOLS,
  messages: conversationHistory,
});

仕組み:会話コンテキストが設定されたしきい値を超えると、APIは以前のツール呼び出し結果を自動的にクリアし、最近の重要な情報を保持します。これにより、エージェントのパフォーマンスを低下させる「メモリ汚染」を防ぎます。

ユースケース:無限の可能性

シナリオ Novita Sandboxがもたらす価値
インタラクティブWebラボ 一文からReact/Tailwindページを生成し、即座にプレビュー。
インテリジェントデータ分析 Pythonを動的に実行し、PandasとMatplotlibでグラフを生成。
AI自動テスト 隔離環境でテストスクリプトを実行し、バグを自動キャプチャ・修正。
パーソナライズドIDEバックエンド 各ユーザーに独立したクラウド実行環境を提供―運用オーバーヘッドゼロ。
自己修復型コードワークフロー 生成されたAPIコードをクローズドループでテストし、正しく動作することを確認してから納品。

クイックスタート:3ステップでインタラクティブエージェントを構築

複雑な設定は不要です。Novitaを使えば開発が簡単になります。

ステップ1:最小限のインストール

npm install @anthropic-ai/sdk novita-sandbox dotenv open

ステップ2:スマートなAPIキー統合

プロジェクトはインタラクティブなキーガイダンスを備えています。環境変数が設定されていなくても、プログラムは起動時にプロンプトを表示します。

// agent_en.ts 内部ロジック
if (!agent.hasApiKey()) {
  const apiKey = await promptForApiKey(rl);
  agent.setApiKey(apiKey);
}

ステップ3:ワンクリックでインタラクティブCLIを起動

npm run agent-enを実行するとインタラクティブモードが起動します。要件を入力するだけで、Anthropic互換モデルがコードの生成、サービスの実行、ブラウザの起動を行います。

npm run agent-en

コアコードの解説

📌 ツール定義:AIに「物理的な能力」を与える

const TOOLS: Anthropic.Beta.Messages.BetaTool[] = [
  {
    name: "write_file",
    description: "サンドボックス内にファイルを作成または変更する",
    input_schema: {
      type: "object",
      properties: {
        path: { type: "string", description: "ファイルパス(例:index.html)" },
        content: { type: "string", description: "完全なファイル内容" },
      },
      required: ["path", "content"],
    },
  },
  {
    name: "get_preview_url",
    description: "Webサーバーを起動しプレビューURLを取得する(サーバーが既に起動している場合は既存のURLを返す)",
    input_schema: { type: "object", properties: {} },
  },
];

📌 エージェントループ:タスク完了まで処理を継続

async chat(userMessage: string): Promise<void> {
  // ユーザー入力ごとにサンドボックスのタイムアウトをリフレッシュ
  await this.refreshSandboxTimeout();
  
  this.messages.push({ role: "user", content: userMessage });

  // エージェントループ—ツール呼び出しがなくなるまで継続
  let continueLoop = true;
  while (continueLoop) {
    const { response, assistantContent } = await this.streamResponse();
    this.messages.push({ role: "assistant", content: assistantContent });

    // ツール呼び出しを処理
    const { hasToolUse, toolResults } = await this.processToolCalls(assistantContent);

    if (hasToolUse && toolResults.length > 0) {
      this.messages.push({ role: "user", content: toolResults });
      continueLoop = true;  // ツール呼び出しがある場合、ループを継続
    } else {
      continueLoop = false; // ツール呼び出しがない場合、終了
    }

    if (response.stop_reason === "end_turn") {
      continueLoop = false;
    }
  }
}

📌 サービスの自己修復:スマート検出と自動再起動

private async handleGetPreviewUrl(): Promise<string> {
  // プロセスが実際に生きているか確認
  if (this.previewUrl && this.serverHandle) {
    const processAlive = await this.checkServerProcessAlive();
    if (!processAlive) {
      console.log(`⚠️ サーバープロセスが終了しました。再起動中...`);
      this.serverHandle = null;
      this.previewUrl = null;
    }
  }

  // 新しいサーバーを起動
  this.serverHandle = await this.sandbox.commands.run(
    `npx -y http-server . -p ${CONFIG.serverPort} -c-1`,
    { background: true }
  );

  // 公開URLを取得しヘルスチェックを実行
  const host = this.sandbox.getHost(CONFIG.serverPort);
  this.previewUrl = `https://${host}`;
  
  await waitForServer(this.previewUrl, maxRetries, intervalMs);
  await openBrowser(this.previewUrl);
  
  return `プレビューURL: ${this.previewUrl}`;
}

完全なサンプルを探索する

Novitaは、本番環境対応のコードパターンを備えた完全機能のClaude Agent SDKサンプルを提供しています。このサンプルでは次のことを実演しています。

  • ストリーミング応答を備えたインタラクティブなCLIインターフェース
  • 完全なツール実装(ファイル操作、コード実行、Webサーバー管理)
  • 自動クリーンアップを備えたコンテキスト管理
  • エラーハンドリングとリトライロジック
  • 自動再起動を備えたサービスヘルスチェック
  • 永続的な状態を備えたマルチターン会話

GitHubリポジトリ: Novita-CollabHub/examples/claude-agent

サンプルを使ったクイックスタート:

# リポジトリのクローン
git clone https://github.com/novitalabs/Novita-CollabHub.git
cd Novita-CollabHub/examples/claude-agent

# 依存関係のインストール
npm install

# APIキーの設定
export NOVITA_API_KEY=your_api_key_here

# インタラクティブエージェントの実行
npm run agent-en

マルチターンダイアログデモ

以下は、エージェントがユーザーのフィードバックに基づいてページを反復的に改良する、完全なマルチターンダイアログの例です。

ラウンド1:ToDoリストアプリを作成

ユーザー入力: ToDoリストアプリを作成してください

ToDoリストアプリを作成

ラウンド2:Stardew Valley風に変更

ユーザー入力: Stardew Valley風に変更してください

Stardew Valley風に変更

ラウンド3:機能を追加

ユーザー入力: 機能を追加してください

機能を追加

まとめ

Claude Agent SDKを本番環境にデプロイするには、従来のクラウドプラットフォームが提供するようには設計されていないインフラストラクチャが必要です。Novita Sandboxは、Claude Agent SDKとシームレスに統合される本番環境対応のインフラを提供し、エージェントに物理世界で作業するための「手」を与えます。

  • E2B互換のクラウド実行環境により、既存のツールとシームレスに統合
  • ネイティブAnthropic互換エンドポイントによりゼロリファクタリングを実現―baseURLを変更するだけ
  • 信頼できないコード実行のための安全なコンテナ分離
  • 事前構成済みランタイムによる即時プロビジョニング
  • 生成されたWebアプリケーションの公開URL公開
  • 長時間実行サービスのためのバックグラウンドプロセス管理

今すぐステートフルなAIエージェントの構築を始めましょう。

Novita AI は、開発者に使いやすいAPIと手頃で信頼性の高いGPUインフラを提供し、AIアプリケーションの構築と拡張を支援する大手AIクラウドプラットフォームです。