はじめに
タイムラインに出てきた、 @minorun365 さんの X のポストで見かけた Claude Agent SDK を軽く試してみた、という話の記事です。
Claude Agent SDK(旧 Claude Code SDK)について
上記でポストされている公式記事(以下の記事)を見てみると、どうやら Claude Code SDK を Claude Agent SDK に名称変更したもののようです。
●Building agents with the Claude Agent SDK \ Anthropic
https://www.anthropic.com/engineering/building-agents-with-the-claude-agent-sdk
公式記事の以下の部分に、リネームしたという話が書いてあります。
公式の「Getting started」
上記の公式の記事を見ていくと、「Getting started」の項目もあります。
その項目を読み進めてみると、とりあえず、以下のページを見てお試しを進めるのが良さそうでした。
●Agent SDK overview - Claude Docs
https://docs.claude.com/en/api/agent-sdk/overview
【旧SDK を使っていた方向け】 マイグレーション用のガイドなど
それと、名称変更前の SDK(Claude Code SDK)を使った開発をしていた方向けには、以下のマイグレーション用のガイドのページもあるようでした。
●Migrate to Claude Agent SDK - Claude Docs
https://docs.claude.com/en/docs/claude-code/sdk/migration-guide
例えば、以下の情報などが掲載されていました。
- What’s Changed
- Typescript・JavaScript版のパッケージ名の変更
- 【旧】 @anthropic-ai/claude-code
- 【新】 @anthropic-ai/claude-agent-sdk
- TPython版のパッケージ名の変更
- 【旧】 claude-code-sdk
- 【新】 claude-agent-sdk
- ドキュメントの場所
- 【旧】 Claude Code docs
- 【新】 API Guide の Agent SDKセクション
- Typescript・JavaScript版のパッケージ名の変更
ドキュメントの場所という部分について、新しいドキュメントページは以下になるようでした。
●Agent SDK reference - TypeScript - Claude Docs
https://docs.claude.com/en/api/agent-sdk/typescript
●Agent SDK reference - Python - Claude Docs
https://docs.claude.com/en/api/agent-sdk/python
自分は新規で試すので、簡単なお試し用コードを準備してやってみます。
さっそく試してみる
公式ドキュメントの「Agent SDK overview」などを見つつ試してみます。
パッケージのインストール
今回、以下の Node.js を使うことにします。
●@anthropic-ai/claude-agent-sdk - npm
https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk
インストール用のコマンドは以下です。
npm i @anthropic-ai/claude-agent-sdk
上記のコマンドにより、以下のとおりバージョン 0.1.0 の SDK がインストールされました。
APIキーの設定
それと、APIキーの設定もやっておきます。
ANTHROPIC_API_KEY という名前の環境変数に、Claude の APIキーを設定しました。
(APIキーは、以下の記事を書いた時に作っていたものを使いました)
●個人利用が可能になってたことに今さら気がついた Anthropic/Claude の API を試す: Tool use (function calling) - Qiita
https://qiita.com/youtoy/items/3c9b2ee8444437744202
お試し用のコード1
とりあえず、動作確認用くらいの内容で、コードを用意してみます。
import { query } from "@anthropic-ai/claude-agent-sdk";
(async () => {
const stream = query({
prompt:
"Node.jsのプログラムでフィボナッチ数列を出力するプログラムを書いて、現在の作業ディレクトリにoutput.mjsという名前で保存してください。ファイルパスは相対パスで ./output.mjs としてください。",
options: {
systemPrompt:
// "",
allowedTools: ["Write"],
cwd: process.cwd(),
},
});
for await (const message of stream) {
// 実行途中の出力をログ表示
console.log(message);
}
console.log("\n処理を完了しました。");
})();
上記のコードでは、公式ドキュメントに書かれた、以下の query() を使っています。
実行結果1
上記を実行した結果、以下の内容のファイルが生成されました。
/**
* フィボナッチ数列を生成する関数
* @param {number} n - 生成する項数
* @returns {number[]} フィボナッチ数列の配列
*/
function fibonacci(n) {
if (n <= 0) return [];
if (n === 1) return [0];
const sequence = [0, 1];
for (let i = 2; i < n; i++) {
sequence.push(sequence[i - 1] + sequence[i - 2]);
}
return sequence;
}
// フィボナッチ数列を10項まで生成して出力
const count = 10;
const result = fibonacci(count);
console.log(`フィボナッチ数列(${count}項):`);
console.log(result.join(', '));
// 個別に出力
console.log('\n各項の詳細:');
result.forEach((num, index) => {
console.log(`F(${index}) = ${num}`);
});
以下は、生成されたコードの実行結果で、問題なく動作しています。
お試し用のコード2
もう少し試してみます。連続した処理を行うような、以下の内容で試しました。
先ほど、自分が書いたコード・今回書いたコードと、Claude Agent SDK の処理で生成されたコードなどを対象に README.md などが作られるというものです。
import { query } from "@anthropic-ai/claude-agent-sdk";
(async () => {
console.log("処理を開始します...\n");
const stream1 = query({
prompt: `
1. このディレクトリ内の.jsと.mjsファイルをすべて検索
2. 各ファイルの先頭コメントや主要な関数を読み取り
3. プロジェクト構造を分析してREADME.mdを生成
4. README.mdには以下を含める:
- プロジェクト概要
- ファイル一覧と各ファイルの説明
- 使用方法
`,
options: {
// systemPrompt: "",
allowedTools: ["Glob", "Read", "Write"],
cwd: process.cwd(),
},
});
for await (const message of stream1) {
if (message.type === "result") {
console.log("README.md生成完了\n");
}
}
const stream2 = query({
prompt: `
README.mdの内容を参考に、記載内容の概要を作成し、./output.txtというファイル名で以下を含めて保存
- プロジェクト名と一行説明
- 主要な特徴
- クイックスタートコマンド
`,
options: {
// systemPrompt: "",
allowedTools: ["Read", "Write"],
cwd: process.cwd(),
},
});
for await (const message of stream2) {
if (message.type === "result") {
console.log("テキストファイルを作成しました\n");
}
}
})();
実行結果2
上記を実行した結果は、以下のとおりです。ターミナル上は、問題なく処理を終えられたという内容が出ました。
あとは、生成されたファイル 2つの内容を確認していきます。
生成された README.md をプレビュー表示させてみると、以下のような内容ができていました。
良い感じに、フォルダ内のファイルの説明を作ってくれたようです。
さらに、output.txt を見てみると、は以下のような内容になっていました。
Markdown形式のようなので、プレビュー表示も試してみました。
先ほどは、わりと分量がある内容でしたが、それをコンパクトにまとめてくれています。
おわりに
とりあえず 2パターン試してみました。今回はシンプルなものをやってみただけ、というところなので、さらにお試しをやっていければと思います。