6 6
7> Agent SDK を本番環境にデプロイする:サブプロセスアーキテクチャ、セッション永続化、スケーリング、可観測性、Docker、Kubernetes、サンドボックスプロバイダー向けのマルチテナント分離。7> Agent SDK を本番環境にデプロイする:サブプロセスアーキテクチャ、セッション永続化、スケーリング、可観測性、Docker、Kubernetes、サンドボックスプロバイダー向けのマルチテナント分離。
8 8
9Agent SDK は `claude` CLI サブプロセスをスポーンして監視します。このサブプロセスはシェル、作業ディレクトリ、ディスク上のセッションファイルを所有しています。ホスティングはステートレス API ラッパーのホスティングとは異なります。実行中のすべてのエージェントはローカル状態に結びついた長寿命プロセスであり、これはリソースの割り当て方法、セッションの永続化方法、テナント間のスケーリング方法に影響を与えます。9Agent SDK は `claude` CLI サブプロセスを起動・監視します。このサブプロセスはシェル、作業ディレクトリ、ディスク上のセッションファイルを所有しています。ホスティングはステートレス API ラッパーのホスティングとは異なります。実行中のエージェントはすべて、ローカル状態に結びついた長寿命プロセスであり、これがリソース割り当て、セッション永続化、テナント間のスケーリング方法を決定します。
10 10
11このページでは、独自のインフラストラクチャでのセルフホスティングについて説明します:[サブプロセスモデル](#the-subprocess-model)を理解し、[セッションパターンを選択](#choose-a-session-pattern)し、[コンテナをプロビジョニング](#provision-the-container)し、永続化、可観測性、認証、マルチテナント分離などの[本番環境の懸念事項](#handle-production-concerns)に対処します。デプロイ可能な Dockerfile と Kubernetes マニフェストについては、[ホスティングクックブック](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)を参照してください。11このページは独自のインフラストラクチャでのセルフホスティングについて説明しています。デプロイ可能な Dockerfile と Kubernetes マニフェストについては、[ホスティングクックブック](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)を参照してください。
12 12
13インフラストラクチャ制御、カスタム分離、または独自のデータプレーンが不要な場合は、代わりに[Managed Agents](https://platform.claude.com/docs/ja/managed-agents/overview)の使用を検討してください:Anthropic がエージェントとサンドボックスを実行するホスト型 REST API であり、アプリケーションはイベントを送信し、ホスティングインフラストラクチャを操作することなく結果をストリーミングバックします。13インフラストラクチャ制御、カスタム分離、または独自のデータプレーンが不要な場合は、[Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) の使用を検討してください。これは Anthropic がエージェントとサンドボックスを実行するホスト型 REST API であり、アプリケーションはイベントを送信して結果をストリーミングで受け取ることができます。ホスティングインフラストラクチャを運用する必要はありません。
14
15<Info>
16 ネットワーク制御、認証情報管理、分離オプションを含む基本的なサンドボックス化を超えたセキュリティ強化については、[セキュアデプロイメント](/ja/agent-sdk/secure-deployment)を参照してください。
17</Info>
18 14
19<h2 id="the-subprocess-model">15<h2 id="the-subprocess-model">
20 サブプロセスモデル16 サブプロセスモデル
21</h2>17</h2>
22 18
23このページのすべてのホスティング決定は、SDK がエージェントを実行する方法に基づいています。コードが `query()` を呼び出すと、SDK は別の `claude` CLI プロセスを生成し、stdio 経由で通信します。そのサブプロセスはシェル、作業ディレクトリ、およびローカルディスク上の JSONL セッショントランスクリプトを所有しています。19このページのすべてのホスティング決定は、SDK がエージェントをどのように実行するかに基づいています。コードが `query()` を呼び出すと、SDK は別の `claude` CLI プロセスを生成し、stdio 経由で通信します。そのサブプロセスはシェル、作業ディレクトリ、およびローカルディスク上の JSONL セッショントランスクリプトを所有しています。
20
21<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" className="dark:hidden" alt="Request flow: client to your app, which spawns a claude CLI subprocess over stdio inside the container; the subprocess writes to local disk and calls api.anthropic.com over HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />
24 22
25<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" alt="リクエストフロー:クライアントからアプリへ、コンテナ内の stdio 経由で claude CLI サブプロセスを生成し、サブプロセスはローカルディスクに書き込み、HTTPS 経由で api.anthropic.com を呼び出します" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />23<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/hosting-subprocess-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=3fdeff3d7f44b2b67762668acfbb25f5" className="hidden dark:block" alt="Request flow: client to your app, which spawns a claude CLI subprocess over stdio inside the container; the subprocess writes to local disk and calls api.anthropic.com over HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess-dark.svg" />
26 24
271 つのエージェントセッションは 1 つのサブプロセスにマップされます。N 個の同時セッションを実行することは、N 個のサブプロセスを実行することを意味し、各サブプロセスは独自のプロセスツリーとトランスクリプトファイルを持ちます。デフォルトでは、すべてがアプリケーションの作業ディレクトリを継承するため、セッションが別のファイルシステムを必要とする場合は、各 `query()` 呼び出しで `cwd` を渡してください:251 つのエージェントセッションは 1 つのサブプロセスにマップされます。N 個の同時セッションを実行することは、N 個のサブプロセスを実行することを意味し、各サブプロセスは独自のプロセスツリーとトランスクリプトファイルを持ちます。デフォルトでは、すべてがアプリケーションの作業ディレクトリを継承します。セッションが個別のファイルシステムを必要とする場合は、各セッションの `query()` 呼び出しのオプションで異なる `cwd` を渡します。
28 26
29<CodeGroup>27<CodeGroup>
30 ```typescript TypeScript theme={null}28 ```typescript TypeScript theme={null}
31 query({ prompt, options: { cwd: "/work/session-a" } })29 import { query } from "@anthropic-ai/claude-agent-sdk";
30
31 for await (const message of query({
32 prompt: "Summarize the files in this directory",
33 options: { cwd: "/work/session-a" },
34 })) {
35 console.log(message);
36 }
32 ```37 ```
33 38
34 ```python Python theme={null}39 ```python Python theme={null}
35 query(prompt=prompt, options=ClaudeAgentOptions(cwd="/work/session-a"))40 import asyncio
41
42 from claude_agent_sdk import ClaudeAgentOptions, query
43
44
45 async def main():
46 async for message in query(
47 prompt="Summarize the files in this directory",
48 options=ClaudeAgentOptions(cwd="/work/session-a"),
49 ):
50 print(message)
51
52
53 asyncio.run(main())
36 ```54 ```
37</CodeGroup>55</CodeGroup>
38 56
57このページの TypeScript の例はトップレベルの `await` を使用しているため、`.mts` ファイルとして保存するか、`package.json` で `"type": "module"` を設定してください。
58
39<h3 id="state-that-lives-on-local-disk">59<h3 id="state-that-lives-on-local-disk">
40 ローカルディスク上に存在する状態60 ローカルディスクに存在する状態
41</h3>61</h3>
42 62
433 種類のエージェント状態がデフォルトでコンテナのファイルシステム上に存在します。これらのいずれもコンテナの再起動、スケールダウン、または別のノードへの移動を生き残りません。633 種類のエージェント状態がデフォルトでコンテナのファイルシステムに存在します。これらのいずれも、コンテナの再起動、スケールダウン、または別のノードへの移動を経ても保持されません。
44 64
45| 状態 | デフォルトの場所 |65| 状態 | デフォルトの場所 |
46| ------------------- | ------------------------------------------------------------------------------ |66| ------------------- | ---------------------------------------------------------------------------------------------------- |
47| セッショントランスクリプト | `~/.claude/projects/`、または設定されている場合は `CLAUDE_CONFIG_DIR` の下の `projects/` ディレクトリ |67| セッショントランスクリプト | `~/.claude/projects/`、または `CLAUDE_CONFIG_DIR` が設定されている場合は `CLAUDE_CONFIG_DIR` の下の `projects/` ディレクトリ |
48| `CLAUDE.md` メモリファイル | ユーザーティアの場合は `~/.claude/CLAUDE.md`、プロジェクトティアの場合はセッションの作業ディレクトリ |68| `CLAUDE.md` メモリファイル | ユーザーティアの場合は `~/.claude/CLAUDE.md`、プロジェクトティアの場合はセッションの作業ディレクトリ |
49| 作業ディレクトリアーティファクト | セッションの作業ディレクトリ |69| 作業ディレクトリアーティファクト | セッションの作業ディレクトリ |
50 70
51ホスト間でトランスクリプトを永続化するには、[`SessionStore` アダプター](/ja/agent-sdk/session-storage)を設定してください。メモリファイルおよび他の作業ディレクトリアーティファクトには、マウントされたボリュームまたはオブジェクトストア同期などの独自のストレージ戦略が必要です。71トランスクリプトをホスト間で永続化するには、[`SessionStore` アダプター](/docs/ja/agent-sdk/session-storage)を設定します。メモリファイルおよび他の作業ディレクトリアーティファクトは、マウントされたボリュームやオブジェクトストア同期などの独自のストレージ戦略が必要です。
52 72
53セッション、再開、およびフォークが API レベルでどのように機能するかについては、[セッション](/ja/agent-sdk/sessions)を参照してください。73セッション、再開、およびフォークが API レベルでどのように機能するかについては、[セッション](/docs/ja/agent-sdk/sessions)を参照してください。
54 74
55<h2 id="choose-a-session-pattern">75<h2 id="choose-a-session-pattern">
56 セッションパターンを選択する76 セッションパターンを選択する
57</h2>77</h2>
58 78
59これら 4 つのパターンはセッションライフサイクルをカバーしています。コンテナがそれが提供するセッションに対してどのくらいの期間存在するかです。コンテナが実行される場所については、[ホスティングクックブック](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb)に、ローカル Docker、Modal、Kubernetes 用の[デプロイ可能なコード](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)があります。ここでセッションパターンを選択し、クックブックからデプロイメントターゲットを選択してください。79これら 4 つのパターンはセッションライフサイクルをカバーしています。コンテナがそれを提供するセッションに対してどのくらいの期間存在するかです。コンテナが実行される場所については、[ホスティングクックブック](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb)に、ローカル Docker、Modal、Kubernetes 向けの[デプロイ可能なコード](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)があります。ここでセッションパターンを選択し、クックブックからデプロイメントターゲットを選択してください。
60 80
61<h3 id="ephemeral-sessions">81<h3 id="ephemeral-sessions">
62 エフェメラルセッション82 エフェメラルセッション
63</h3>83</h3>
64 84
65各ユーザータスク用にコンテナを作成し、タスクが完了したときに破棄します。ワンオフタスクに最適です。ユーザーはタスクが完了している間も AI と相互作用できますが、完了するとコンテナは破棄されます。85各ユーザータスク用にコンテナを作成し、タスクが完了したら破棄します。ワンオフタスクに最適です。ユーザーはタスクが完了している間も AI と対話できますが、完了後はコンテナが破棄されます。
66 86
67例のワークロードには、バグ調査と修正、請求書と領収書の抽出、ドキュメント翻訳、メディア変換が含まれます。87例のワークロードには、バグ調査と修正、請求書と領収書の抽出、ドキュメント翻訳、メディア変換が含まれます。
68 88
69コンテナは SDK を呼び出して終了する 1 回限りのエントリポイントを実行します。以下の例は最小限の TypeScript バージョンを示しています。`entrypoint.mts` として保存するか、`package.json` で `"type": "module"` を設定して、トップレベルの `await` が利用可能になるようにしてください。89コンテナは、`TASK_PROMPT` 環境変数からタスクを読み取り、SDK を呼び出して終了する 1 回限りのエントリポイントを実行します。
70 90
71```typescript theme={null}91<CodeGroup>
72import { query } from "@anthropic-ai/claude-agent-sdk";92 ```typescript TypeScript theme={null}
93 import { query } from "@anthropic-ai/claude-agent-sdk";
73 94
74const prompt = process.env.TASK_PROMPT!;95 const prompt = process.env.TASK_PROMPT!;
75for await (const message of query({ prompt, options: { maxTurns: 20 } })) {96 for await (const message of query({ prompt, options: { maxTurns: 20 } })) {
76 console.log(message);97 console.log(message);
77}98 }
78```99 ```
100
101 ```python Python theme={null}
102 import asyncio
103 import os
104
105 from claude_agent_sdk import ClaudeAgentOptions, query
106
107
108 async def main():
109 async for message in query(
110 prompt=os.environ["TASK_PROMPT"],
111 options=ClaudeAgentOptions(max_turns=20),
112 ):
113 print(message)
114
115
116 asyncio.run(main())
117 ```
118</CodeGroup>
119
120スクリプトは到着時に各メッセージを出力します。これには、タスクがターン制限内に完了したときに `subtype` が `success` である結果メッセージが含まれます。代わりにタスクが 20 ターン制限に達した場合、結果メッセージの `subtype` は `error_max_turns` であり、`query()` 呼び出しはそれを生成した後にエラーを発生させるため、コンテナがクリーンに終了する必要がある場合はループを try ブロックでラップしてください。エラーサブタイプについては、[結果を処理する](/docs/ja/agent-sdk/agent-loop#handle-the-result)を参照してください。
79 121
80<h3 id="long-running-sessions">122<h3 id="long-running-sessions">
81 長時間実行セッション123 長時間実行セッション
82</h3>124</h3>
83 125
84永続的なコンテナインスタンスを実行し、多くの場合、コンテナごとに複数の SDK プロセスをホストして、継続的な作業に対応します。自律的なアクションを実行するエージェント、コンテンツを提供するエージェント、または高ボリュームのメッセージストリームを処理するエージェントに最適です。126永続的なコンテナインスタンスを実行し、多くの場合、コンテナごとに複数の SDK プロセスをホストして、継続的な作業を提供します。自律的なアクションを実行するエージェント、コンテンツを提供するエージェント、または大量のメッセージストリームを処理するエージェントに最適です。
85 127
86例のワークロードには、受信メールをトリアージして応答するメールエージェント、コンテナポートを通じてユーザーごとの編集可能なサイトをホストするサイトビルダー、Slack などのプラットフォームからの継続的なトラフィックを処理するチャットボットが含まれます。128例のワークロードには、受信メールをトリアージして応答するメールエージェント、コンテナポートを通じてユーザーが編集可能なサイトをホストするサイトビルダー、Slack などのプラットフォームからの継続的なトラフィックを処理するチャットボットが含まれます。
87 129
88コンテナは HTTP または WebSocket エンドポイントを公開し、各アクティブセッションを長時間実行されるクエリとその背後にあるサブプロセスにマップします。TypeScript では、[`streamInput()`](/ja/agent-sdk/typescript#query-object) を使用してアクティブセッションにターンを追加し、[`startup()`](/ja/agent-sdk/typescript#startup) を使用して受信トラフィックの前にサブプロセスをプリウォームします。Python では、[`ClaudeSDKClient`](/ja/agent-sdk/python#claudesdkclient) を使用してセッションをターン全体で開いたままにします。コンテナのサイズを、メモリに保持できる最大数の同時セッションに対応できるようにしてください。130コンテナは HTTP または WebSocket エンドポイントを公開し、各アクティブセッションを長時間実行されるクエリとその背後にあるサブプロセスにマップします。TypeScript では、[`streamInput()`](/docs/ja/agent-sdk/typescript#query-object)を使用してアクティブセッションにターンを追加し、[`startup()`](/docs/ja/agent-sdk/typescript#startup)を使用して受信トラフィック前にサブプロセスをプリウォームします。Python では、[`ClaudeSDKClient`](/docs/ja/agent-sdk/python#claudesdkclient)を使用してセッションをターン全体で開いたままにします。コンテナのサイズを、メモリに保持できる最大数の同時セッションに対応できるようにしてください。
89 131
90<h3 id="hybrid-sessions">132<h3 id="hybrid-sessions">
91 ハイブリッドセッション133 ハイブリッドセッション
92</h3>134</h3>
93 135
94スタートアップ時に [`SessionStore`](/ja/agent-sdk/session-storage) から水和し、更新を戻す一時的なコンテナです。多くの相互作用にまたがるが、その間アイドル状態になるセッションに最適です。コンテナはアイドル期間中にスピンダウンし、ユーザーが戻ってきたときにスピンバックアップします。136スタートアップ時に[`SessionStore`](/docs/ja/agent-sdk/session-storage)から水和し、更新を戻すエフェメラルコンテナ。多くのインタラクションにまたがるが、その間はアイドル状態になるセッションに最適です。コンテナはアイドル期間中にスピンダウンし、ユーザーが戻ってきたときにスピンバックアップします。
95 137
96例のワークロードには、断続的なチェックインを伴う個人プロジェクトマネージャー、数時間にわたって一時停止および再開する深い研究、相互作用全体でチケット履歴を読み込むカスタマーサポートエージェントが含まれます。138例のワークロードには、断続的なチェックインを伴う個人プロジェクトマネージャー、数時間にわたって一時停止および再開する深い調査、インタラクション全体でチケット履歴を読み込むカスタマーサポートエージェントが含まれます。
97 139
98プロバイダーのアイドルタイムアウトをユーザーが戻ってくることを期待する頻度に合わせて調整します。`SessionStore` が設定されていない状態でコンテナをシャットダウンするとトランスクリプトが失われるため、ストアはこのパターンでは必須であり、オプションではありません。140プロバイダーのアイドルタイムアウトをユーザーが戻ってくることを期待する頻度に合わせて調整します。`SessionStore` が設定されていない状態でコンテナをシャットダウンするとトランスクリプトが失われるため、ストアはこのパターンでは必須であり、オプションではありません。
99 141
100パターンは ID でセッションを再開し、共有ストアを接続することに基づいています:142パターンは、共有ストアが接続された ID でセッションを再開することに基づいています。
101 143
102<CodeGroup>144<CodeGroup>
103 ```typescript TypeScript theme={null}145 ```typescript TypeScript theme={null}
116 ```158 ```
117 159
118 ```python Python theme={null}160 ```python Python theme={null}
119 from claude_agent_sdk import query, ClaudeAgentOptions161 from claude_agent_sdk import query, ClaudeAgentOptions, SessionStore
162 import asyncio
163
164 user_input: str = ...
165 session_id: str = ... # looked up from your database by user
166 session_store: SessionStore = ... # S3, Redis, Postgres, or your own adapter
120 167
168
169 async def main():
121 async for message in query(170 async for message in query(
122 prompt=user_input,171 prompt=user_input,
123 options=ClaudeAgentOptions(172 options=ClaudeAgentOptions(
124 resume=session_id, # looked up from your database by user173 resume=session_id,
125 session_store=session_store, # S3, Redis, Postgres, or your own adapter174 session_store=session_store,
126 ),175 ),
127 ):176 ):
128 ...177 ...
178
179
180 asyncio.run(main())
129 ```181 ```
130</CodeGroup>182</CodeGroup>
131 183
132[セッションストレージ](/ja/agent-sdk/session-storage)で完全な `SessionStore` インターフェースと参照アダプターを参照してください。
133
134<h3 id="multi-agent-container">184<h3 id="multi-agent-container">
135 マルチエージェントコンテナ185 マルチエージェントコンテナ
136</h3>186</h3>
137 187
1381 つのコンテナ内で複数の SDK サブプロセスを実行します。エージェントが密接に協力する必要があるエージェント、たとえば、エージェントが共有環境で相互に相互作用するマルチエージェントシミュレーションに最適です。1881 つのコンテナ内で複数の SDK サブプロセスを実行します。エージェントが密接に協力する必要がある場合に最適です。たとえば、エージェントが共有環境で相互作用するマルチエージェントシミュレーションです。
139 189
140各エージェントに独自の作業ディレクトリを与えて、相互にファイルを上書きしないようにし、設定読み込みを分離して、エージェントごとの `CLAUDE.md` ファイルがエージェント間でリークしないようにします。具体的なオプションについては、[マルチテナント分離](#multi-tenant-isolation)を参照してください。190各エージェントに独自の作業ディレクトリを与えて、相互にファイルを上書きしないようにし、設定読み込みを分離して、エージェント別の `CLAUDE.md` ファイルがエージェント間でリークしないようにします。具体的なオプションについては、[マルチテナント分離](#multi-tenant-isolation)を参照してください。
141 191
142<h2 id="provision-the-container">192<h2 id="provision-the-container">
143 コンテナのプロビジョニング193 コンテナをプロビジョニングする
144</h2>194</h2>
145 195
146<h3 id="container-based-sandboxing">196<h3 id="container-based-sandboxing">
147 コンテナベースのサンドボックス197 コンテナベースのサンドボックス
148</h3>198</h3>
149 199
150プロセス分離、リソース制限、ネットワーク制御、および一時的なファイルシステムのために、サンドボックス化されたコンテナ内で SDK を実行します。複数のプロバイダーが Agent SDK のモデルに適合するサンドボックス化されたコンテナ環境を専門としています。200プロセス分離、リソース制限、ネットワーク制御、および一時的なファイルシステムのために、SDK をサンドボックス化されたコンテナ内で実行します。
151 201
152プロバイダーを選択する際に回答すべき質問:202プロバイダーを選択する際に回答すべき質問:
153 203
154* **サンドボックスを実行するのは誰か**:sandbox-as-a-service プロバイダーはインフラストラクチャを運用しますが、自己ホスト型オプションは自分のシステムで実行するソフトウェアを提供します。204* **サンドボックスを実行する者**:サンドボックス・アズ・ア・サービスプロバイダーはインフラストラクチャを運用しますが、セルフホスト型オプションは自分のサーバーで実行するソフトウェアを提供します。
155* **コールドスタートレイテンシ**:「サンドボックスを作成」から「最初のリクエストを受け入れる準備ができた」までの時間。一時的なパターンは 1 秒未満の起動が必要です。長時間実行パターンはより長い時間を許容します。205* **コールドスタートレイテンシー**:「サンドボックスを作成」から「最初のリクエストを受け入れる準備ができた」までの時間。一時的なパターンは 1 秒未満の起動が必要です。長時間実行パターンはより長い時間を許容します。
156* **永続的なストレージ**:プロバイダーが耐久性のあるボリュームを提供するか、一時的なディスクのみを提供するか。ハイブリッドパターンは、サンドボックス内またはその横のいずれかで、どこかに耐久性のあるストレージが必要です。206* **永続ストレージ**:プロバイダーが耐久性のあるボリュームを提供するか、一時的なディスクのみを提供するか。ハイブリッドパターンは、サンドボックス内またはその隣のいずれかで、どこかに耐久性のあるストレージが必要です。
157* **価格モデル**:秒単位、リクエスト単位、または時間単位の定額請求。秒単位の価格設定は、バースト的な一時的なワークロードに適しています。時間単位は長時間実行セッションに適しています。207* **価格モデル**:秒単位、リクエスト単位、または定額時間単位の課金。秒単位の価格設定はバースト的な一時的ワークロードに適しています。時間単位は長時間実行セッションに適しています。
158* **ネットワーク**:カスタム出力ルール、アウトバウンドプロキシ、および規制環境向けのプライベート VPC ピアリングのサポート。208* **ネットワーク**:カスタム出力ルール、アウトバウンドプロキシ、および規制環境向けのプライベート VPC ピアリングのサポート。
159 209
160評価するプロバイダー:210Docker、gVisor、Firecracker などのセルフホスト型オプションと詳細な分離設定については、[分離テクノロジー](/docs/ja/agent-sdk/secure-deployment#isolation-technologies)を参照してください。
161
162* [Modal Sandbox](https://modal.com/docs/guide/sandbox)([デモ実装](https://modal.com/docs/examples/claude-slack-gif-creator)付き)
163* [Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)
164* [Daytona](https://www.daytona.io/)
165* [E2B](https://e2b.dev/)
166* [Fly Machines](https://fly.io/docs/machines/)
167* [Vercel Sandbox](https://vercel.com/docs/functions/sandbox)
168
169Docker、gVisor、Firecracker などの自己ホスト型オプション、および詳細な分離設定については、[分離テクノロジー](/ja/agent-sdk/secure-deployment#isolation-technologies)を参照してください。
170 211
171<h3 id="runtime-dependencies">212<h3 id="runtime-dependencies">
172 ランタイム依存関係213 ランタイム依存関係
173</h3>214</h3>
174 215
175コンテナには SDK の言語ランタイムのみが必要です:216コンテナには SDK の言語ランタイムが必要です:
176 217
177* Python SDK の場合は Python 3.10 以上、または TypeScript SDK の場合は Node.js 18 以上218* Python SDK の場合は Python 3.10 以上、または TypeScript SDK の場合は Node.js 18 以上
178* 両方の SDK パッケージはホストプラットフォーム用のネイティブ Claude Code バイナリをバンドルしているため、生成された CLI に対して個別の Claude Code または Node.js インストールは不要です219* TypeScript SDK と Python SDK の両方は、ほとんどのインストールに対してネイティブ Claude Code バイナリをバンドルしており、生成された CLI は別の Node.js インストールを必要としません。別のネイティブ Claude Code インストールが必要なインストールについては、[クイックスタートのインストール注記](/docs/ja/agent-sdk/quickstart)を参照してください。
179 220
180バンドルされたバイナリは SDK パッケージバージョンに固定されているため、SDK を更新することが CLI を更新する方法です。SDK は semver に従います:パッチリリースは継続的に取得し、マイナーを取得する前に [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) または [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) チェンジログを確認してください。221バンドルされたバイナリは SDK パッケージバージョンに固定されているため、SDK を更新することが CLI を更新する方法です。SDK は semver に従います:パッチリリースは継続的に取得し、マイナーを取得する前に [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) または [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) チェンジログを確認してください。
181 222
183 リソース224 リソース
184</h3>225</h3>
185 226
186新しく起動されたインスタンスの場合、エージェントあたり 1 GiB RAM、5 GiB ディスク、および 1 CPU が合理的な開始点です。メモリ使用量はセッション長とツールアクティビティとともに増加するため、アイドル状態のベースラインではなく、実際に必要なセッション長と同時実行性に合わせてサイズを設定してください。ホストあたりのエージェント数を計算する方法については、[スケーリングと同時実行](#scaling-and-concurrency)を参照してください。227新しく起動されたインスタンスごとに、1 GiB RAM、5 GiB ディスク、および 1 CPU は合理的な開始点です。メモリ使用量はセッション長とツールアクティビティとともに増加するため、アイドルベースラインではなく、実際に必要なセッション長と同時実行性に合わせてサイズを設定してください。ホストあたりのエージェント数を計算する方法については、[スケーリングと同時実行](#scaling-and-concurrency)を参照してください。
187 228
188<h3 id="network">229<h3 id="network">
189 ネットワーク230 ネットワーク
190</h3>231</h3>
191 232
192SDK は `api.anthropic.com` へのアウトバウンド HTTPS、または Amazon Bedrock または Google Cloud の Agent Platform で実行する場合はプロバイダーのリージョナルエンドポイントへのアウトバウンド HTTPS が必要です。エージェントが [MCP サーバー](/ja/agent-sdk/mcp)または外部ツールを使用する場合、それらのエンドポイントへのアウトバウンドアクセスも必要です。本番環境では、ドメイン許可リストを適用し、認証情報を挿入し、リクエストをログに記録する出力プロキシを通じてアウトバウンドトラフィックをルーティングしてください。完全なパターンについては、[セキュアデプロイメント](/ja/agent-sdk/secure-deployment)を参照してください。233SDK は `api.anthropic.com` へのアウトバウンド HTTPS、または Amazon Bedrock または Google Cloud の Agent Platform で実行する場合はプロバイダーのリージョナルエンドポイントが必要です。エージェントが [MCP サーバー](/docs/ja/agent-sdk/mcp)または外部ツールを使用する場合、それらのエンドポイントへのアウトバウンドアクセスも必要です。本番環境では、ドメイン許可リストを適用し、認証情報を挿入し、リクエストをログに記録するエグレスプロキシを通じてアウトバウンドトラフィックをルーティングしてください。完全なパターンについては、[セキュアデプロイメント](/docs/ja/agent-sdk/secure-deployment)を参照してください。
193 234
194インバウンドトラフィックの場合、コンテナ上の HTTP または WebSocket ポートを公開します。アプリケーションはそのポート上のクライアントリクエストを処理し、SDK を内部的に呼び出します。サブプロセス自体はネットワーク上でリッスンしません。235インバウンドトラフィックの場合、コンテナ上の HTTP または WebSocket ポートを公開します。アプリケーションはそのポートでクライアントリクエストを処理し、内部的に SDK を呼び出します。サブプロセス自体はネットワーク上でリッスンしません。
195 236
196<h2 id="handle-production-concerns">237<h2 id="handle-production-concerns">
197 本番環境の懸念事項に対応する238 本番環境の懸念事項に対応する
198</h2>239</h2>
199 240
200自己ホスト型エージェントをリリースする前に、これらの決定を検討してください。241自己ホスト型エージェントをリリースする前に、これらの決定事項を検討してください。
201 242
202<h3 id="session-and-state-persistence">243<h3 id="session-and-state-persistence">
203 セッションと状態の永続性244 セッションと状態の永続化
204</h3>245</h3>
205 246
206デフォルトのローカルディスクは、再起動、スケールダウン、または別のノードへの移動時に失われます。ユーザーが再開することを期待するセッションについては、トランスクリプトを [`SessionStore` アダプター](/ja/agent-sdk/session-storage) を使用して耐久性のあるストレージにミラーリングしてください。S3、Redis、Postgres アダプターと独自のアダプター用の適合スイートについては、[リファレンス実装](/ja/agent-sdk/session-storage#reference-implementations) を参照してください。247デフォルトのローカルディスクは、再起動、スケールダウン、または別のノードへの移動時に失われます。ユーザーが再開することを期待するセッションについては、トランスクリプトを [`SessionStore` アダプター](/docs/ja/agent-sdk/session-storage) を使用して耐久性のあるストレージにミラーリングしてください。S3、Redis、Postgres アダプターおよび独自のアダプター用の適合性スイートについては、[リファレンス実装](/docs/ja/agent-sdk/session-storage#reference-implementations) を参照してください。
207 248
208`SessionStore` の動作について知っておくべき 3 つのことがあります。249`SessionStore` の動作について知っておくべき 3 つのことがあります。
209 250
210* **トランスクリプトのみ**:`SessionStore` はトランスクリプトをミラーリングし、`CLAUDE.md` メモリファイルまたは他の作業ディレクトリアーティファクトはミラーリングしません。共有ボリュームをマウントするか、それらを別途同期してください。251* **トランスクリプトのみ**: `SessionStore` はトランスクリプトをミラーリングし、`CLAUDE.md` メモリファイルや他の作業ディレクトリアーティファクトはミラーリングしません。共有ボリュームをマウントするか、それらを別途同期してください。
211* **ミラーリング、置き換えではない**:サブプロセスはまずローカルディスクに書き込み、ストアは各バッチのコピーを受け取ります。ローカル書き込みは権限を持ったままです。252* **ミラーリング、置き換えではない**: サブプロセスはまずローカルディスクに書き込み、SDK は各バッチのコピーをストアに転送します。新しいセッションのローカルトランスクリプトは実行より長く存続します。ストアから再開された実行は終了時にローカルコピーを削除するため、ストアが唯一の耐久性のあるコピーを保持します。[デュアルライトアーキテクチャ](/docs/ja/agent-sdk/session-storage#dual-write-architecture) を参照してください。
212* **`mirror_error` メッセージ**:ストアが拒否したバッチは合計最大 3 回送信され、各再試行の前に短いバックオフがあります。タイムアウトした呼び出しは再試行されません。バッチがまだ失敗する場合、SDK はそれをドロップし、`{ type: "system", subtype: "mirror_error" }` メッセージを発行し、クエリを続行します。ストアの耐久性が重要な場合は、これらについてアラートを設定してください。253* **`mirror_error` メッセージ**: SDK がバッチをストアに配信できない場合、バッチをドロップし、`{ type: "system", subtype: "mirror_error" }` メッセージを発行し、クエリを続行します。ストアの耐久性が重要な場合は、これらについてアラートを設定してください。再試行とタイムアウト動作については、[ミラーライトはベストエフォート](/docs/ja/agent-sdk/session-storage#mirror-writes-are-best-effort) を参照してください。
213 254
214<h3 id="observability">255<h3 id="observability">
215 可観測性256 可観測性
216</h3>257</h3>
217 258
218Agent SDK エージェントは、多くの API ラウンドトリップにわたってツール呼び出しを生成する長時間実行プロセスです。テレメトリがなければ、どのツールが実行されたか、どのくらい時間がかかったか、またはセッションがどこで停止したかを確認することはできません。259Agent SDK エージェントは長時間実行されるプロセスであり、多くの API ラウンドトリップにわたってツール呼び出しを生成します。テレメトリがなければ、どのツールが実行されたか、どのくらい時間がかかったか、またはセッションがどこで停止したかを確認することはできません。
219 260
220SDK は環境から OpenTelemetry 設定を継承します。コンテナまたはオーケストレーターレベルで OTEL 環境変数を設定して、すべての `query()` 呼び出しがスパン、メトリクス、およびログイベントをコレクターにエクスポートするようにしてください。以下の例は、3 つのシグナルすべてに対して OTLP エクスポートを有効にします。`CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` はトレースにのみ必要です。メトリクスとログのみをエクスポートする場合は省略してください。261SDK は環境から OpenTelemetry 設定を継承します。コンテナーまたはオーケストレーターレベルで OTEL 環境変数を設定して、すべての `query()` 呼び出しがスパン、メトリクス、およびログイベントをコレクターにエクスポートするようにしてください。以下の例は、3 つのシグナルすべてに対して OTLP エクスポートを有効にします。`CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` はトレースにのみ必要です。メトリクスとログのみをエクスポートする場合は省略してください。
221 262
222```bash title=".env' theme={null}263```bash title=".env" theme={null}
223CLAUDE_CODE_ENABLE_TELEMETRY=1264CLAUDE_CODE_ENABLE_TELEMETRY=1
224CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1265CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1
225OTEL_TRACES_EXPORTER=otlp266OTEL_TRACES_EXPORTER=otlp
229OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318270OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318
230```271```
231 272
232プロンプトテキストとツール入力はデフォルトではエクスポートに含まれません。オプトインフラグについては [エクスポートで機密データを制御する](/ja/agent-sdk/observability#control-sensitive-data-in-exports) を参照し、完全なシグナルカタログについては [可観測性](/ja/agent-sdk/observability) を参照してください。273プロンプトテキストとツール入力はデフォルトではエクスポートに含まれません。オプトインフラグについては [エクスポートで機密データを制御する](/docs/ja/agent-sdk/observability#control-sensitive-data-in-exports) を参照し、完全なシグナルカタログについては [可観測性](/docs/ja/agent-sdk/observability) を参照してください。
233 274
234<h3 id="auth-and-secrets">275<h3 id="auth-and-secrets">
235 認証とシークレット276 認証とシークレット
237 278
238ホスティング時に重要な 3 つの認証上の懸念があります。279ホスティング時に重要な 3 つの認証上の懸念があります。
239 280
240* **Anthropic API**:サブプロセスは環境から `ANTHROPIC_API_KEY` を読み取ります。シークレットマネージャーから提供するか、`ANTHROPIC_BASE_URL` を設定して、モデル呼び出しをコンテナ外でキーを注入するプロキシを通じてルーティングしてください。プロキシパターンについては [認証情報管理](/ja/agent-sdk/secure-deployment#credential-management) を参照し、サポートされている認証方法については [SDK 概要](/ja/agent-sdk/overview#get-started) を参照してください。281* **Anthropic API**: サブプロセスは環境から `ANTHROPIC_API_KEY` を読み取ります。シークレットマネージャーから供給するか、`ANTHROPIC_BASE_URL` を設定してモデル呼び出しをコンテナー外でキーを注入するプロキシを通じてルーティングしてください。プロキシパターンについては [認証情報管理](/docs/ja/agent-sdk/secure-deployment#credential-management) を参照し、サポートされている認証方法については [SDK クイックスタートのセットアップ](/docs/ja/agent-sdk/quickstart#setup) を参照してください。
241* **インバウンド**:エージェントコンテナの前のゲートウェイに認証を配置してください。エージェントは事前認証されたリクエストを受け取る必要があり、ユーザートークンを検証するコンポーネントであってはいけません。282* **インバウンド**: エージェントコンテナーの前のゲートウェイに認証を配置してください。エージェントは事前認証されたリクエストを受け取る必要があり、ユーザートークンを検証するコンポーネントであってはいけません。
242* **アウトバウンドツール**:ツール認証情報をエージェント環境から除外してください。アウトバウンド呼び出しをプロキシを通じてルーティングし、リクエストがコンテナを離れた後に API キーを注入してください。エージェントが呼び出しを行い、プロキシが認証情報を追加します。283* **アウトバウンドツール**: ツール認証情報をエージェント環境から除外してください。アウトバウンド呼び出しをプロキシを通じてルーティングし、リクエストがコンテナーを離れた後に API キーを注入してください。エージェントが呼び出しを行い、プロキシが認証情報を追加します。
243 284
244<h3 id="scaling-and-concurrency">285<h3 id="scaling-and-concurrency">
245 スケーリングと並行処理286 スケーリングと並行処理
247 288
248各セッションは独自のサブプロセスで実行されるため、ホスト上の並行処理はそのホストの RAM が保持できるサブプロセスの数によって制限されます。289各セッションは独自のサブプロセスで実行されるため、ホスト上の並行処理はそのホストの RAM が保持できるサブプロセスの数によって制限されます。
249 290
250この式を使用してホストのサイズを設定してください。291このフォーミュラを使用して各ホストのサイズを設定してください。
251 292
252```text theme={null}293```text theme={null}
253agents per host = (host RAM - overhead) / (per-session RAM ceiling)294agents per host = (host RAM - overhead) / (per-session RAM ceiling)
254```295```
255 296
256セッションごとの上限を測定するには、代表的なセッションをターゲット長まで実行し、予想されるツール負荷の下で実行し、ピーク RSS を記録してください。[リソース](#resources) の 1 GiB の開始点は下限であり、上限ではありません。297セッションごとの上限を測定するには、代表的なセッションをターゲット長まで実行し、予想されるツール負荷の下で実行し、ピーク RSS を記録してください。[リソース](#resources) の 1 GiB の開始ポイントはフロアであり、上限ではありません。
257
258水平スケーリングルーティングはパターンに依存します。長時間実行セッションの場合、コンテナが多くのセッションを保持する場合、ロードバランサーの背後にコンテナプールを実行し、`sessionId` での一貫性ハッシュを使用して各セッションを 1 つのコンテナにピン留めしてください。ピン留めされたセッションは、削除されるか、コンテナが再起動されるまで、同じコンテナ、したがって同じ実行中のサブプロセスに継続的にヒットします。
259 298
260単一セッションからの [サブエージェント](/ja/agent-sdk/subagents) の大規模なファンアウトは、API レート制限に達する可能性があります。1 つの広いディスパッチを発行するのではなく、作業をより小さなバッチに分割してください。299水平スケーリングのルーティングはパターンによって異なります。コンテナーが多くのセッションを保持する長時間実行セッションの場合、ロードバランサーの背後にあるコンテナープールを実行し、`sessionId` での一貫性ハッシュを使用して各セッションを 1 つのコンテナーにピン留めしてください。ピン留めされたセッションは、削除されるか、コンテナーが再起動されるまで、同じコンテナーに、したがって同じ実行中のサブプロセスに継続的にヒットします。
261 300
262<h3 id="cost">301<h3 id="cost">
263 コスト302 コスト
264</h3>303</h3>
265 304
266Anthropic トークンコストは通常、コンテナインフラストラクチャコストを 1 桁以上上回ります。最小限にプロビジョニングされたコンテナは 1 時間あたり約 \$0.05 で実行されますが、単一の長いエージェントセッションはトークンで数ドルを費やす可能性があります。セッションごとのトークンアカウンティングについては [コスト追跡](/ja/agent-sdk/cost-tracking) を参照してください。305Anthropic トークンコストは通常、コンテナーインフラストラクチャコストを 1 桁以上上回ります。最小限にプロビジョニングされたコンテナーは 1 時間あたり約 \$0.05 で実行されますが、単一の長いエージェントセッションはトークンで数ドルを費やす可能性があります。セッションごとのトークンアカウンティングについては、[コスト追跡](/docs/ja/agent-sdk/cost-tracking) を参照してください。
267 306
268<h3 id="multi-tenant-isolation">307<h3 id="multi-tenant-isolation">
269 マルチテナント分離308 マルチテナント分離
270</h3>309</h3>
271 310
272デフォルト SDK の動作は、ファイルシステムから設定と `CLAUDE.md` メモリファイルを読み取ります。複数のテナントにサービスを提供する共有コンテナでは、これらのファイルは 1 つのテナントのコンテキストを別のテナントのセッションにリークする可能性があります。311デフォルト SDK 動作は、ファイルシステムから設定と `CLAUDE.md` メモリファイルを読み取ります。複数のテナントにサービスを提供する共有コンテナーでは、これらのファイルは 1 つのテナントのコンテキストを別のテナントのセッションにリークする可能性があります。
273 312
274共有コンテナ内でテナントを分離するには:313共有コンテナー内でテナントを分離するには、以下を実行してください。
275 314
276* TypeScript で `settingSources: []` を渡すか、Python で `setting_sources=[]` を渡して、ファイルシステム設定が読み込まれないようにしてください。315* TypeScript で `settingSources: []` を渡すか、Python で `setting_sources=[]` を渡して、ユーザー、プロジェクト、およびローカル設定をスキップしてください。
277* `env` で `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` を設定してください。[自動メモリ](/ja/memory#auto-memory) は `~/.claude/projects/<project>/memory/` で `settingSources` に関係なくシステムプロンプトに読み込まれます。[settingSources が制御しないもの](/ja/agent-sdk/claude-code-features#what-settingsources-does-not-control) を参照して、無条件に読み込まれる他の入力を確認してください。316* `env` で `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` を設定してください。[自動メモリ](/docs/ja/memory#auto-memory) は `~/.claude/projects/<project>/memory/` にあり、`settingSources` に関係なくシステムプロンプトに読み込まれます。`settingSources` が制御しないその他の入力については、[settingSources が制御しないもの](/docs/ja/agent-sdk/claude-code-features#what-settingsources-does-not-control) を参照してください。
278* `CLAUDE_CONFIG_DIR` をテナントごとのディレクトリにポイントして、テナントが `~/.claude.json` グローバル設定を共有しないようにしてください。317* `CLAUDE_CONFIG_DIR` をテナントごとのディレクトリにポイントして、テナントが `~/.claude.json` グローバル設定を共有しないようにしてください。各設定ディレクトリが 1 つの作業ディレクトリにサービスを提供し、テナント間で [`SessionStore`](/docs/ja/agent-sdk/session-storage) を共有しない場合、`env` で [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/ja/sessions#name-the-project-directory-yourself) を設定して、その下のトランスクリプトパスを短く保つこともできます。TypeScript Agent SDK v0.3.234 以降、または Python Agent SDK v0.2.140 以降が必要です。
279* テナントごとの作業ディレクトリを使用してください。すべての `query()` 呼び出しで `cwd` を明示的に渡してください。318* テナントごとの作業ディレクトリを使用してください。すべての `query()` 呼び出しで `cwd` を明示的に渡してください。
280* プロキシで異なるアウトバウンド IP、認証情報、またはドメイン許可リストなど、テナントごとのエグレスルールを適用して、侵害されたテナントが別のテナントのアウトバウンドポリシーを介してデータを流出させることができないようにしてください。319* プロキシで異なるアウトバウンド IP、認証情報、またはドメイン許可リストなどのテナントごとのエグレスルールを適用して、侵害されたテナントが別のテナントのアウトバウンドポリシーを介してデータを流出させることができないようにしてください。
281 320
282以下の例は、4 つの SDK レベルのオプションを一緒に適用します。`tenantDir` と `configDir` を構築して、各テナントが他のテナントが読み取ることができないパスを取得するようにしてください。TypeScript では、`env` はサブプロセス環境を置き換えるため、`PATH` や `ANTHROPIC_API_KEY` などの継承された変数を保持するために `...process.env` を展開してください。Python では、`env` は継承された環境の上にマージされます。321以下の例は、設定、自動メモリ、設定ディレクトリ、および作業ディレクトリオプションを一緒に適用します。`tenantDir` と `configDir` を構築して、各テナントが他のテナントが読み取ることができないパスを取得するようにしてください。TypeScript では、`env` はサブプロセス環境を置き換えるため、`PATH` や `ANTHROPIC_API_KEY` などの継承された変数を保持するために `...process.env` を展開してください。Python では、`env` は継承された環境の上にマージされます。
283 322
284<CodeGroup>323<CodeGroup>
285 ```typescript TypeScript theme={null}324 ```typescript TypeScript theme={null}
307 346
308 ```python Python theme={null}347 ```python Python theme={null}
309 from claude_agent_sdk import query, ClaudeAgentOptions348 from claude_agent_sdk import query, ClaudeAgentOptions
349 import asyncio
310 350
351 prompt: str = ...
352 tenant_dir: str = ...
353 config_dir: str = ...
354
355
356 async def main():
311 async for message in query(357 async for message in query(
312 prompt=prompt,358 prompt=prompt,
313 options=ClaudeAgentOptions(359 options=ClaudeAgentOptions(
320 ),366 ),
321 ):367 ):
322 ...368 ...
369
370
371 asyncio.run(main())
323 ```372 ```
324</CodeGroup>373</CodeGroup>
325 374
326テナントごとのネットワーク制御については、[セキュアデプロイメント](/ja/agent-sdk/secure-deployment) を参照してください。
327
328<h2 id="known-limitations">375<h2 id="known-limitations">
329 既知の制限事項376 既知の制限事項
330</h2>377</h2>
332デプロイメント設計でこれらを考慮してください。379デプロイメント設計でこれらを考慮してください。
333 380
334| 制限事項 | 対応方法 |381| 制限事項 | 対応方法 |
335| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |382| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
336| トップレベルのセッションタイムアウトがない | セッションは自動的にタイムアウトしません。`Options` で `maxTurns` を設定して、エージェントがツール使用ラウンドトリップを実行する回数を制限し、停止する前に制限してください。 |383| トップレベルのセッションタイムアウトがない | セッションは自動的にタイムアウトしません。TypeScript の `maxTurns` または Python の `max_turns` を設定して、エージェントがツール使用ラウンドトリップを実行する回数を制限してから停止させます。 |
337| 長いセッションでのメモリ増加 | セッション長を制限するか、サブプロセスを定期的にリサイクルしてください。[スケーリングと並行処理](#scaling-and-concurrency)を参照してください。 |384| 長いセッションでのメモリ増加 | セッション長を制限するか、サブプロセスを定期的にリサイクルしてください。[スケーリングと並行処理](#scaling-and-concurrency)を参照してください。 |
338| 大規模な並列サブエージェントのファンアウトがレート制限に達する可能性がある | 1 つの広いディスパッチを発行するのではなく、作業をより小さなバッチに分割してください。 |385| 大規模な並列サブエージェントのファンアウトがレート制限に達する可能性がある | 1 つの広いディスパッチを発行するのではなく、作業をより小さなバッチに分割してください。 |
339| サブエージェントごとのウォールクロック期限がない | 各[サブエージェント](/ja/agent-sdk/subagents)を `AgentDefinition` の `maxTurns` で制限してください。バックグラウンドサブエージェントのみの場合、`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` は、`run_in_background` サブエージェントが出力の生成を停止したときに発火するスタールウォッチドッグを設定します。これは総実行時間の期限ではありません。 |386| サブエージェントごとのウォールクロック期限がない | 各[サブエージェント](/docs/ja/agent-sdk/subagents)を `AgentDefinition` の `maxTurns` で制限してください。`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` はサブエージェントが出力を生成しなくなったときに発火するスタール監視タイマーを設定します。これは総実行時間の期限ではありません。 |
387
388<h2 id="troubleshoot-deployment-failures">
389 デプロイメント失敗のトラブルシューティング
390</h2>
391
392マシン上で動作するエージェントがデプロイされたサービスで失敗する場合は、このセクションを使用してください。以下の各項目は失敗の名前を示し、それをカバーするエントリへのリンクを提供します。
393
394* **サービス開始時に CLI が見つからない**: Python では、コンテナまたはサービスマネージャーがアプリケーションをシェルとは異なる `PATH` で実行するため、ローカルで機能するインストールがプロセスに表示されません。TypeScript では、イメージビルドが SDK のオプション依存関係をスキップしたか、`pathToClaudeCodeExecutable` がイメージに存在しないファイルを指しています。[Claude Code が見つかりません](/docs/ja/agent-sdk/troubleshooting#clinotfounderror-claude-code-not-found)を参照してください。
395* **イメージに CLI が存在するが起動しない**: Claude Code は、コンテナのアーキテクチャまたは libc と一致しないバイナリから起動できないか、イメージビルド中に実行権限を失ったファイルから起動できません。[Claude Code の起動に失敗](/docs/ja/agent-sdk/troubleshooting#cliconnectionerror-failed-to-start-claude-code)を参照してください。
396* **Claude Code プロセスが実行中に終了する**: アプリケーションが受け取るエラーは、SDK 言語と CLI が最初にエラー結果を報告したかどうかによって異なります。[CLI プロセス終了](/docs/ja/agent-sdk/troubleshooting#cli-process-exit)の下のエントリは各メッセージをカバーしています。
340 397
341<h2 id="next-steps">398<h2 id="next-steps">
342 次のステップ399 次のステップ
343</h2>400</h2>
344 401
345* [ホスティングクックブック](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb):Docker、Modal、および Kubernetes 用の[デプロイ可能なコード](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)を含むノートブックのウォークスルー。402* [ホスティングクックブック](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb):Docker、Modal、および Kubernetes 用の[デプロイ可能なコード](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)を含むノートブックのウォークスルー。
346* [セッションストレージ](/ja/agent-sdk/session-storage):`SessionStore` アダプターを使用してホスト間でトランスクリプトを永続化します。403* [セッションストレージ](/docs/ja/agent-sdk/session-storage):`SessionStore` アダプターを使用してホスト間でトランスクリプトを永続化します。
347* [可観測性](/ja/agent-sdk/observability):OTEL トレース、メトリクス、およびログをコレクターにエクスポートします。404* [可観測性](/docs/ja/agent-sdk/observability):OTEL トレース、メトリクス、およびログをコレクターにエクスポートします。
348* [セキュアデプロイメント](/ja/agent-sdk/secure-deployment):ネットワーク制御、認証情報管理、および分離強化。405* [セキュアデプロイメント](/docs/ja/agent-sdk/secure-deployment):ネットワーク制御、認証情報管理、および分離強化。
349* [コスト追跡](/ja/agent-sdk/cost-tracking):セッションごとのトークンおよびコスト会計。406* [コスト追跡](/docs/ja/agent-sdk/cost-tracking):セッションごとのトークンおよびコスト会計。