生成AI入門 2026.04.19

Claude 200Kトークンの実用ガイド【2026年版】コスト計算・大規模処理コード・実務5パターン

タグ:Claude / プロンプト設計 / API / 効率化 / 実務活用

200Kトークンの実際のサイズ感

# token_size_reference.py
# 200,000トークンがどのくらいの分量か確認する

import anthropic
import os

client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

def count_tokens(text: str) -> int:
    """テキストのトークン数を確認(無料・実際のリクエストなし)"""
    result = client.messages.count_tokens(
        model="claude-sonnet-4-5",
        messages=[{"role": "user", "content": text}]
    )
    return result.input_tokens

# サイズ感を確認
samples = [
    ("A4用紙1枚(1600字)", "あ" * 1600),
    ("1万字のドキュメント", "あ" * 10000),
    ("コード1000行(Python)", "x = 1\n" * 1000),
]

print("=== トークン数の目安 ===")
for label, text in samples:
    tokens = count_tokens(text)
    capacity = 200_000 / tokens
    print(f"{label}: {tokens:,}トークン → 200K枠に{capacity:.0f}個入る")

# 日本語の目安
# 日本語1文字 ≈ 0.3〜0.5トークン
# 200,000トークン ≈ 40〜70万字 ≈ A4用紙250〜450ページ

大規模ドキュメントの一括処理

# bulk_document_analysis.py
# 複数ファイルをまとめてClaude Sonnetに投入する

import anthropic
import pathlib
import os

client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
MAX_INPUT_TOKENS = 180_000  # 出力用に余裕を残す

def load_files(directory: str, extensions: list[str] = [".py", ".ts", ".md"]) -> dict[str, str]:
    """ディレクトリ内のファイルを一括読み込み"""
    files = {}
    for path in pathlib.Path(directory).rglob("*"):
        if path.suffix in extensions and path.is_file():
            try:
                files[str(path)] = path.read_text(encoding="utf-8")
            except Exception:
                pass
    return files

def build_context(files: dict[str, str], max_tokens: int = MAX_INPUT_TOKENS) -> str:
    """ファイルをコンテキストとしてまとめる(トークン上限付き)"""
    parts = []
    total = 0
    
    for filepath, content in files.items():
        # ファイルヘッダー付きでフォーマット
        block = f"\n### ファイル: {filepath}\n```\n{content}\n```\n"
        
        # トークン数を確認してから追加
        result = client.messages.count_tokens(
            model="claude-sonnet-4-5",
            messages=[{"role": "user", "content": "\n".join(parts) + block}]
        )
        
        if result.input_tokens > max_tokens:
            print(f"⚠️ {filepath}: コンテキスト上限超過のためスキップ")
            break
        
        parts.append(block)
        total = result.input_tokens
    
    print(f"✅ {len(parts)}ファイルをロード(合計{total:,}トークン)")
    return "\n".join(parts)

def analyze_codebase(directory: str, question: str) -> str:
    """コードベース全体を分析する"""
    files = load_files(directory)
    context = build_context(files)
    
    response = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=4096,
        messages=[{
            "role": "user",
            "content": f"以下のコードベースを分析してください。\n{context}\n\n質問: {question}"
        }]
    )
    
    return response.content[0].text

# 使用例
result = analyze_codebase(
    "./src",
    "このコードベースの設計上の問題点と、リファクタリングの優先順位を教えて"
)
print(result)

200Kを超える文書のチャンク処理

# chunk_processor.py
# 200Kを超える文書をチャンク分割して処理し、結果を統合する

import anthropic
import os
from typing import Generator

client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

def chunk_text(
    text: str,
    chunk_size: int = 150_000,  # トークン数(余裕を持たせる)
    overlap: int = 5_000,        # チャンク間の重複(文脈を引き継ぐ)
) -> Generator[str, None, None]:
    """テキストをオーバーラップ付きで分割"""
    # 文字数ベースで概算(日本語: 1文字≈0.4トークン)
    chars_per_chunk = int(chunk_size / 0.4)
    overlap_chars = int(overlap / 0.4)
    
    start = 0
    while start < len(text):
        end = start + chars_per_chunk
        yield text[start:end]
        start = end - overlap_chars  # 前のチャンクの末尾と重複させる

