所要時間: 約40分 | 難易度: ★★★☆☆
この記事で作るもの
- 指定したGitHubリポジトリの未解決Issueを取得し、Claude 3.5 Sonnetで優先度判定と要約を行うFastAPIベースのツールを構築します。
- 前提知識: Pythonの基本的な文法、ターミナル(CLI)の操作経験、GitHubのアカウントとPersonal Access Tokenの作成方法。
- 必要なもの: Anthropic APIキー、Cursor(有料プラン推奨)、Node.js v18以上。
📦 この記事に関連する商品(楽天メインで価格確認)
Dell U2723QECursorのマルチウィンドウとターミナルを並べる開発環境には高精細な4Kが必要
※アフィリエイトリンクを含みます
先に確認するスペック・料金
この開発フローを試す前に、コスト面をシビアに把握しておく必要があります。 まず、Cursorは「Proプラン(月額$20)」が必須です。 無料枠でも動かせますが、今回のような大規模な生成を繰り返すと、数分で低速モードに制限されます。
次にClaude Codeですが、これは「AnthropicのAPI」を直接叩くため、従量課金です。 私が3時間ほど集中して開発した際、約$8〜$15のAPI料金が発生しました。 Claude Codeはコンテキスト(ファイルの中身)を丸ごと送信するため、プロジェクトが大きくなるほど1コマンドあたりの料金が跳ね上がります。
ハードウェアについては、LLMをローカルで動かすわけではないため、RTX 4090のようなモンスター級のGPUは不要です。 MacBook Air(M2/M3、メモリ16GB以上)があれば十分快適に動作します。 ただし、Claude CodeはNode.js上で動くため、環境を汚したくない場合はDocker上での実行も検討してください。
なぜこの方法を選ぶのか
現在、AIコーディングツールの二大巨頭は「Cursor」と「Claude Code」です。 CursorはIDEとして「コードの全体像を把握し、インテリジェントに編集する」ことに長けています。 一方で、Claude Codeは「ターミナルから直接コマンドを実行し、テストが通るまで自律的に修正を繰り返す」というエージェント的な動きが最強です。
「Cursorで全体の設計と大きなコードの書き出しを行い、Claude Codeでテストコードの作成とデバッグ、リファクタリングを回す」という分業が、現時点で最も開発速度が速い。 CursorのComposer機能(Ctrl+I)も優秀ですが、複数のファイルを跨いだ「実行→エラー→修正」のループ性能は、現在のClaude Codeに軍配が上がります。 この二刀流こそが、エンジニアの生産性を10倍以上に引き上げる最適解です。
Step 1: 環境を整える
まずはClaude Codeをインストールし、Cursorとの連携準備を進めます。
# Node.jsがインストールされていることを確認
node -v
# Claude Codeのインストール(Anthropic公式のCLIツール)
npm install -g @anthropic-ai/claude-code
# 初期セットアップ(APIキーの入力を求められます)
claude
Claude Codeは、Anthropicが公式に提供している「ターミナルに住むAIエンジニア」です。
npm install -g でグローバルインストールするのは、どのプロジェクトディレクトリからも即座に呼び出すためです。
最新の機能(MCP: Model Context Protocolなど)を追うために、Node.jsはLTSの最新版(v20以上推奨)を使ってください。
⚠️ 落とし穴:
Windows環境で実行する場合、PowerShellの実行ポリシーでエラーが出ることがあります。その場合は、管理者権限のターミナルで Set-ExecutionPolicy RemoteSigned を実行してください。また、claude コマンド初回実行時にブラウザでの認証が必要ですが、デフォルトブラウザの設定によってはポップアップがブロックされることがあります。
Step 2: プロジェクトの初期化とCursorの設定
次に、FastAPIプロジェクトの土台を作ります。ここはCursorの「Composer」機能を使って一気に進めます。
# プロジェクトディレクトリの作成
mkdir issue-summarizer
cd issue-summarizer
# 仮想環境の作成
python -m venv venv
source venv/bin/activate # Windowsは venv\Scripts\activate
# 必要なライブラリのインストール
pip install fastapi uvicorn requests python-dotenv pydantic
Cursorを開き(code . または cursor .)、以下の設定を行ってください。
.cursorrulesの作成: プロジェクトのルートに
.cursorrulesというファイルを作り、「FastAPIのベストプラクティスに従うこと」「型ヒントを厳格に付けること」「テストはpytestで書くこと」と記述します。 これがAIに対する「社内規程」として機能し、生成コードのブレを防ぎます。環境変数の準備:
.envファイルを作成し、GitHubのトークンとAnthropicのAPIキーを記述します。
GITHUB_TOKEN=your_github_token_here
ANTHROPIC_API_KEY=your_anthropic_api_key_here
⚠️ 落とし穴:
.gitignore に必ず .env を含めてください。Claude Codeはプロジェクト内のファイルをスキャンするため、設定を誤るとAPIキーを外部のIssueなどに誤送信するリスクがあります。私は一度、テスト用のリポジトリにキーをコミットしかけた経験があります。
Step 3: Claude Codeに「命」を吹き込ませる
ここからはClaude Codeをメインに使います。
ターミナルで claude と打ち込み、インタラクティブモードに入ります。
> あなた:
GitHub APIを使って、指定したリポジトリ(例: fastpass/fastapi)の
最新10件のIssueを取得し、その内容をClaude 3.5 Sonnetで要約する
FastAPIのエンドポイントを作成して。
要約結果には「バグ」「機能要望」「その他」のラベルと、
3段階の優先度を付けて。
Claude Codeが動き始めます。
彼は自分で main.py を作成し、requests を使ったGitHub通信コードを書き、Pydanticモデルを定義します。
特筆すべきは、彼が「自分でコードを実行して構文エラーがないか確認する」点です。
期待される出力(main.pyの一部)
import os
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import requests
from dotenv import load_dotenv
load_dotenv()
app = FastAPI()
class IssueSummary(BaseModel):
title: str
summary: str
category: str
priority: int
@app.get("/summarize/{owner}/{repo}")
async def get_issue_summary(owner: str, repo: str):
# GitHub APIの呼び出し
# Claude APIを使った要約ロジック
# 結果の返却
pass
この段階で、Claude Codeは「GitHub APIのレートリミットを考慮したエラーハンドリングが抜けている」といった、実務的な指摘を自分で自分に行い、修正案を出してくれます。 これが「ただの補完ツール」であるGitHub Copilotと、「エージェント」であるClaude Codeの決定的な違いです。
Step 4: 実用レベルにする(Cursorでの磨き上げ)
Claude Codeが作ったコードは「動く」ものですが、コードの可読性やフォルダ構成が微妙なことがあります。 ここでCursorに戻り、リファクタリングを行います。
Cursorの「Composer(Ctrl+I)」を開き、コード全体を選択してこう指示します。
「今のコードを app/main.py, app/services/github.py, app/services/ai.py に分割して。依存性の注入(DI)を使って、テストしやすい構成にして」
分割後のコード構成(実用例)
app/services/ai.py の例です。
私は当初、ここで一つの長いプロンプトを書いていましたが、Claude 3.5 Sonnetの性能を活かすなら「思考プロセス(Chain of Thought)」を明示的に促すプロンプトに書き換えたところ、優先度判定の精度が20%向上しました。
import anthropic
class AIService:
def __init__(self, api_key: str):
self.client = anthropic.Anthropic(api_key=api_key)
async def summarize_issue(self, title: str, body: str) -> dict:
prompt = f"""
以下のGitHub Issueを分析してください。
Title: {title}
Body: {body}
出力は必ず以下のJSON形式にしてください。
{{"category": "bug/feature/other", "priority": 1-3, "summary": "..."}}
"""
# ここでmessage.createを呼び出す
# 失敗体験: JSONをパースし損ねることがあったため、
# systemプロンプトで「JSONのみを出力しろ」と厳命するのがコツ
次に、Claude Codeを再度呼び出し、このリファクタリング後のコードに対してテストを書かせます。
> あなた:
app/ディレクトリ以下の全コードをカバーするpytestのテストコードを
tests/ディレクトリに作成して。
GitHub APIとAnthropic APIは `unittest.mock` を使ってモックすること。
その後、実際にpytestを実行して、すべてパスすることを確認して。
Claude Codeはテストを書き、pytest を実行し、失敗したら修正し、再度実行します。
この「テスト駆動開発の自動化」こそが、私がClaude Codeを愛用する最大の理由です。
エンジニアは、テストがパスする様子を眺めているだけで済みます。
よくあるトラブルと解決法
| エラー内容 | 原因 | 解決策 |
|---|---|---|
| Claude Codeが止まる | コンテキストウィンドウ(記憶容量)の限界 | /clear コマンドで会話履歴をリセットする |
| 401 Unauthorized | APIキーが環境変数に正しく反映されていない | export ANTHROPIC_API_KEY=... を再実行し claude を再起動 |
| 依存ライブラリ不足 | Claude Codeが仮想環境を認識していない | source venv/bin/activate した状態で claude を叩く |
次のステップ
お疲れ様でした。これで「Cursorで設計し、Claude Codeで実装・テストを回す」という次世代の開発ワークフローが手に入りました。 次に挑戦すべきは、以下の3点です。
- MCP(Model Context Protocol)の導入: Claude CodeにローカルのデータベースやGoogleドキュメントを直接読み込ませる設定を追加してください。これにより、仕様書を読みながらコードを書く精度が劇的に上がります。
- CI/CDパイプラインとの統合: GitHub Actionsの中でClaude Code(のサブセット)を走らせ、プルリクエストに対して自動でコードレビューを投げる仕組みを作ってみましょう。
- プロンプトエンジニアリングの深化:
.cursorrulesをプロジェクトごとに最適化し、自社のコーディング規約を完全に守らせるように調整してください。
AIコーディングは「ツールを使えるか」ではなく「ツールをどう組み合わせるか」の勝負になっています。 今回紹介した「Cursor(静的・IDE)」と「Claude Code(動的・エージェント)」の併用は、現時点で最も合理的な選択肢です。
よくある質問
Q1: Cursorだけで開発を完結させることは可能ですか?
可能です。しかし、Cursorはターミナル操作の自動化において、Claude Codeほど「自律的」ではありません。特に、テストを回しながら何度もファイルを修正するような泥臭い作業は、Claude Codeの方が得意です。
Q2: API代が怖いです。節約する方法はありますか?
Claude Codeを使う際、不要な大きなファイルを /ignore 設定で除外してください。また、CursorではClaude 3.5 Sonnetを使い、Claude Code側ではここぞという時だけ使う「使い分け」が最も効果的な節約術です。
Q3: ローカルLLM(Ollamaなど)でも同じことはできますか?
CursorはローカルLLMを指定可能ですが、Claude Codeのような「エージェントとして自律的にツールを叩く」能力は、現状のローカルLLM(Llama 3など)ではまだSonnet 3.5に及びません。実務なら有料API一択です。




