# Claude Agent SDKの便利だけど知られていない機能
🌍 実行時の条件に応じてエージェントの設定を変えたい?ファクトリ関数で動的にエージェントを生成できます!
Claude Agent SDKでは、ファクトリ関数パターンを使って、ランタイム条件に基づいてカスタマイズされたAgentDefinitionを動的に生成できます。
📌 タイトル:動的なエージェント定義(ファクトリ関数)
🔗 URL:
🧩 概要
`AgentDefinition` を返すファクトリ関数を作成することで、実行時の条件(セキュリティレベル、ユーザー権限、環境など)に応じてプロンプト、モデル、ツールセットをカスタマイズしたエージェントを動的に生成できます。エージェントはクエリ時に生成されるため、リクエストごとに異なる構成を適用できます。例えば、厳格なセキュリティレビューでは `opus` モデル、通常レビューでは `sonnet` モデルを使い分けるといった運用が可能です。
🛠 使い方
```python
# Python - セキュリティレベルに応じたエージェント生成
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition
def create_security_agent(security_level: str) -> AgentDefinition:
is_strict = security_level == "strict"
return AgentDefinition(
description="セキュリティコードレビュアー",
prompt=f"あなたは{'厳格な' if is_strict else 'バランス重視の'}セキュリティレビュアーです...",
tools=["Read", "Grep", "Glob"],
model="opus" if is_strict else "sonnet", # 重要度に応じてモデルを変更
)
# クエリ時にファクトリを呼び出し
async for message in query(
prompt="このPRのセキュリティ問題をレビューしてください",
options=ClaudeAgentOptions(
allowed_tools=["Read", "Grep", "Glob", "Agent"],
agents={
"security-reviewer": create_security_agent("strict")
},
),
):
if hasattr(message, "result"):
print(message.result)
```
```typescript
// TypeScript
function createSecurityAgent(level: "basic" | "strict"): AgentDefinition {
const isStrict = level === "strict";
return {
description: "Security code reviewer",
prompt: `You are a ${isStrict ? "strict" : "balanced"} security reviewer...`,
tools: ["Read", "Grep", "Glob"],
model: isStrict ? "opus" : "sonnet",
};
}
for await (const message of query({
prompt: "Review this PR for security issues",
options: {
allowedTools: ["Read", "Grep", "Glob", "Agent"],
agents: {
"security-reviewer": createSecurityAgent("strict")
}
}
})) {
if ("result" in message) console.log(message.result);
}
```
🏗 本番システムへの組み込み方
・ユーザーの権限レベルやサブスクリプションプランに応じて、異なるモデルやツールセットを割り当てます
・環境変数や設定ファイルから条件を読み取り、デプロイ環境ごとに適切なエージェントを生成します
・タスクの重要度に応じて `model` を切り替え、コストと品質のバランスを最適化します
・複数のファクトリ関数を組み合わせて、多様なエージェントチームを動的に構成します
💡 ユースケース
🔐 重要なセキュリティレビューではopusモデル、日常のレビューではsonnetモデルを使い分ける
👥 ユーザーの権限に応じて利用可能なツールを動的に変更するマルチテナントシステム
🌐 リージョンや言語設定に応じてプロンプトをローカライズしたエージェントを生成する
⚠️ 注意点
・ファクトリ関数はクエリ時に同期的に呼ばれるため、重い処理は避けてください
・生成されたエージェントは通常のAgentDefinitionと同じ制約(サブエージェントはサブエージェントを生成できない等)に従います
・動的に生成されるため、デバッグ時にどの構成が使われたかを記録しておくことをお勧めします
✨ ファクトリ関数パターンは、1つのコードベースで多様なユースケースに対応するエージェントを生成できる強力なパターンです。条件分岐をハードコードするのではなく、ファクトリに委ねましょう!
#
ClaudeAgentSDK# #
AIAgent#