Contents
Claude API の概要と提供モデル
Claude API は Anthropic が提供する大規模言語モデル(LLM)向けの RESTful インターフェイスです。2026 年 4 月時点で公式にサポートされているモデルは、品質・レイテンシ・コストの観点で段階的に選択できるよう設計されています。本セクションでは各モデルの特徴と利用シーンを把握し、プロジェクトに最適なモデルを判断するための基礎情報を提供します。
提供されている主要モデル
| モデル名 | Model ID(公式) | 主な特性 | 想定ユースケース |
|---|---|---|---|
| Claude 3 Opus | claude-3-opus-20240229 |
最大のパラメータ数と高い推論精度。長文要約や専門領域の質問に最適。 | 法務・医療レポート作成、学術論文要約 |
| Claude 3 Sonnet | claude-3-sonnet-20240229 |
Opus と比べて若干高速かつコスト抑制。多くの対話シナリオでバランスが良い。 | カスタマーサポートチャット、教育アシスタント |
| Claude 3 Haiku | claude-3-haiku-20240307 |
最小パラメータ数で最速応答・最低価格。軽量な対話やリアルタイム検索に向く。 | モバイルチャット、ゲーム内 NPC |
| Claude 2.1(レガシー) | claude-2.1 |
2024 年リリースの上位互換版。依然として一部レガシー環境で使用可。 | 既存システムとの互換性維持 |
注記:モデル ID は公式ドキュメント「Model IDs」に掲載されている最新情報を参照してください。名称や ID が変更になることがありますので、実装時は必ず最新版をご確認ください。
現行の価格体系(2026 年 4 月時点)
料金は従量課金制で、1,000,000 トークン あたりの単価がモデルごとに定められています。以下は Anthropic が公開している Pricing Page(2026‑04‑01 取得)から抜粋したものです【2】。
| モデル | 1M トークンあたりの価格 (USD) | コメント |
|---|---|---|
claude-3-opus-20240229 |
$15.00 | 最上位モデル。品質が最も高く、コストは最大。 |
claude-3-sonnet-20240229 |
$5.00 | コスパの良い汎用モデル。多くの対話アプリで推奨。 |
claude-3-haiku-20240307 |
$0.80 | 超低コスト・高速応答向け。トークン数が多い場合に有利。 |
claude-2.1 |
$12.00(レガシー) | 後方互換性確保のため残存。新規利用は非推奨。 |
ポイント:価格は為替変動やプロモーションにより随時変更される可能性があります。最新料金は必ず公式ページをご確認ください。
Anthropic アカウント作成と API キー取得手順
Anthropic のサービスを利用するには、まず公式サイトでアカウントを作成し、ダッシュボードから API キー(シークレットトークン)を発行します。本セクションでは安全にキーを取得・管理するまでの流れを段階的に解説します。
アカウント登録
- 公式サイトへアクセス
https://claude.ai/にブラウザで移動し、右上の 「Sign up」 をクリック。 - メールアドレスとパスワードを入力
必要情報を記入後、送信された認証メールのリンクをたどってアカウントを有効化します。
アカウント作成は無料トライアルが提供されているため、まずは試用してから本格導入を検討できます。
組織・プロジェクト設定(任意)
- Organization:左上メニューの「Organization」から組織名や請求情報を登録。
- Projects:複数チームでキーを分離管理したい場合は「Projects」タブで新規プロジェクトを作成し、プロジェクト単位で API キーを発行できます。
API キーの発行と安全な管理
- ダッシュボード左側メニューの 「API Keys」 を選択。
- 「Create new key」 ボタンをクリックすると、一意のシークレット文字列(例:
sk-ant-xxxxxxxxxxxxxxxxxxxx)が生成されます。 - 表示されたキーは 一度だけ 視認可能です。必ず
.envファイルやシークレット管理ツールに保存し、コードベースにハードコーディングしないでください。
認証ヘッダーの正しい記述
公式ドキュメントでは Authorization ヘッダー のみが推奨されています。以下の形式でリクエストに付与してください。
|
1 2 |
Authorization: Bearer <YOUR_API_KEY> |
x-api-key は過去の互換性用として残っているものの、将来的に非推奨になる可能性があります。そのため 新規実装では Authorization ヘッダーのみを使用 してください。
環境構築と基本リクエスト実装
本章では Python と Node.js の両環境で Claude API に接続するまでの手順を示します。認証ヘッダー、モデル ID の正しい指定方法、そして最小限のエラーハンドリングを含めたサンプルコードを掲載しています。
Python 環境のセットアップ
|
1 2 3 4 5 6 7 |
# 1. 仮想環境作成(推奨) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # 2. 必要パッケージインストール pip install requests python-dotenv |
.env ファイル例(プロジェクトルート):
|
1 2 |
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxx |
Node.js 環境のセットアップ
|
1 2 3 4 5 6 |
# 1. プロジェクト初期化 npm init -y # 2. 必要パッケージインストール npm install axios dotenv |
.env(プロジェクトルート):
|
1 2 |
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxx |
/v1/messages エンドポイントへのリクエスト例
メッセージフォーマットの基本構造
以下は Claude 3 Sonnet を呼び出す最小構成です。model フィールドには公式ドキュメントに記載された正確な ID を使用してください。
|
1 2 3 4 5 6 7 8 9 10 |
{ "model": "claude-3-sonnet-20240229", "messages": [ {"role": "system", "content": "You are a helpful AI assistant."}, {"role": "user", "content": "日本の首都はどこですか?"} ], "max_tokens": 256, "temperature": 0.7 } |
Python 実装例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import os, json, requests from dotenv import load_dotenv load_dotenv() API_KEY = os.getenv("ANTHROPIC_API_KEY") url = "https://api.anthropic.com/v1/messages" payload = { "model": "claude-3-sonnet-20240229", "messages": [ {"role": "system", "content": "You are a helpful AI assistant."}, {"role": "user", "content": "日本の首都はどこですか?"} ], "max_tokens": 256, "temperature": 0.7 } headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } response = requests.post(url, headers=headers, json=payload) print(json.dumps(response.json(), ensure_ascii=False, indent=2)) |
Node.js 実装例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
require('dotenv').config(); const axios = require('axios'); const API_KEY = process.env.ANTHROPIC_API_KEY; const url = 'https://api.anthropic.com/v1/messages'; const payload = { model: 'claude-3-sonnet-20240229', messages: [ { role: 'system', content: 'You are a helpful AI assistant.' }, { role: 'user', content: '日本の首都はどこですか?' } ], max_tokens: 256, temperature: 0.7 }; axios.post(url, payload, { headers: { Authorization: `Bearer ${API_KEY}`, 'Content-Type': 'application/json' } }) .then(res => console.log(JSON.stringify(res.data, null, 2))) .catch(err => console.error('Error:', err.response?.data || err.message)); |
ポイント:
modelに指定できる文字列は公式「[Model IDs]」ページをご参照ください。誤った ID を送信するとinvalid_request_errorが返ります。
高度機能ガイド
Claude API は基本的な対話だけでなく、外部ツール呼び出し(Tool Use)やストリーミング応答、プロンプトキャッシングといった高度な機能も提供しています。本章ではそれぞれの有効化手順と実装上の注意点を具体例付きで解説します。
Tool Use の利用方法とレスポンス構造
Tool Use は Claude が関数呼び出し形式(function calling)で外部 API をトリガーできる機能です。使用するには tools 配列にシグネチャを定義し、tool_choice で自動または明示的な呼び出し方を指定します。
ツールシグネチャの例(天気取得)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "name": "get_weather", "description": "指定した都市の現在の天気情報を返す", "input_schema": { "type": "object", "properties": { "city": {"type": "string", "description": "取得対象の都市名"} }, "required": ["city"] } } |
リクエストに組み込む例(Python)
|
1 2 3 |
payload["tools"] = [weather_tool] payload["tool_choice"] = "auto" # Claude が必要と判断したら自動で呼び出す |
実際のレスポンス構造
Claude がツールを呼び出す場合、type: "tool_use" のオブジェクトが content 配列に含まれます。主要フィールドは次の通りです。
| フィールド | 型 | 説明 |
|---|---|---|
type |
string | 固定で "tool_use" |
id |
string | ツール呼び出しを一意に識別する ID(後続レスポンスで参照) |
name |
string | 呼び出されたツール名(シグネチャの name と一致) |
input |
object | シグネチャに従った引数オブジェクト |
Claude からの Tool Result(ツール実行後の応答)は以下のような構造になります。
|
1 2 3 4 5 6 |
{ "type": "tool_result", "tool_use_id": "<id from tool_use>", "content": "晴れ、気温 22°C" } |
完全フロー(Python)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
response = requests.post(url, headers=headers, json=payload) data = response.json() if data.get("type") == "tool_use": for call in data["content"]: if call["type"] == "tool_use" and call["name"] == "get_weather": city = call["input"]["city"] weather = fetch_weather(city) # 任意の天気 API 呼び出し follow_up_payload = { "model": payload["model"], "messages": payload["messages"] + [ {"role": "assistant", "content": None, "tool_use_id": call["id"]}, {"role": "tool", "name": "get_weather", "content": weather} ] } final_resp = requests.post(url, headers=headers, json=follow_up_payload) print(final_resp.json()) |
注意点:
tool_callsというキーは旧バージョンの OpenAI API に見られる表記です。Claude の最新スキーマではtype: "tool_use"とtype: "tool_result"を使用してください。
ストリーミングレスポンスの取得とリアルタイム処理
長文生成や対話 UI で即時フィードバックが必要な場合、stream=true パラメータを付与して SSE(Server‑Sent Events) または HTTP Chunked 形式でトークン単位の配信を受け取ります。
Python 実装例(requests + sseclient)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import json, requests, sseclient payload["stream"] = True response = requests.post(url, headers=headers, json=payload, stream=True) client = sseclient.SSEClient(response) for event in client.events(): chunk = json.loads(event.data) if "error" in chunk: print("Error:", chunk["error"]) break # `completion` に増分トークンが格納される print(chunk.get("completion", ""), end="", flush=True) print("\n--- 完了 ---") |
Node.js 実装例(axios + eventsource-parser)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
const { EventSourceParser } = require('eventsource-parser'); payload.stream = true; axios.post(url, payload, { headers, responseType: 'stream' }).then(res => { const parser = new EventSourceParser(event => { if (event.type === 'data') { const data = JSON.parse(event.data); if (data.error) { console.error('Error:', data.error); return; } process.stdout.write(data.completion || ''); } }); res.data.on('data', chunk => parser.feed(chunk.toString())); res.data.on('end', () => console.log('\n--- 完了 ---')); }); |
ベストプラクティス:ネットワーク障害時は自動再接続ロジックとトークンバッファリングを実装し、ユーザー体験の中断を最小限に抑えましょう。
プロンプトキャッシングの設定とベストプラクティス
同一リクエスト内容(messages と model が完全一致)の場合、Claude は キャッシュ を利用して計算コストとレイテンシを削減できます。2026 年版 API では以下のヘッダーで制御します。
| ヘッダー | 値例 | 効果 |
|---|---|---|
anthropic-cache-control |
max-age=3600 |
応答を最大 1 時間キャッシュ。TTL(有効期限)を秒単位で指定。 |
Python でのキャッシュ有効化例
|
1 2 3 4 5 |
headers.update({ "anthropic-cache-control": "max-age=86400", # 24時間キャッシュ "Authorization": f"Bearer {API_KEY}" }) |
利用シーンと注意点
| シナリオ | 推奨 TTL | 留意点 |
|---|---|---|
| FAQ ボット(質問が限定的) | 6〜12 h | 質問パターンが安定している場合は長めに設定。 |
| ニュース要約(情報更新頻度高) | 60 s 以下 | 最新性が重要なため極短 TTL が必要。 |
| 定型レポート生成(毎日同一テンプレート) | 86,400 s (24 h) | テンプレート自体は変わらないので長期キャッシュでコスト削減。 |
モニタリング:レスポンスヘッダー
X-Cache-Status(HIT,MISS,STALE)をロギングし、キャッシュヒット率を定量的に評価すると効果測定が容易です。
エラーハンドリング・デバッグ・セキュリティ指針
API 呼び出しは外部サービスへの依存であるため、障害時の復旧や情報漏洩防止策を事前に設計しておくことが重要です。本章では代表的な HTTP ステータスコードと対処法、再試行ロジック、そして安全な運用のためのロギング・監査手順をまとめます。
主なステータスコードと推奨対策
| ステータス | JSON type(例) |
典型的な原因 | 推奨対応 |
|---|---|---|---|
| 400 | invalid_request_error |
パラメータ欠落・JSON 構文エラー | リクエスト構造をバリデーションツールで検証 |
| 401 | authentication_error |
API キーが無効またはヘッダー未設定 | .env のキーを再確認し、Authorization ヘッダー使用 |
| 403 | permission_error |
組織のクォータ超過や権限不足 | ダッシュボードで利用枠を拡張、またはプロジェクト単位でキーを分割 |
| 429 | rate_limit_exceeded |
短時間にリクエストが集中 | エクスポネンシャルバックオフとレートリミッタ実装 |
| 500‑504 | internal_server_error |
サービス側の一時的障害 | 最大 3 回まで再試行し、障害通知を Slack 等へ送信 |
Python の再試行ロジック例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import time, random, requests, json def call_claude(payload): for attempt in range(4): # 初回 + 3 回リトライ try: resp = requests.post(url, headers=headers, json=payload) resp.raise_for_status() return resp.json() except requests.HTTPError as e: if resp.status_code in (429, 500, 502, 503, 504): backoff = (2 ** attempt) + random.random() time.sleep(backoff) continue raise # その他は即座に例外送出 raise RuntimeError("リトライ上限を超えました") |
Node.js の再試行ロジック例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
const axios = require('axios'); async function callClaude(payload) { for (let i = 0; i < 4; i++) { try { const res = await axios.post(url, payload, { headers }); return res.data; } catch (err) { const code = err.response?.status; if ([429, 500, 502, 503, 504].includes(code)) { const backoff = Math.pow(2, i) * 1000 + Math.random() * 200; await new Promise(r => setTimeout(r, backoff)); continue; } throw err; // その他は上位へ伝搬 } } throw new Error('最大リトライ回数に達しました'); } |
ロギング・監査と可観測性のベストプラクティス
| 項目 | 推奨ロガー例 |
|---|---|
リクエスト ID (x-request-id) |
logging(Python)/pino(Node.js)で JSON 形式出力 |
| タイムスタンプ | ISO8601 で統一 |
ステータスコード・レスポンスヘッダー (X-Cache-Status) |
同上 |
| エラーメッセージ | 構造化された error フィールドに格納 |
実装例(Python)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import logging, json logging.basicConfig( level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s', handlers=[logging.FileHandler('claude.log'), logging.StreamHandler()] ) def log_request(resp): logger = logging.getLogger() logger.info(json.dumps({ "request_id": resp.headers.get("x-request-id"), "status": resp.status_code, "cache_status": resp.headers.get("X-Cache-Status") })) |
実装例(Node.js)
|
1 2 3 4 5 6 7 8 9 10 11 |
const pino = require('pino'); const logger = pino({ level: 'info', prettyPrint: true }); function logResponse(res) { logger.info({ request_id: res.headers['x-request-id'], status: res.status, cache_status: res.headers['x-cache-status'] }); } |
データ保持ポリシーと機密情報取扱い
Anthropic の利用規約に基づき、送信されたプロンプトと生成結果は最大 30 日間保存され、サービス改善目的で使用されます【1】。機密データを扱う際は以下の対策が必須です。
- 入力前マスキング:個人情報や社内シークレットは正規表現等で除去またはハッシュ化してから送信。
- 暗号化されたシークレット管理:
.envだけでなく、GitHub Actions のsecrets、AWS Secrets Manager 等を併用。 - 最小権限の API キー発行:プロジェクト単位でキーを分割し、不要な権限は付与しない。
- 定期的な監査ログレビュー:
x-request-idとタイムスタンプでアクセスパターンを分析し、不審な利用が検出されたら直ちにキーをローテーション。
ポイント:上記のセキュリティ対策は、Anthropic が要求する「安全な使用」基準だけでなく、社内コンプライアンスや GDPR・CCPA といった法規制への適合にも寄与します。
まとめ
- モデル選択:Claude 3 系列(Opus / Sonnet / Haiku)を公式 Model ID で指定し、料金は公式 Pricing ページの最新情報を参照。
- 認証:
Authorization: Bearer <API_KEY>ヘッダーのみ使用し、x-api-keyは非推奨。キーは.envやシークレット管理サービスで安全に保管。 - 環境構築:Python と Node.js のセットアップ手順と
/v1/messagesへの最小リクエスト例を示したので、すぐに動作確認が可能。 - 高度機能:Tool Use は
type: "tool_use"/type: "tool_result"スキーマで実装し、ストリーミングは SSE または Chunked でリアルタイム取得。プロンプトキャッシングはanthropic-cache-controlヘッダーで制御。 - エラーハンドリング:ステータスコード別の対策表と指数バックオフによる再試行ロジックを実装し、ロギング・監査体制も整備。
- セキュリティ:データ保持ポリシーに留意し、入力前マスキング・最小権限キー・定期的なログレビューで情報漏洩リスクを低減。
以上の手順とベストプラクティスを踏めば、2026 年版 Claude API を安全かつコスト効果的に自社プロダクトへ組み込むことができます。ぜひ本ガイドを開発・運用チームで共有し、継続的な改善サイクルの基盤として活用してください。
参考文献
- Anthropic 利用規約(2026‑04‑01 取得) – https://www.anthropic.com/terms
- Claude Pricing Page(2026‑04‑01 取得) – https://docs.anthropic.com/claude/docs/pricing
- Model IDs(公式) – https://docs.anthropic.com/claude/reference/model-ids