mcpField
C
claude-api

claude-api

github.com/ovachiever開発5649 回インストール48 週間前に更新
リポジトリ

claude-api について

Anthropic TypeScript SDK を使う開発者向けのリファレンススキルで、構造化出力と一般的な API エラーの予防を扱います。リクエストの書き方、モデル変更、ストリーミング、キャッシュ、ツール利用、トラブルシューティングをまとめています。

主な機能

  1. 01構造化出力と厳密なツール利用
  2. 02ストリーミングのエラー処理
  3. 03プロンプトキャッシュのガイド
  4. 04モデルと API の変更情報
  5. 05レート制限とエラーへの対応

活用シーン

  1. 01JSON 形式の API 応答の検証
  2. 02SSE ストリーム中のエラー処理
  3. 03プロンプトの反復処理の削減
  4. 04レート制限やリクエスト障害の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ovachiever/droid-tings --skill claude-api

インストール後、Claude Code で/claude-apiを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
.claude-plugin/
plugin.json
references/
api-reference.md
prompt-caching-guide.md
rate-limits.md
tool-use-patterns.md
top-errors.md
vision-capabilities.md
scripts/
check-versions.sh
templates/
basic-chat.ts
cloudflare-worker.ts
error-handling.ts
extended-thinking.ts
nextjs-api-route.ts
nodejs-example.ts
package.json
prompt-caching.ts
streaming-chat.ts
tool-use-advanced.ts
tool-use-basic.ts
vision-image.ts
wrangler.jsonc

詳細

Claude API - 構造化出力とエラー防止ガイド

パッケージ:@anthropic-ai/[email protected](2025年11月20日) 破壊的変更:2025年10月 - Claude 3.5/3.7 モデルが廃止、2025年11月 - 構造化出力のベータ版 最終更新日:2025-11-22


v0.69.0 以降の新機能(2025年11月)

主な機能:

1. 構造化出力(v0.69.0、2025年11月14日)- 重要 ⭐

JSON スキーマへの準拠を保証 - Claude の応答が、2 つのモードで指定した JSON スキーマに厳密に従います:

JSON 出力(output_format) - データ抽出とフォーマット用:

import Anthropic from '@anthropic-ai/sdk';

const anthropic = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY,
});

const message = await anthropic.messages.create({
  model: 'claude-sonnet-4-5-20250929',
  max_tokens: 1024,
  messages: [{ role: 'user', content: 'Extract contact info: John Doe, [email protected], 555-1234' }],
  betas: ['structured-outputs-2025-11-13'],
  output_format: {
    type: 'json_schema',
    json_schema: {
      name: 'Contact',
      strict: true,
      schema: {
        type: 'object',
        properties: {
          name: { type: 'string' },
          email: { type: 'string' },
          phone: { type: 'string' }
        },
        required: ['name', 'email', 'phone'],
        additionalProperties: false
      }
    }
  }
});

// Guaranteed valid JSON matching schema
const contact = JSON.parse(message.content[0].text);
console.log(contact.name); // "John Doe"

厳密なツール使用(strict: true) - 検証済みの関数パラメーター用:

const message = await anthropic.messages.create({
  model: 'claude-sonnet-4-5-20250929',
  max_tokens: 1024,
  messages: [{ role: 'user', content: 'Get weather for San Francisco' }],
  betas: ['structured-outputs-2025-11-13'],
  tools: [{
    name: 'get_weather',
    description: 'Get current weather',
    input_schema: {
      type: 'object',
      properties: {
        location: { type: 'string' },
        unit: { type: 'string', enum: ['celsius', 'fahrenheit'] }
      },
      required: ['location'],
      additionalProperties: false
    },
    strict: true  // ← Guarantees schema compliance
  }]
});

要件:

  • ベータヘッダー:structured-outputs-2025-11-13(betas 配列経由)
  • モデル:Claude Sonnet 4.5、Claude Opus 4.1 のみ
  • SDK:v0.69.0 以降が必要

制限事項:

  • ❌ 再帰スキーマには対応していません
  • ❌ 数値制約(minimum、maximum)には対応していません
  • ❌ 正規表現のサポートは限定的です(後方参照/先読みには非対応)
  • ❌ 引用およびメッセージのプレフィルとは併用できません
  • ⚠️ 文法のコンパイルにより、初回リクエストのレイテンシーが増加します(24 時間キャッシュされます)

