Claude APIの使い方完全ガイド|Python実装付き
Claude APIのセットアップからPython実装まで完全解説。ストリーミング・画像入力・実用コード例付きですぐに動かせます。
この記事でできるようになること
- Claude APIのキーを取得して環境構築する
- Pythonから基本的なAPI呼び出しを行う
- ストリーミング、画像入力、システムプロンプトを使いこなす
- 実用的なツール(要約・翻訳・コードレビュー)を作る
所要時間: 環境構築含めて約30分。Pythonの基礎知識があれば問題ありません。
ステップ1:APIキーの取得
Anthropicアカウントの作成
- Anthropic Console にアクセス
- メールアドレスでアカウント作成(Google / GitHubログインも可)
- 電話番号認証を完了
APIキーの発行
- ダッシュボードの「API Keys」セクションへ移動
- 「Create Key」をクリック
- キーに名前を付ける(例:
my-project) - 表示されたキーをコピーして安全な場所に保存
注意: APIキーは一度しか表示されません。紛失した場合は新しいキーを発行してください。
料金について
Claude APIは従量課金制です。主なモデルの料金:
| モデル | 入力($/1Mトークン) | 出力($/1Mトークン) |
|---|---|---|
| Claude 3.5 Sonnet | $3.00 | $15.00 |
| Claude 3.5 Haiku | $0.25 | $1.25 |
新規登録で$5分の無料クレジットが付与されます(2026年2月時点)。
料金の詳細やコスト削減テクニックはOpenAI API料金ガイドも参考になります(考え方は共通です)。
ステップ2:Python環境のセットアップ
必要なもの
- Python 3.9以上
- pip(パッケージマネージャー)
インストール
pip install anthropic
環境変数の設定
APIキーを環境変数に設定します。コードに直接書くのはセキュリティ上NGです。
# macOS / Linux
export ANTHROPIC_API_KEY="sk-ant-xxxxx"
# Windows (PowerShell)
$env:ANTHROPIC_API_KEY="sk-ant-xxxxx"
恒久的に設定する場合は.bashrcや.zshrcに追記するか、.envファイル + python-dotenvを使いましょう。
# .env ファイル
ANTHROPIC_API_KEY=sk-ant-xxxxx
from dotenv import load_dotenv
load_dotenv()
ステップ3:基本的なAPI呼び出し
最小限のコード
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[
{"role": "user", "content": "Pythonでフィボナッチ数列を生成する関数を書いて"}
]
)
print(message.content[0].text)
これだけで動きます。ANTHROPIC_API_KEY環境変数が設定されていれば、クライアントが自動的に読み取ります。
レスポンスの構造
# message オブジェクトの主要プロパティ
message.id # メッセージID
message.content # レスポンス内容(リスト)
message.model # 使用されたモデル
message.usage # トークン使用量
.input_tokens # 入力トークン数
.output_tokens # 出力トークン数
message.stop_reason # 停止理由("end_turn", "max_tokens"等)
ステップ4:システムプロンプト
システムプロンプトでAIの振る舞いを制御できます。
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
system="あなたはシニアPythonエンジニアです。コードレビューでは、バグ・パフォーマンス・可読性の3点に絞って簡潔に指摘してください。",
messages=[
{"role": "user", "content": "このコードをレビューして:\n\ndef calc(x):\n result = []\n for i in range(len(x)):\n if x[i] > 0:\n result.append(x[i] * 2)\n return result"}
]
)
マルチターン会話
会話の履歴をmessages配列に積み上げることで、文脈を維持した対話が可能です。
conversation = []
def chat(user_message: str) -> str:
conversation.append({"role": "user", "content": user_message})
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
system="あなたは親切なアシスタントです。",
messages=conversation
)
assistant_message = message.content[0].text
conversation.append({"role": "assistant", "content": assistant_message})
return assistant_message
# 使い方
print(chat("東京の有名な観光スポットを3つ教えて"))
print(chat("その中で子供連れにおすすめなのは?")) # 前の回答を覚えている
ステップ5:ストリーミング
長い回答をリアルタイムに表示したい場合、ストリーミングが便利です。
with client.messages.stream(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[
{"role": "user", "content": "機械学習の主要アルゴリズムを5つ、それぞれ100字で説明して"}
]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
print() # 改行
Webアプリでチャットボットを作る際には必須のテクニックです。
ステップ6:画像入力(Vision)
Claude 3.5 Sonnetは画像を理解できます。
Base64エンコードで送信
import base64
def analyze_image(image_path: str, question: str) -> str:
with open(image_path, "rb") as f:
image_data = base64.standard_b64encode(f.read()).decode("utf-8")
# 拡張子からメディアタイプを判定
media_type = "image/jpeg" if image_path.endswith(".jpg") else "image/png"
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": media_type,
"data": image_data,
}
},
{
"type": "text",
"text": question
}
]
}]
)
return message.content[0].text
# 使い方
result = analyze_image("receipt.jpg", "このレシートの合計金額はいくら?")
print(result)
URL指定で送信
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "url",
"url": "https://example.com/chart.png"
}
},
{
"type": "text",
"text": "このグラフのトレンドを分析して"
}
]
}]
)
実用例3つ
実用例1:テキスト要約ツール
def summarize(text: str, max_sentences: int = 3) -> str:
message = client.messages.create(
model="claude-3-5-haiku-20241022", # 要約にはHaikuで十分
max_tokens=512,
system=f"与えられたテキストを{max_sentences}文以内で要約してください。重要なポイントを漏らさず、簡潔にまとめてください。",
messages=[{"role": "user", "content": text}]
)
return message.content[0].text
# 使い方
long_article = """(長い記事テキスト)"""
summary = summarize(long_article)
print(summary)
コスパのためにHaikuを使っているのがポイント。要約タスクではSonnetと遜色ない品質が出ます。
実用例2:高品質翻訳
def translate(text: str, source_lang: str = "英語", target_lang: str = "日本語") -> str:
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=2048,
system=f"""あなたはプロの翻訳者です。{source_lang}から{target_lang}に翻訳してください。
ルール:
- 自然で読みやすい{target_lang}にする(直訳しない)
- 技術用語は一般的なカタカナ表記を使用
- 原文のトーンを維持する
- 翻訳のみを出力(説明や注釈は不要)""",
messages=[{"role": "user", "content": text}]
)
return message.content[0].text
# 使い方
english_text = "The transformer architecture revolutionized natural language processing."
japanese = translate(english_text)
print(japanese)
# → 「Transformerアーキテクチャは自然言語処理に革命をもたらしました。」
実用例3:コードレビューBot
def review_code(code: str, language: str = "Python") -> str:
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=2048,
system=f"""あなたはシニア{language}エンジニアです。以下の観点でコードレビューしてください:
1. **バグ**: 潜在的なバグやエッジケース
2. **パフォーマンス**: 改善可能な非効率な処理
3. **可読性**: 命名、構造、コメントの改善点
4. **セキュリティ**: 脆弱性やリスク
各指摘には「修正前→修正後」のコード例を付けてください。問題がなければ「LGTM」と回答してください。""",
messages=[{"role": "user", "content": f"```{language.lower()}\n{code}\n```"}]
)
return message.content[0].text
# 使い方
my_code = """
def get_user(user_id):
query = f"SELECT * FROM users WHERE id = {user_id}"
result = db.execute(query)
return result[0]
"""
review = review_code(my_code)
print(review)
# → SQLインジェクション脆弱性、IndexErrorの可能性を指摘してくれる
エラーハンドリング
本番環境では適切なエラーハンドリングが必須です。
import anthropic
import time
def safe_completion(messages, retries=3):
for attempt in range(retries):
try:
return client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=messages
)
except anthropic.RateLimitError:
wait = 2 ** attempt # 指数バックオフ
print(f"レート制限。{wait}秒待機...")
time.sleep(wait)
except anthropic.APIError as e:
print(f"APIエラー: {e}")
raise
raise Exception("最大リトライ回数を超えました")
まとめ
Claude APIはシンプルなインターフェースで強力な機能を提供しています。特に日本語タスクでの品質は高く、翻訳やライティングでは他のAPIを上回る場面が多いです。
この記事のコードはすべてコピペで動作します。まずは基本的なAPI呼び出しから試して、徐々にストリーミングや画像入力に挑戦してみてください。
各AIの性能比較はChatGPT vs Claude vs Gemini 徹底比較も合わせてどうぞ。
Claude API