AI Tool Lab
•API実装•AI Tool Lab編集部

Claude APIの使い方完全ガイド|Python実装付き

Claude APIのセットアップからPython実装まで完全解説。ストリーミング・画像入力・実用コード例付きですぐに動かせます。

#Claude#Anthropic#API#Python#実装ガイド

この記事でできるようになること

  • Claude APIのキーを取得して環境構築する
  • Pythonから基本的なAPI呼び出しを行う
  • ストリーミング、画像入力、システムプロンプトを使いこなす
  • 実用的なツール(要約・翻訳・コードレビュー)を作る

所要時間: 環境構築含めて約30分。Pythonの基礎知識があれば問題ありません。

ステップ1:APIキーの取得

Anthropicアカウントの作成

  1. Anthropic Console にアクセス
  2. メールアドレスでアカウント作成(Google / GitHubログインも可)
  3. 電話番号認証を完了

APIキーの発行

  1. ダッシュボードの「API Keys」セクションへ移動
  2. 「Create Key」をクリック
  3. キーに名前を付ける(例:my-project)
  4. 表示されたキーをコピーして安全な場所に保存

注意: 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

A
AI Tool Lab編集部更新: 2026-02-14

AIツールの実践的な比較・レビューを専門とする編集チーム。エンジニア・データサイエンティストが実際にツールを使い込んで検証しています。

AIツール比較API実装機械学習プロンプトエンジニアリング