使用する場面:

  • 非構造化テキストからのデータ抽出
  • API レスポンスのフォーマット
  • 検証済みのツール入力を必要とするエージェント型ワークフロー
  • JSON パースエラーの解消
2. モデルの変更(2025年10月)- 破壊的変更

廃止(エラーが返されます):

  • ❌ Claude 3.5 Sonnet(すべてのバージョン)
  • ❌ Claude 3.7 Sonnet - 非推奨(2025年10月28日)

利用可能なモデル(2025年11月):

モデルIDコンテキスト最適な用途コスト(100万トークンあたり)
Claude Sonnet 4.5claude-sonnet-4-5-20250929200kバランスの取れた性能$3/$15(入力/出力)
Claude Opus 4claude-opus-4-20250514200k最高水準の性能$15/$75
Claude Haiku 4.5claude-3-5-haiku-20241022200k最先端に近い性能、高速$1/$5
3. コンテキスト管理(2025年10月28日)

思考ブロックのクリア - 思考ブロックを自動的にクリーンアップします:

const message = await anthropic.messages.create({
  model: 'claude-sonnet-4-5-20250929',
  max_tokens: 4096,
  messages: [{ role: 'user', content: 'Solve complex problem' }],
  betas: ['clear_thinking_20251015']
});
// Thinking blocks automatically managed
4. エージェントスキル API(2025年10月16日)

Office ファイル(PowerPoint、Excel、Word、PDF)向けの事前構築済みスキル:

const message = await anthropic.messages.create({
  model: 'claude-sonnet-4-5-20250929',
  max_tokens: 1024,
  messages: [{ role: 'user', content: 'Analyze this spreadsheet' }],
  betas: ['skills-2025-10-02'],
  // Requires code execution tool enabled
});

📚 ドキュメント:https://platform.claude.com/docs/en/build-with-claude/structured-outputs


ストリーミング応答(SSE)

重要なエラーパターン - エラーは最初の 200 応答の後に発生します:

const stream = anthropic.messages.stream({
  model: 'claude-sonnet-4-5-20250929',
  max_tokens: 1024,
  messages: [{ role: 'user', content: 'Hello' }],
});

stream
  .on('error', (error) => {
    // Error can occur AFTER stream starts
    console.error('Stream error:', error);
    // Implement fallback or retry logic
  })
  .on('abort', (error) => {
    console.warn('Stream aborted:', error);
  });

重要な理由:通常の HTTP エラーとは異なり、SSE エラーは 200 OK の後、ストリームの途中で発生するため、エラーイベントリスナーが必要です。


プロンプトキャッシュ(⭐ コストを 90% 削減)

重要なルール - cache_control は最後のブロックに指定する必要があります:

const message = await anthropic.messages.create({
  model: 'claude-sonnet-4-5-20250929',
  max_tokens: 1024,
  system: [
    {
      type: 'text',
      text: 'System instructions...',
    },
    {
      type: 'text',
      text: LARGE_CODEBASE, // 50k tokens
      cache_control: { type: 'ephemeral' }, // ← MUST be on LAST block
    },
  ],
  messages: [{ role: 'user', content: 'Explain auth module' }],
});

// Monitor cache usage
console.log('Cache reads:', message.usage.cache_read_input_tokens);
console.log('Cache writes:', message.usage.cache_creation_input_tokens);

最小要件:

  • Claude Sonnet 4.5:最小 1,024 トークン
  • Claude Haiku 4.5:最小 2,048 トークン
  • TTL は 5 分(使用のたびに更新されます)
  • キャッシュは内容が完全に一致する場合にのみ共有されます

ツール使用(関数呼び出し)

重要なパターン:

厳密なツール使用(構造化出力を使用):

const message = await anthropic.messages.create({
  model: 'claude-sonnet-4-5-20250929',
  max_tokens: 1024,
  betas: ['structured-outputs-2025-11-13'],
  tools: [{
    name: 'get_weather',
    description: 'Get weather data',
    input_schema: {
      type: 'object',
      properties: {
        location: { type: 'string' },
        unit: { type: 'string', enum: ['celsius', 'fahrenheit'] }
      },
      required: ['location'],
      additionalProperties: false
    },
    strict: true  // ← Guarantees schema compliance
  }],
  messages: [{ role: 'user', content: 'Weather in NYC?' }]
});

ツール結果のパターン - tool_use_id を一致させる必要があります:

const toolResults = [];
for (const block of response.content) {
  if (block.type === 'tool_use') {
    const result = await executeToolFunction(block.name, block.input);

    toolResults.push({
      type: 'tool_result',
      tool_use_id: block.id,  // ← MUST match tool_use block id
      content: JSON.stringify(result),
    });
  }
}

