Claude APIガイド:2026年AnthropicのClaudeでAIアプリを作る

Claude APIガイド:2026年AnthropicのClaudeでAIアプリを作る

Claude API完全ガイド。認証、リクエスト、ストリーミング、ツール使用、実践AIアプリ構築まで。

2026年3月17日4分で読了

Claude APIとは

AnthropicのClaudeは、2026年現在、最も高い評価を受けているLLM(大規模言語モデル)の一つです。Claude APIを使うことで、チャットボット、コード生成ツール、文書要約システム、マルチエージェントシステムなど、さまざまなAIアプリケーションを構築できます。

本ガイドでは、Claude APIの使い方を基礎から実践まで、コード例を交えて解説します。

モデル一覧(2026年3月時点)

モデル用途コンテキスト特徴
claude-opus-4-6高度な推論・複雑なタスク200K tokens最高性能
claude-sonnet-4-6バランス重視200K tokens性能とコストのバランス
claude-haiku-3-5高速・軽量タスク200K tokens最速・最安

セットアップ

APIキーの取得

  1. console.anthropic.com にアクセス
  2. アカウント作成またはログイン
  3. API Keys セクションで新しいキーを生成
# 環境変数にAPIキーを設定
export ANTHROPIC_API_KEY="sk-ant-..."

# .envファイルを使う場合
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env

SDKのインストール

# Python
pip install anthropic

# Node.js
npm install @anthropic-ai/sdk

基本的なメッセージ送信

Python

import anthropic

client = anthropic.Anthropic()

# シンプルなメッセージ
message = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Pythonでバブルソートを実装してください。"}
    ]
)

print(message.content[0].text)

JavaScript/TypeScript

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

const client = new Anthropic();

const message = await client.messages.create({
  model: "claude-opus-4-6",
  max_tokens: 1024,
  messages: [
    {
      role: "user",
      content: "TypeScriptでバブルソートを実装してください。",
    },
  ],
});

console.log(message.content[0].text);

システムプロンプト

システムプロンプトを使って、Claudeの役割や振る舞いを設定できます。

message = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=2048,
    system="""あなたはToolBox Hubの専任サポートエンジニアです。
    開発者の技術的な質問に回答します。
    - 常に日本語で回答する
    - コード例を積極的に使う
    - 不明な点は正直に「わからない」と答える
    - 回答は簡潔で実践的にする""",
    messages=[
        {"role": "user", "content": "Dockerコンテナのメモリを制限する方法は?"}
    ]
)

マルチターン会話

会話履歴を渡すことで、文脈を維持した対話ができます。

from anthropic import Anthropic

client = Anthropic()

def chat(conversation_history: list, user_message: str) -> str:
    """会話履歴を維持しながらチャットする"""
    conversation_history.append({
        "role": "user",
        "content": user_message
    })

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=2048,
        system="あなたは親切なプログラミングの先生です。",
        messages=conversation_history
    )

    assistant_message = response.content[0].text
    conversation_history.append({
        "role": "assistant",
        "content": assistant_message
    })

    return assistant_message


# 使用例
history = []
print(chat(history, "Pythonのジェネレーターとは何ですか?"))
print(chat(history, "実際のコード例を見せてください"))
print(chat(history, "イテレーターとの違いは?"))

ストリーミングレスポンス

長い回答の場合、ストリーミングを使うと応答がリアルタイムで表示されます。

# Python:ストリーミング
import anthropic

client = anthropic.Anthropic()

with client.messages.stream(
    model="claude-opus-4-6",
    max_tokens=2048,
    messages=[
        {"role": "user", "content": "Reactの状態管理について詳しく説明してください。"}
    ]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

print()  # 改行
// TypeScript:ストリーミング
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const stream = client.messages.stream({
  model: "claude-opus-4-6",
  max_tokens: 2048,
  messages: [
    {
      role: "user",
      content: "Reactの状態管理について詳しく説明してください。",
    },
  ],
});

// リアルタイムでテキストを受け取る
for await (const event of stream) {
  if (
    event.type === "content_block_delta" &&
    event.delta.type === "text_delta"
  ) {
    process.stdout.write(event.delta.text);
  }
}

Tool Use(関数呼び出し)

Tool Useを使うと、Claudeが外部APIや関数を呼び出せるようになります。

import anthropic
import json

client = anthropic.Anthropic()

# ツールの定義
tools = [
    {
        "name": "get_weather",
        "description": "指定した都市の現在の天気を取得します",
        "input_schema": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "天気を取得する都市名(例:Tokyo, Osaka)"
                },
                "unit": {
                    "type": "string",
                    "enum": ["celsius", "fahrenheit"],
                    "description": "温度の単位"
                }
            },
            "required": ["city"]
        }
    },
    {
        "name": "search_database",
        "description": "商品データベースを検索します",
        "input_schema": {
            "type": "object",
            "properties": {
                "query": {
                    "type": "string",
                    "description": "検索クエリ"
                },
                "limit": {
                    "type": "integer",
                    "description": "返す結果の最大数",
                    "default": 10
                }
            },
            "required": ["query"]
        }
    }
]

