AIコーディング 2026.04.18

Claude Codeの使い方|5つの実践テクニック&よくあるエラー対処法

タグ:Claude Code / AI開発ツール / ワークフロー / 生産性向上 / 実践テクニック

テクニック1: タスクを明確に分割する

❌ 悪い例(大きすぎる1つのリクエスト):
「ECサイトを作ってください。商品一覧・カート・決済・管理画面が必要です」

✅ 良い例(段階的なリクエスト):
Step 1: 「Prismaのスキーマ(Product・Cart・Order)だけ作ってください」
Step 2: 「GET /api/products エンドポイントだけ実装してください」
Step 3: 「商品一覧のUIコンポーネントだけ作ってください」

各ステップが完了したらgitでコミットしてから次のステップに進む。

テクニック2: CLAUDE.mdで制約を明示する

# プロジェクト概要
Next.js 14 + TypeScript + Prisma + PostgreSQLのECサイト

# コーディングルール
- `any` 型を使わない。不明な型は `unknown`
- Server Actionsには必ず認証チェックを先に書く
- 全入力はZodでバリデーションする
- `<img>``next/image``<a>``next/link` を使う

# 禁止操作
- `git push --force` は実行しない
- `.env`ファイルにシークレットを直書きしない
- `prisma db push` は開発初期のみ(本番は migrate dev を使う)

テクニック3: トークン使用量を可視化する

# token_tracker.py
# Claude Codeのトークン消費を記録してコストを把握する

import anthropic
from datetime import date
import json
from pathlib import Path

client = anthropic.Anthropic()

SONNET_PRICE = (3.00, 15.00)  # $/1M tokens (input, output)

log_file = Path(".token_log.json")

def ask_with_tracking(prompt: str, context_files: list[str] = []) -> str:
    """質問してトークン消費を記録する"""
    messages = [{"role": "user", "content": prompt}]
    
    response = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=2048,
        messages=messages
    )
    
    inp = response.usage.input_tokens
    out = response.usage.output_tokens
    cost = (inp * SONNET_PRICE[0] + out * SONNET_PRICE[1]) / 1_000_000
    
    log = json.loads(log_file.read_text()) if log_file.exists() else {"total_cost": 0, "sessions": []}
    log["total_cost"] += cost
    log["sessions"].append({
        "date": str(date.today()),
        "tokens": inp + out,
        "cost_usd": round(cost, 5)
    })
    log_file.write_text(json.dumps(log, indent=2))
    
    print(f"今回: ${cost:.5f} | 累計: ${log['total_cost']:.3f}")
    return response.content[0].text

テクニック4: .claudeignoreで不要ファイルを除外する

# .claudeignore
# これを設定しないと node_modules が全部コンテキストに入り
# トークンが無駄になる(最重要設定)

node_modules/
.next/
dist/
build/
.git/
*.lock
*.log
coverage/
.env*
*.min.js
*.min.css
public/fonts/

テクニック5: よくあるエラーの対処法

# error_recovery.py
# Claude Code でよくあるエラーのパターンと回避策

from anthropic import Anthropic, APIStatusError, APITimeoutError, RateLimitError
import time

client = Anthropic()

def resilient_request(prompt: str, max_retries: int = 3) -> str:
    """エラー時に自動リトライする安全なリクエスト関数"""
    for attempt in range(max_retries):
        try:
            response = client.messages.create(
                model="claude-sonnet-4-5",
                max_tokens=1024,
                messages=[{"role": "user", "content": prompt}]
            )
            return response.content[0].text
            
        except RateLimitError:
            wait = 60 * (attempt + 1)
            print(f"レート制限: {wait}秒待機して再試行 ({attempt+1}/{max_retries})")
            time.sleep(wait)
            
        except APITimeoutError:
            print(f"タイムアウト: プロンプトを短くして再試行してください")
            # タイムアウト時はリトライせず短縮版で再試行を促す
            raise ValueError("プロンプトが長すぎます。タスクを分割してください")
            
        except APIStatusError as e:
            if e.status_code == 529:  # Overloaded
                time.sleep(30)
            else:
                raise
    
    raise RuntimeError(f"{max_retries}回試行しましたが失敗しました")

# 使用例
try:
    result = resilient_request("Pythonでバイナリサーチを実装してください")
    print(result)
except ValueError as e:
    print(f"対処法: {e}")

あわせて読みたい

参考ソース