messages.push({
  role: 'user',
  content: toolResults,
});

エラー処理 - ツールの実行失敗に対処します:

try {
  const result = await executeToolFunction(block.name, block.input);
  toolResults.push({
    type: 'tool_result',
    tool_use_id: block.id,
    content: JSON.stringify(result),
  });
} catch (error) {
  // Return error to Claude for handling
  toolResults.push({
    type: 'tool_result',
    tool_use_id: block.id,
    is_error: true,
    content: `Tool execution failed: ${error.message}`,
  });
}

ビジョン(画像理解)

重要なルール:

  • 形式:JPEG、PNG、WebP、GIF(アニメーションなし)
  • 最大サイズ:画像 1 枚あたり 5MB
  • Base64 のオーバーヘッド:サイズが約 33% 増加します
  • コンテキストへの影響:画像はトークン上限に含まれます
  • キャッシュ:画像を繰り返し分析する場合はキャッシュを検討してください

形式の検証 - エンコード前に確認します:

const validFormats = ['image/jpeg', 'image/png', 'image/webp', 'image/gif'];
if (!validFormats.includes(mimeType)) {
  throw new Error(`Unsupported format: ${mimeType}`);
}

拡張思考モード

⚠️ モデルの互換性:

  • ❌ Claude 3.7 Sonnet - 非推奨(2025年10月28日)
  • ❌ Claude 3.5 Sonnet - 廃止(サポート対象外)
  • ✅ Claude Sonnet 4.5 - 拡張思考に対応
  • ✅ Claude Opus 4 - 拡張思考に対応

重要:

  • 思考ブロックはキャッシュできません
  • より大きい max_tokens が必要です(思考がトークンを消費します)
  • 思考ブロックを想定する前にモデルを確認してください

レート制限

重大なパターン - 指数バックオフを用い、retry-after ヘッダーを尊重してください。

async function makeRequestWithRetry(
  requestFn: () => Promise<any>,
  maxRetries = 3,
  baseDelay = 1000
): Promise<any> {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      return await requestFn();
    } catch (error) {
      if (error.status === 429) {
        // CRITICAL: Use retry-after header if present
        const retryAfter = error.response?.headers?.['retry-after'];
        const delay = retryAfter
          ? parseInt(retryAfter) * 1000
          : baseDelay * Math.pow(2, attempt);

        console.warn(`Rate limited. Retrying in ${delay}ms...`);
        await new Promise(resolve => setTimeout(resolve, delay));
      } else {
        throw error;
      }
    }
  }
  throw new Error('Max retries exceeded');
}

レート制限ヘッダー:

  • anthropic-ratelimit-requests-limit - 許可される合計 RPM
  • anthropic-ratelimit-requests-remaining - 残りのリクエスト数
  • anthropic-ratelimit-requests-reset - リセット時刻

エラー処理

一般的なエラーコード:

ステータスエラータイプ原因解決策
400invalid_request_errorパラメーターが不正ですリクエスト本文を検証してください
401authentication_errorAPI キーが無効です環境変数を確認してください
403permission_error機能へのアクセス権がありませんアカウントのプランを確認してください
404not_found_errorエンドポイントが無効ですAPI バージョンを確認してください
429rate_limit_errorリクエストが多すぎますリトライ処理を実装してください
500api_error内部エラーですバックオフして再試行してください
529overloaded_errorシステムが過負荷状態です後でもう一度お試しください

重要:

  • ストリーミングエラーは、最初の 200 レスポンスの後に発生します
  • ストリームには必ずエラーイベントリスナーを実装してください
  • 429 エラーでは retry-after ヘッダーを尊重してください
  • 重要な操作にはフォールバック戦略を用意してください

既知の問題の防止

このスキルは、文書化されている 12 件の問題を防止します。

問題 #1:バックオフなしで発生する 429 レート制限エラー

エラー:429 Too Many Requests: Number of request tokens has exceeded your per-minute rate limit 出典:https://docs.claude.com/en/api/errors 発生する理由:RPM、TPM、または 1 日あたりのトークン制限を超過するため 防止策:retry-after ヘッダーを尊重する指数バックオフを実装します

問題 #2:ストリーミング SSE の解析エラー

