この記事は、Anthropic が提供する Claude Agent SDK(エージェント開発キット) を使って、AI エージェントを構築する方法とベストプラクティスを解説しています。
Claude Code のエージェントは、以下のループで動作します。

この記事では、メールエージェントを例に、各ステップを解説しています。
エージェントには、プロンプトだけでなく、自分でコンテキストを取得・更新する能力が必要です。
ファイルシステムは、モデルのコンテキストに取り込める情報の「倉庫」のようなものです。
Claude は大きなファイル(ログやユーザーがアップロードしたファイルなど)に遭遇すると、以下のようなbashコマンドを使って効率的に情報を取得します。
| コマンド | 用途 |
|---|---|
grep |
特定のパターンを検索 |
tail |
ファイルの末尾を表示 |
メールエージェントの例:
過去の会話を「Conversations」フォルダに保存しておけば、必要な時にそこから検索できます。
📁 Conversations/
├── 2025-01-meeting.txt
├── 2025-02-project-update.txt
└── 2025-03-feedback.txt
| 項目 | エージェント検索 | セマンティック検索 |
|---|---|---|
| 速度 | 遅い | 速い |
| 精度 | 高い | やや低い |
| 保守性 | 簡単 | 難しい |
| 透明性 | 高い | 低い |
セマンティック検索の仕組み:
推奨: セマンティック検索には限界があるため、まずはエージェンティック検索から始めましょう。セマンティック検索は通常、エージェンティック検索よりも高速ですが、精度が低く、メンテナンスが難しく、透明性も低くなります。より高速な結果やより多くのバリエーションが必要な場合にのみセマンティック検索を追加することをお勧めします。
サブエージェントとは、メインのエージェントから呼び出される「子エージェント」です。
サブエージェントの2つの利点:
並列化(Parallelization)
コンテキスト管理
メールエージェントの例:
メインエージェント
│
├── 検索サブエージェント1(クエリA)
├── 検索サブエージェント2(クエリB)
└── 検索サブエージェント3(クエリC)
↓
関連する抜粋だけを返す(フルスレッドではなく)
エージェントが長時間動作すると、コンテキストがいっぱいになってしまいます。
コンパクション機能:
コンテキストを収集したら、柔軟にアクションを取れるようにします。
ツールはエージェントの主要な行動手段です。
重要なポイント:
コードは以下の特性を持つため、エージェントの出力として理想的です。
| 特性 | 説明 |
|---|---|
| 正確 | 曖昧さがない |
| 組み合わせ可能 | 他のコードと組み合わせやすい |
| 再利用可能 | 一度書けば何度でも使える |
Claude.ai のファイル作成機能の例:
Claude.ai では、Excel スプレッドシート、PowerPointプレゼンテーション、Word文書を作成する際、Claude が python スクリプトを書いて生成しています。
MCPは外部サービスとの標準化された連携方法を提供します。
MCP の利点:
メールエージェントの例:
・Slack メッセージを検索してチームの状況を理解
・Asana タスクをチェックして、担当者を確認
MCPサーバーを使えば、これらの統合がすぐに動作します。
自分の出力をチェックして改善できるエージェントは、根本的に信頼性が高くなります。
最良のフィードバック: 出力に対する明確なルールを定義し、どのルールが失敗したか、なぜ失敗したかを説明する。
コードリンティング(Linting)の例:
TypeScript > JavaScript
TypeScriptを使うと、JavaScriptよりも多くのフィードバック(型チェックなど)が得られます。
メールエージェントの例:
| チェック項目 | 結果 |
|---|---|
| メールアドレスが有効か | 無効ならエラー |
| 以前にメールを送ったことがあるか | なければ警告 |
UI 生成やテストなど、視覚的なタスクには、スクリーンショットやレンダリング結果が役立ちます。
チェック項目:
Playwright MCPサーバーを使うと、この視覚的フィードバックループを自動化できます。
別の言語モデルに、エージェントの出力を「判定」させる方法です。
| 項目 | 評価 |
|---|---|
| 堅牢性 | あまり高くない |
| レイテンシ | 大きい |
| 用途 | パフォーマンス向上が必要なケース |
メールエージェントの例:
サブエージェントに下書きのトーンを判定させ、ユーザーの過去のメッセージと合っているか確認する。
エージェントループを数回実行した後、エージェントをテストし、タスクに適切に対応できることを確認することをお勧めします。エージェントを改善する最良の方法は、その出力、特に失敗したケースを注意深く観察し、エージェントの立場に立って考えることです。
| 問題 | 解決策 |
|---|---|
| タスクを誤解している | 検索APIの構造を変更して、必要な情報を見つけやすくする |
| 同じタスクで繰り返し失敗する | ツール呼び出しに正式なルールを追加して、失敗を識別・修正する |
| エラーを修正できない | より有用で創造的なツールを与えて、別のアプローチができるようにする |
| 機能追加でパフォーマンスが変動する | 顧客の使用状況に基づいた代表的なテストセット(評価セット)を構築する |