コンテンツにスキップ

Claude Code & エージェント

Claude Codeを使ったCLI開発と、エージェント構築パターンを学びます。


Claude Codeとは

Claude Codeは、ターミナルから直接Claudeを使える公式CLIツール。ファイル編集、コマンド実行、Git操作などをClaudeが自律的に行う。

インストール

npm install -g @anthropic-ai/claude-code

基本的な使い方

# 対話モードで起動
claude

# ワンショットで質問
claude "このプロジェクトの構成を説明して"

# パイプで入力
cat error.log | claude "このエラーの原因を分析して"

主な機能

機能 説明
ファイル読み書き コードの閲覧・編集・新規作成
コマンド実行 テスト実行、ビルド、Git操作
検索 コードベース内のグローバル検索
マルチファイル編集 複数ファイルにまたがるリファクタリング
Git統合 commit、branch、diff の操作

CLAUDE.md — プロジェクト設定

リポジトリのルートにCLAUDE.mdを置くと、Claude Codeがプロジェクト固有のルールを自動で読み込む。

# CLAUDE.md

## プロジェクト概要
Python製のWebアプリ。FastAPI + PostgreSQL。

## コーディング規約
- 型ヒントを必ず使う
- docstringはGoogle Style
- テストはpytest

## テスト実行
pytest tests/ -v

## よく使うコマンド
- `make dev` — 開発サーバー起動
- `make test` — テスト実行
- `make lint` — リンター実行

スラッシュコマンド

Claude Code内で使える便利なコマンド。

コマンド 説明
/help ヘルプを表示
/clear 会話履歴をクリア
/compact 会話を要約して圧縮
/commit 変更をgit commit
/review コードレビュー

Agent Skills

Claude Codeのカスタムスキル機能。繰り返し使うワークフローをスキルとして定義できる。

スキルの定義(.claude/skills/ に配置)

---
name: test-and-fix
description: テストを実行し、失敗したら修正する
---

1. `pytest tests/ -v` を実行
2. 失敗したテストがあれば:
   - エラーメッセージを分析
   - 対応するソースコードを修正
   - 再度テストを実行して確認
3. 全テスト通過を確認

エージェント設計パターン

Claude APIを使って自律的なエージェントを構築するパターン。

パターン1: ツールループ

最も基本的なエージェントパターン。ツール呼び出しがなくなるまでループする。

import anthropic
import json

client = anthropic.Anthropic()

def run_agent(user_input: str, tools: list, tool_executor) -> str:
    messages = [{"role": "user", "content": user_input}]

    while True:
        response = client.messages.create(
            model="claude-sonnet-4-20250514",
            max_tokens=4096,
            tools=tools,
            messages=messages,
        )

        # ツール呼び出しがなければ完了
        if response.stop_reason == "end_turn":
            return response.content[0].text

        # ツールを実行して結果を追加
        messages.append({"role": "assistant", "content": response.content})
        tool_results = []
        for block in response.content:
            if block.type == "tool_use":
                result = tool_executor(block.name, block.input)
                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": json.dumps(result, ensure_ascii=False)
                })
        messages.append({"role": "user", "content": tool_results})

パターン2: ルーティング

Haikuで分類 → Sonnet/Opusで処理、のコスト最適化パターン。

def route_request(user_input: str) -> str:
    # Step 1: Haikuで分類(安い)
    classification = client.messages.create(
        model="claude-haiku-4-5-20251001",
        max_tokens=50,
        system="ユーザーの入力を以下に分類: simple / complex / creative",
        messages=[{"role": "user", "content": user_input}]
    )

    category = classification.content[0].text.strip()

    # Step 2: カテゴリに応じてモデルを選択
    model_map = {
        "simple": "claude-haiku-4-5-20251001",
        "complex": "claude-sonnet-4-20250514",
        "creative": "claude-sonnet-4-20250514",
    }

    response = client.messages.create(
        model=model_map.get(category, "claude-sonnet-4-20250514"),
        max_tokens=4096,
        messages=[{"role": "user", "content": user_input}]
    )
    return response.content[0].text

パターン3: 検証ループ

生成 → 検証 → 修正を繰り返す品質保証パターン。

def generate_with_validation(task: str, max_attempts: int = 3) -> str:
    for attempt in range(max_attempts):
        # 生成
        result = client.messages.create(
            model="claude-sonnet-4-20250514",
            max_tokens=4096,
            messages=[{"role": "user", "content": task}]
        )
        code = result.content[0].text

        # 検証(テスト実行、lint等)
        is_valid, errors = validate(code)
        if is_valid:
            return code

        # エラーを含めて再生成
        task = f"前回の出力にエラーがありました:\n{errors}\n\n元のタスク:\n{task}\n\n修正してください。"

    raise Exception("検証に通りませんでした")

Quickstartsテンプレート

Anthropicが提供する実用テンプレート。クローンしてすぐ使える。

テンプレート 内容
Customer Support Agent カスタマーサポートBot
Financial Data Analyst 財務データ分析
Computer Use Demo PC操作の自動化

参考リンク