← API 開発に戻る
API 開発 / レッスン 03

Claude から外部 API を利用する

GitHub の情報で tool_use → HTTP → tool_result を実装する。

始める前に

最初の API ガイドを終え、client.mjs と external-tool.mjs を同じフォルダーに置きます。公開 GitHub 情報はトークンなしで読めますが、Claude の API 利用量と GitHub の制限は発生します。

1. 小さなツールを定義する

name・description・input_schema を指定します。例では owner と repo のみを受け、任意 URL を許可せず api.github.com に接続します。スキーマがあっても実行側の検証は必要です。定義だけでは API は動きません。

json
{
  "name": "get_github_repository",
  "description": "Read public repository metadata",
  "input_schema": {
    "type": "object",
    "properties": {"owner": {"type": "string"}, "repo": {"type": "string"}},
    "required": ["owner", "repo"],
    "additionalProperties": false
  }
}

2. アプリがツール要求を実行する

ツール定義をメッセージと送ります。tool_use なら各ブロックの名前と引数を検証し、アプリのコードが HTTP を実行します。必要な情報・URL・取得時刻だけを返します。open_issues_count は PR を含むので問題数だけとは表示しません。

3. 対応する結果を返す

assistant の content 全体を履歴に追加し、直後の user メッセージで全 tool_result を返します。tool_use_id を一致させ、失敗は is_error: true にします。履歴と定義を再送し、上限を設けて end_turn まで続けます。

javascript
messages.push({role: "assistant", content: response.content});
messages.push({role: "user", content: [{
  type: "tool_result", tool_use_id: call.id, content: result
}]});

4. 完整な例を動かして確認

.env で実行し、URL と数値を元のリポジトリで確認します。値は変動します。例は最大 5 ラウンド・各応答 4 呼び出しで、タイムアウトとツールエラーを扱います。外部記述は信頼できないデータとして扱い、書き込みには実行側の認可と確認を追加します。

shell
node --env-file=.env external-tool.mjs

サンプルファイルを取得

教材の出力は実行ごとに変わります。前提を確認して結果を検証してください。閲覧だけでは API を呼びません。

練習と確認

YOUR TURN / 実践

成功した呼び出しと存在しないリポジトリへの要求を確認し、失敗が捏造ではなく is_error で返ることを確認します。

終わったら、振り返ってみましょう:

公式資料を読む

CLI の操作は公式文書と照合し、API のサンプルは模擬応答で検証しました。実アカウントでの一連の操作は未実施です。

気になることから探そう