エラー:チャンクが不完全、SSE イベントの形式が不正 出典:一般的な SDK の問題(GitHub #323) 発生する理由:ネットワークの中断、イベントの解析方法が不適切なため 防止策:SDK のストリームヘルパーを使用し、エラーイベントリスナーを実装します

問題 #3:プロンプトキャッシュが有効にならない

エラー:cache_control ブロックがあるにもかかわらずコストが高い 出典:https://platform.claude.com/docs/en/build-with-claude/prompt-caching 発生する理由:cache_control の配置が不適切なため(末尾に置く必要があります) 防止策:キャッシュ可能なコンテンツの最後のブロックに、必ず cache_control を配置します

問題 #4:ツール使用時のレスポンス形式エラー

エラー:invalid_request_error: tools[0].input_schema is invalid 出典:API の検証エラー 発生する理由:JSON Schema が無効、必須フィールドが不足しているため 防止策:JSON Schema バリデーターでスキーマを検証し、十分にテストします

問題 #5:ビジョンでの画像形式の問題

エラー:invalid_request_error: image source must be base64 or url 出典:API ドキュメント 発生する理由:エンコードが不正、対応していない形式のため 防止策:形式(JPEG/PNG/WebP/GIF)と、base64 エンコードが適切かを検証します

問題 #6:課金時のトークン数の不一致

エラー:想定外の高額なコスト、コンテキストウィンドウ超過 出典:トークン数のカウント方法の違い 発生する理由:特殊トークンやフォーマットを考慮していないため 防止策:公式のトークンカウンターを使用し、使用量ヘッダーを監視します

問題 #7:システムプロンプトの順序に関する問題

エラー:システムプロンプトが無視される、または上書きされる 出典:API の動作 発生する理由:システムプロンプトが messages 配列の後に配置されているため 防止策:システムプロンプトは必ず messages の前に配置します

問題 #8:コンテキストウィンドウの超過(200k)

エラー:invalid_request_error: messages: too many tokens 出典:モデルの制限 発生する理由:会話が長くなっても履歴を整理していないため 防止策:メッセージ履歴を整理する処理を実装し、キャッシュを使用します

問題 #9:誤ったモデルでの拡張思考

エラー:レスポンスに思考ブロックがない 出典:モデルの機能 発生する理由:廃止済みまたは非推奨のモデル(3.5/3.7 Sonnet)を使用しているため 防止策:拡張思考には Claude Sonnet 4.5 または Claude Opus 4 のみを使用します

Issue #10: クライアントコードでの API キーの露出

エラー:CORS エラー、セキュリティ上の脆弱性 原因:セキュリティのベストプラクティス 発生する理由:ブラウザーから API を呼び出している 防止策:サーバー側のみで処理し、環境変数を使用する

Issue #11: レート制限のティアに関する混乱

エラー:想定より低い制限 原因:アカウントのティア制度 発生する理由:ティアの段階的な移行を理解していない 防止策:Console で現在のティアを確認する。使用状況に応じて自動的にスケールします

Issue #12: Message Batches のベータヘッダーが不足

エラー:invalid_request_error: unknown parameter: batches 原因:ベータ API の要件 発生する理由:anthropic-beta ヘッダーが不足している 防止策:anthropic-beta: message-batches-2024-09-24 ヘッダーを含める


公式ドキュメント


パッケージのバージョン

最新: @anthropic-ai/[email protected] (Nov 20, 2025)

{
  "dependencies": {
    "@anthropic-ai/sdk": "^0.70.1"
  },
  "devDependencies": {
    "@types/node": "^20.0.0",
    "typescript": "^5.3.0",
    "zod": "^3.23.0"
  }
}

トークン効率:

  • スキルなし:~8,000 トークン(基本設定、ストリーミング、キャッシュ、ツール、ビジョン、エラー)
  • スキルあり:~4,200 トークン(知識の不足部分、エラー防止、重要なパターン)
  • 削減量:~48%(~3,800 トークン)

防止できるエラー:解決策を明記した 12 件の問題 主な価値:構造化出力(v0.69.0+)、モデルの非推奨化(Oct 2025)、プロンプトキャッシュのエッジケース、ストリーミングのエラーパターン、レート制限の再試行ロジック


最終確認日:2025-11-22 | スキルのバージョン:2.0.0 | 変更点:構造化出力(v0.69.0)を追加、モデル表を更新(3.5/3.7 を廃止)、コンテキスト管理とエージェントスキル API を追加。基本チュートリアル(約 380 行)を削除。知識の不足部分、エラー防止、高度なパターンに重点を置いています。

コメント