def map_reduce_analysis(document: str, task: str) -> str:
    """
    Map: 各チャンクを個別に分析
    Reduce: 各チャンクの分析結果を統合
    """
    chunks = list(chunk_text(document))
    print(f"チャンク数: {len(chunks)}")
    
    # Map フェーズ
    chunk_results = []
    for i, chunk in enumerate(chunks):
        print(f"チャンク {i+1}/{len(chunks)} を処理中...")
        response = client.messages.create(
            model="claude-sonnet-4-5",
            max_tokens=2048,
            messages=[{
                "role": "user",
                "content": f"文書の一部({i+1}/{len(chunks)}):\n{chunk}\n\nタスク: {task}\n\n要点だけ箇条書きで出力してください。"
            }]
        )
        chunk_results.append(response.content[0].text)
    
    # Reduce フェーズ:全チャンクの結果を統合
    combined = "\n\n".join([
        f"=== チャンク{i+1}の分析 ===\n{r}"
        for i, r in enumerate(chunk_results)
    ])
    
    final = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=4096,
        messages=[{
            "role": "user",
            "content": f"以下は文書を分割して分析した結果です。これらを統合して最終的な回答を出してください。\n\n{combined}\n\n元のタスク: {task}"
        }]
    )
    
    return final.content[0].text

200K処理のコスト計算

# large_context_cost.py

SONNET_INPUT_PER_1M = 3.00   # USD
SONNET_OUTPUT_PER_1M = 15.00  # USD
BATCH_DISCOUNT = 0.5          # バッチ処理で50%割引

def estimate_large_doc_cost(
    input_tokens: int,
    output_tokens: int = 2000,
    use_batch: bool = False,
) -> dict:
    multiplier = BATCH_DISCOUNT if use_batch else 1.0
    input_cost = input_tokens * SONNET_INPUT_PER_1M / 1_000_000 * multiplier
    output_cost = output_tokens * SONNET_OUTPUT_PER_1M / 1_000_000 * multiplier
    total = input_cost + output_cost
    
    return {
        "input_tokens": input_tokens,
        "input_cost": input_cost,
        "output_cost": output_cost,
        "total_usd": total,
        "total_jpy_ref": int(total * 150),
    }

# 代表的なシナリオのコスト
scenarios = [
    ("A4 50ページ(約80,000トークン)", 80_000),
    ("A4 200ページ(約200,000トークン)", 180_000),
    ("コードベース全体(100,000トークン)", 100_000),
]

print(f"{'シナリオ':<35} {'通常':>12} {'バッチ50%引き':>15}")
print("-" * 65)
for label, tokens in scenarios:
    normal = estimate_large_doc_cost(tokens)
    batch = estimate_large_doc_cost(tokens, use_batch=True)
    print(f"{label:<35} ${normal['total_usd']:>10.3f}  ${batch['total_usd']:>10.3f}")
シナリオ                            通常      バッチ50%引き
-----------------------------------------------------------------
A4 50ページ(約80,000トークン)      $0.270       $0.135
A4 200ページ(約200,000トークン)    $0.570       $0.285
コードベース全体(100,000トークン)  $0.330       $0.165

実務での5パターン活用例

1. コードレビュー: src/ 全体(〜5万行)を投入 → 設計方針の問題点を発見
2. 法務チェック: 契約書100ページをまるごと投入 → 特定条項のリスクを洗い出し
3. 顧客分析: アンケート500件を投入 → テーマ別の傾向と改善案を生成
4. 技術仕様統合: 仕様書+実装コード+テストを投入 → 仕様と実装の乖離を検出
5. 会議ログ分析: 6ヶ月分の議事録を投入 → 意思決定の経緯と決定事項を整理

あわせて読みたい

参考ソース