def get_weather(city: str, unit: str = "celsius") -> dict:
    """実際の天気APIを呼び出す(例示用のモック)"""
    return {
        "city": city,
        "temperature": 22,
        "unit": unit,
        "condition": "晴れ",
        "humidity": 65
    }

def process_tool_call(tool_name: str, tool_input: dict) -> str:
    """ツール呼び出しを処理する"""
    if tool_name == "get_weather":
        result = get_weather(**tool_input)
        return json.dumps(result, ensure_ascii=False)
    return "ツールが見つかりません"

# エージェントループ
messages = [{"role": "user", "content": "東京の天気を教えてください"}]

while True:
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        tools=tools,
        messages=messages
    )

    if response.stop_reason == "tool_use":
        # ツール呼び出しを処理
        tool_uses = [b for b in response.content if b.type == "tool_use"]
        tool_results = []

        for tool_use in tool_uses:
            result = process_tool_call(tool_use.name, tool_use.input)
            tool_results.append({
                "type": "tool_result",
                "tool_use_id": tool_use.id,
                "content": result
            })

        messages.append({"role": "assistant", "content": response.content})
        messages.append({"role": "user", "content": tool_results})
    else:
        # 最終回答
        print(response.content[0].text)
        break

ビジョン(画像理解)

ClaudeはBase64エンコードされた画像やURLから画像を理解できます。

import anthropic
import base64

client = anthropic.Anthropic()

# ローカル画像をBase64にエンコード
with open("screenshot.png", "rb") as f:
    image_data = base64.standard_b64encode(f.read()).decode("utf-8")

message = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": "image/png",
                        "data": image_data,
                    },
                },
                {
                    "type": "text",
                    "text": "このスクリーンショットのUIの問題点を指摘してください。"
                }
            ],
        }
    ],
)

print(message.content[0].text)

実践:コードレビューボット

import anthropic
from pathlib import Path

client = anthropic.Anthropic()

def review_code(file_path: str, language: str = "Python") -> str:
    """コードファイルをレビューする"""
    code = Path(file_path).read_text(encoding="utf-8")

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=4096,
        system=f"""あなたはシニアの{language}開発者です。
        コードレビューを行い、以下の点を確認してください:
        1. バグや潜在的な問題
        2. パフォーマンスの改善点
        3. セキュリティの懸念事項
        4. コードの可読性と保守性
        5. ベストプラクティスへの準拠

        日本語で回答し、具体的な改善提案を含めてください。""",
        messages=[
            {
                "role": "user",
                "content": f"以下の{language}コードをレビューしてください:\n\n```{language.lower()}\n{code}\n```"
            }
        ]
    )

    return response.content[0].text

# 使用例
review = review_code("app.py", "Python")
print(review)

ベストプラクティス

1. エラーハンドリング

from anthropic import Anthropic, APIError, RateLimitError
import time

def safe_message(client: Anthropic, messages: list, max_retries: int = 3) -> str:
    for attempt in range(max_retries):
        try:
            response = client.messages.create(
                model="claude-opus-4-6",
                max_tokens=1024,
                messages=messages
            )
            return response.content[0].text
        except RateLimitError:
            wait_time = 2 ** attempt  # 指数バックオフ
            time.sleep(wait_time)
        except APIError as e:
            if attempt == max_retries - 1:
                raise
            time.sleep(1)
    raise Exception("最大リトライ回数に達しました")

2. コスト最適化

# より安いモデルを使い分ける
def choose_model(task_complexity: str) -> str:
    """タスクの複雑さに応じてモデルを選択"""
    models = {
        "simple": "claude-haiku-3-5",    # 分類、要約など
        "medium": "claude-sonnet-4-6",   # 一般的なコーディング
        "complex": "claude-opus-4-6",    # 複雑な推論、アーキテクチャ設計
    }
    return models.get(task_complexity, "claude-sonnet-4-6")

まとめ

Claude APIを使うことで、以下のようなアプリケーションを構築できます:

  • チャットボット: カスタマーサポート、社内Q&A
  • コードアシスタント: レビュー、バグ修正、ドキュメント生成
  • 文書処理: 要約、翻訳、分析
  • マルチエージェント: 複数のClaudeインスタンスが協力するシステム

APIキーを取得して、まずは最もシンプルなメッセージ送信から試してみてください。Claudeの高い能力を実感できるはずです。

関連記事