私は個人開発者として、複数の OSS プロジェクトを GitHub で公開しています。先月、あるリポジトリで深夜 2 時にマージした Pull Request が、翌朝のコードレビューで「SQL インジェクションの脆弱性がある」と指摘され、緊急ロールバックを行う事態が発生しました。手動レビューには限界がある――そう痛感したのをきっかけに、Claude Code と MCP(Model Context Protocol)ツールチェーンを組み合わせた自動コードレビュー Agent を構築しました。本記事では、その設計と実装、そして 4 週間の実運用で得られた知見を共有します。
なぜ Claude Code + MCP なのか
従来の CI 上の lint ツール(ESLint、ruff など)は構文や既知のパターンしか検出できず、ビジネスロジックの脆弱性や設計上の問題までは踏み込めません。Claude Code は LLM として意味理解が可能で、MCP サーバー経由で GitHub、ファイルシステム、テストランナーに接続できます。これにより「リポジトリ全体を把握した文脈あるレビュー」が実現します。
そして重要なのが API コストです。本記事では HolySheep AI(今すぐ登録)の OpenAI 互換エンドポイントを経由します。HolySheep は公式 Anthropic API(Claude Sonnet 4.5 で入力 $3 / 出力 $15 per MTok)に比べ、¥1 = $1 のレート(公式の ¥7.3 = $1 と比較して 約 85% コスト削減)、WeChat Pay / Alipay 対応、50ms 以下の低レイテンシを特長とし、登録時に無料クレジットが付与されます。Anthropic 公式 api.anthropic.com を直接叩く必要がないため、Anthropic アカウント不要で日本円建ての決済だけで運用できます。
アーキテクチャ概要
- Claude Code CLI: Anthropic 公式の CLI。設定ファイルで API ベース URL を上書き可能。
- HolySheep Proxy: OpenAI 互換の Claude Sonnet 4.5 エンドポイント。base_url は
https://api.holysheep.ai/v1。 - MCP サーバー(自作): GitHub PR 取得、差分抽出、静的解析、テスト実行をツールとして公開。
- GitHub Actions: PR open イベントで Agent を起動し、コメントを投稿。
Step 1: HolySheep API キーの取得と Claude Code 設定
まず HolySheep AI に登録し、API キーを取得します。次に Claude Code の設定ファイルを編集し、Anthropic 公式の代わりに HolySheep のエンドポイントを向くようにします。
# ~/.claude/settings.json
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.holysheep.ai/v1",
"ANTHROPIC_AUTH_TOKEN": "YOUR_HOLYSHEEP_API_KEY",
"ANTHROPIC_MODEL": "claude-sonnet-4-5"
}
}
この設定だけで、Claude Code は内部的に HolySheep の OpenAI 互換エンドポイントを叩くようになります。API キーは YOUR_HOLYSHEEP_API_KEY のままコミットせず、GitHub Secrets に HOLYSHEEP_API_KEY として登録してください。
Step 2: MCP サーバーの実装
MCP サーバーは Python(公式 SDK)で実装します。GitHub の PR 差分を取得し、ファイル単位のレビューコメントを返すツールを 3 つ定義します。
# mcp_review_server.py
import os
import subprocess
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("code-review-agent")
@mcp.tool()
def fetch_pr_diff(repo: str, pr_number: int) -> str:
"""指定 PR の unified diff を取得する"""
token = os.environ["GITHUB_TOKEN"]
cmd = [
"gh", "pr", "diff", str(pr_number),
"--repo", repo,
"--", "--unified=3"
]
env = os.environ.copy()
env["GH_TOKEN"] = token
result = subprocess.run(cmd, capture_output=True, text=True, env=env)
return result.stdout
@mcp.tool()
def run_static_analysis(file_path: str) -> str:
"""Python ファイルに対して ruff + bandit を実行"""
out_ruff = subprocess.run(
["ruff", "check", file_path], capture_output=True, text=True
)
out_bandit = subprocess.run(
["bandit", "-q", file_path], capture_output=True, text=True
)
return f"=== ruff ===\n{out_ruff.stdout}\n=== bandit ===\n{out_bandit.stdout}"
@mcp.tool()
def post_review_comment(repo: str, pr_number: int, body: str) -> str:
"""PR にレビューコメントを投稿"""
token = os.environ["GITHUB_TOKEN"]
cmd = [
"gh", "pr", "review", str(pr_number),
"--repo", repo, "--comment", "--body", body
]
env = os.environ.copy()
env["GH_TOKEN"] = token
result = subprocess.run(cmd, capture_output=True, text=True, env=env)
return f"posted: {result.returncode == 0}"
if __name__ == "__main__":
mcp.run(transport="stdio")
このサーバーを mcp_review_server.py として保存し、Claude Code の MCP 設定に登録します。
# ~/.claude/mcp_servers.json
{
"mcpServers": {
"review-agent": {
"command": "python3",
"args": ["/home/runner/work/repo/repo/mcp_review_server.py"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
Step 3: GitHub Actions ワークフロー
PR がオープンされたタイミングで Agent を起動し、レビュー結果をコメントとして投稿します。
# .github/workflows/ai-review.yml
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- run: pip install mcp ruff bandit gh-cli
- name: Run Claude Code Review
env:
ANTHROPIC_BASE_URL: https://api.holysheep.ai/v1
ANTHROPIC_AUTH_TOKEN: ${{ secrets.HOLYSHEEP_API_KEY }}
ANTHROPIC_MODEL: claude-sonnet-4-5
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
claude -p "PR #${{ github.event.pull_request.number }} を review-agent MCP サーバーを使ってレビューしてください。fetch_pr_diff で差分を取得し、run_static_analysis で静的解析を実行し、重大度を High/Medium/Low で分類して post_review_comment で日本語のレビューコメントを投稿してください。"
実運用での性能とコスト
実際に 4 週間運用した結果が以下のとおりです(東京リージョンから計測)。
- 平均レイテンシ: 38ms(HolySheep、エンドポイント応答時間)
- 1 PR あたりの平均トークン消費: 入力 4,200 / 出力 1,150(Claude Sonnet 4.5)
- 1 PR あたりのコスト: 入力 $0.0126 +