ガイド
セッション管理
Claude Agent SDKがセッションとセッション再開をどのように処理するかを理解する
セッション管理
セッション管理
Claude Agent SDKは、会話状態と再開を処理するためのセッション管理機能を提供します。セッションを使用すると、完全なコンテキストを維持しながら、複数のやり取りにわたって会話を継続できます。
セッションの仕組み
セッションの仕組み
新しいクエリを開始すると、SDKは自動的にセッションを作成し、初期システムメッセージでセッションIDを返します。このIDをキャプチャして、後でセッションを再開できます。
セッションIDの取得
セッションIDの取得
TypeScript
import { query } from "@anthropic-ai/claude-agent-sdk"
let sessionId: string | undefined
const response = query({
prompt: "Webアプリケーションの構築を手伝ってください",
options: {
model: "claude-sonnet-4-5"
}
})
for await (const message of response) {
// 最初のメッセージは、セッションIDを含むシステム初期化メッセージです
if (message.type === 'system' && message.subtype === 'init') {
sessionId = message.session_id
console.log(`セッションが開始されました。ID: ${sessionId}`)
// このIDを後で再開するために保存できます
}
// 他のメッセージを処理...
console.log(message)
}
// 後で、保存されたsessionIdを使用して再開できます
if (sessionId) {
const resumedResponse = query({
prompt: "中断したところから続けてください",
options: {
resume: sessionId
}
})
}Python
from claude_agent_sdk import query, ClaudeAgentOptions
session_id = None
async for message in query(
prompt="Webアプリケーションの構築を手伝ってください",
options=ClaudeAgentOptions(
model="claude-sonnet-4-5"
)
):
# 最初のメッセージは、セッションIDを含むシステム初期化メッセージです
if hasattr(message, 'subtype') and message.subtype == 'init':
session_id = message.data.get('session_id')
print(f"セッションが開始されました。ID: {session_id}")
# このIDを後で再開するために保存できます
# 他のメッセージを処理...
print(message)
# 後で、保存されたsession_idを使用して再開できます
if session_id:
async for message in query(
prompt="中断したところから続けてください",
options=ClaudeAgentOptions(
resume=session_id
)
):
print(message)セッションの再開
セッションの再開
SDKは以前の会話状態からのセッション再開をサポートし、継続的な開発ワークフローを可能にします。セッションIDとresumeオプションを使用して、以前の会話を継続します。
import { query } from "@anthropic-ai/claude-agent-sdk"
// IDを使用して以前のセッションを再開
const response = query({
prompt: "中断したところから認証システムの実装を続けてください",
options: {
resume: "session-xyz", // 以前の会話からのセッションID
model: "claude-sonnet-4-5",
allowedTools: ["Read", "Edit", "Write", "Glob", "Grep", "Bash"]
}
})
// 会話は以前のセッションからの完全なコンテキストで継続されます
for await (const message of response) {
console.log(message)
}SDKは、セッションを再開する際に会話履歴とコンテキストの読み込みを自動的に処理し、Claudeが中断したところから正確に継続できるようにします。
セッションのフォーク
セッションのフォーク
セッションを再開する際、元のセッションを継続するか、新しいブランチにフォークするかを選択できます。デフォルトでは、再開は元のセッションを継続します。forkSessionオプション(TypeScript)またはfork_sessionオプション(Python)を使用して、再開状態から開始する新しいセッションIDを作成します。
セッションをフォークするタイミング
セッションをフォークするタイミング
フォークは以下の場合に有用です:
- 同じ開始点から異なるアプローチを探索する
- 元のセッションを変更せずに複数の会話ブランチを作成する
- 元のセッション履歴に影響を与えずに変更をテストする
- 異なる実験のために別々の会話パスを維持する
フォーク vs 継続
フォーク vs 継続
| 動作 | forkSession: false(デフォルト) | forkSession: true |
|---|---|---|
| セッションID | 元のセッションと同じ | 新しいセッションIDが生成される |
| 履歴 | 元のセッションに追加 | 再開ポイントから新しいブランチを作成 |
| 元のセッション | 変更される | 変更されずに保持される |
| 使用例 | 線形会話を継続 | 代替案を探索するためにブランチ |
例:セッションのフォーク
例:セッションのフォーク
import { query } from "@anthropic-ai/claude-agent-sdk"
// まず、セッションIDをキャプチャ
let sessionId: string | undefined
const response = query({
prompt: "REST APIの設計を手伝ってください",
options: { model: "claude-sonnet-4-5" }
})
for await (const message of response) {
if (message.type === 'system' && message.subtype === 'init') {
sessionId = message.session_id
console.log(`元のセッション: ${sessionId}`)
}
}
// セッションをフォークして異なるアプローチを試す
const forkedResponse = query({
prompt: "今度はこれをGraphQL APIとして再設計しましょう",
options: {
resume: sessionId,
forkSession: true, // 新しいセッションIDを作成
model: "claude-sonnet-4-5"
}
})
for await (const message of forkedResponse) {
if (message.type === 'system' && message.subtype === 'init') {
console.log(`フォークされたセッション: ${message.session_id}`)
// これは異なるセッションIDになります
}
}
// 元のセッションは変更されず、まだ再開できます
const originalContinued = query({
prompt: "REST APIに認証を追加してください",
options: {
resume: sessionId,
forkSession: false, // 元のセッションを継続(デフォルト)
model: "claude-sonnet-4-5"
}
})