第2章:生のリクエスト

ほとんどのチュートリアルでは pip install anthropic を実行するように指示します。しかし、私たちはそうしません。

SDKは真実を隠します。抽象化層を追加することで「Hello World」は簡単になりますが、「Error 400」のデバッグは悪夢となります。SDKを学ぶとき、あなたはSDKを学んでいるだけです。生のHTTPリクエストを学ぶとき、あなたはすべてのSDKの下にあるプロトコルを学びます。

私たちは requests ライブラリだけを使ってClaudeにメッセージを送信します。ClaudeはAnthropicの主力LLMで、コーディングタスクに関して最も優れたモデルの1つです。

APIキーの取得

Claudeと対話するには、APIキーが必要です。これはあなたのクレジットカードのように機能する長い文字列です。

  1. Anthropic Console にアクセスします。1
  2. サインアップして支払い方法を追加します(最低$5のクレジット)。
  3. 新しいAPIキーを作成し、nanocodeという名前を付けます。
  4. キーをコピーします(sk-ant-...で始まります)。
An icon of a warning1

警告: このキーをパスワードのように扱ってください。このキーを持っている人は誰でもあなたのお金を使うことができます。

保管庫(.env)

このキーを安全に保管する場所が必要です。キーを直接コードに記述することは決してありません。

プロジェクトのルートディレクトリに .env という名前のファイルを作成します:

1 touch .env

開いてキーを貼り付けてください:

1 ANTHROPIC_API_KEY=sk-ant-api03-...

第1章で python-dotenv をインストールしましたが、これはまさにこの目的のためです—.env ファイルを読み込み、その値を os.environ にロードします。

リクエストの構造

LLMと対話するために、以下のURLにHTTP POSTリクエストを送信します:

https://api.anthropic.com/v1/messages

このリクエストには3つの要素が必要です:ヘッダーでの認証(APIキー)、ボディでの設定(使用するモデル、トークン数)、そしてメッセージ本体です。

ヘッダー

Anthropicは3つのヘッダーを必要とします:

ヘッダー 目的
x-api-key シークレットキー 認証
anthropic-version 2023-06-01 APIバージョン
content-type application/json フォーマット

ペイロード

「Messages API」はメッセージ辞書のリストを想定しています:

1 "messages": [
2     {"role": "user", "content": "Hello, world!"}
3 ]

各メッセージにはrole"user"または"assistant"のいずれか)とcontent(テキスト)があります。

コード

test_api.pyというファイルを作成します。これは接続が機能することを証明する「スモークテスト」です。このファイルは後で削除します。

コンテキスト: 線形の手続き型コードを書いています。関数もクラスも使いません。最も基本的なレベルのコードを確認したいのです。

コード:

 1 import os
 2 import requests
 3 import json
 4 from dotenv import load_dotenv
 5 
 6 # 1. Load the vault
 7 load_dotenv()
 8 api_key = os.getenv("ANTHROPIC_API_KEY")
 9 
10 # Basic check so we don't crash with a confusing "NoneType" error later
11 if not api_key:
12     print("Error: ANTHROPIC_API_KEY not found in .env")
13     exit(1)
14 
15 # 2. Define the target
16 url = "https://api.anthropic.com/v1/messages"
17 
18 # 3. Authenticate
19 headers = {
20     "x-api-key": api_key,
21     "anthropic-version": "2023-06-01",
22     "content-type": "application/json"
23 }
24 
25 # 4. Construct the payload
26 payload = {
27     "model": "claude-sonnet-4-6",
28     "max_tokens": 4096,
29     "messages": [
30         {"role": "user", "content": "Hello, are you ready to code?"}
31     ]
32 }
33 
34 # 5. Fire! (No safety net)
35 print("📡 Sending request to Claude...")
36 response = requests.post(url, headers=headers, json=payload, timeout=120)
37 
38 # 6. Inspect the raw result
39 print(f"Status: {response.status_code}")
40 
41 if response.status_code == 200:
42     # Success: Print the beautiful JSON
43     print("Response:")
44     print(json.dumps(response.json(), indent=2))
45 else:
46     # Failure: Print the ugly raw text so we can debug
47     print("Error:", response.text)

コードの詳細解説:

  • 7行目: load_dotenv().env ファイルを見つけて変数を os.environ に読み込みます。
  • 8行目: APIキーを取得します。これは絶対にハードコーディングしてはいけません。
  • 11-13行目: 基本的な健全性チェックです。これがないと、キーが存在しない場合にヘッダー辞書で分かりにくい NoneType エラーが発生します。
  • 21行目: anthropic-version ヘッダーは必須です。これを省略するとAPIに拒否されます。
  • 27行目: claude-sonnet-4-6 は使用したいモデルを指定します。
  • 28行目: max_tokens は必須パラメータです。応答の長さを制限し、予期せぬコストの発生を防ぎます。
  • 36行目: 2分のタイムアウトを設定してリクエストを送信します。try/exceptは使用していません—ネットワークがダウンしている場合は、Pythonをクラッシュさせて、どこで失敗したのかを確認する必要があります。
  • 41-47行目: ステータスコードを確認します。200は成功を意味し(JSONを整形出力します)。それ以外の場合は、デバッグ用に生のエラーテキストを出力します。

実行方法

1 python test_api.py

すべてが正常に動作する場合、以下が表示されるはずです:

Status: 200
Response:
{
  "id": "msg_01...",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "Hello! Yes, I'm ready to code..."
    }
  ],
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 15,
    "output_tokens": 81
  }
}

トラブルシューティング

エラー 原因 解決方法
401 未認証 APIキーが無効 .envが読み込まれているか確認。os.environ.get("ANTHROPIC_API_KEY")を出力して検証。
400 不正なリクエスト JSONの形式が不正 max_tokensの指定を忘れていませんか?messagesはリスト形式ですか?
429 レート制限 リクエストが多すぎる、またはクレジット不足 待機するか、アカウントにクレジットを追加してください。

クリーンアップ

AIと対話できることが確認できました。test_api.pyは不要なので削除しましょう。

An icon of a info-circle1

補足: このtest_api.pyは使い捨てコード(一度きりのスモークテスト)です。本格的な自動テスト(FakeBrainとpytestを使用)は第3章で扱います。APIの接続確認が済んだら、このファイルは必ず削除してください。

An icon of a info-circle1

補足: 支出を監視するには、Anthropic ConsoleのUsageタブを確認してください。2026年初頭の時点では、Claude Sonnetを使用した20-30回のやり取りを含む一般的なコーディングセッションのコストは0.10-0.50ドルです。レスポンスJSONの末尾にあるusageフィールドには正確なトークン数が表示されます—プログラムでコストを追跡する場合にこれらを記録できます。

まとめ

これが生のAPI呼び出しです:ヘッダー、JSONペイロード、レスポンスの解析。あなたと低レベル通信の間に抽象化は存在しません。何か問題が発生したとき(そして必ず発生します)、レイヤーが1つしかないため、どの層で失敗したのかが正確に分かります。

1つ問題があります:Claudeは完全な記憶喪失状態です。リクエストのたびに白紙の状態から始まります。これに対処するため、毎回の対話で会話履歴全体を再送信することで疑似的な記憶を実現します。


  1. https://console.anthropic.com/settings/keys↩︎