この記事で紹介する Claude Code CI に pay-per-call-mcp を組み合わせると、PR のたびに外部 API を自動チェックするパイプラインが作れます。
この記事でわかること
- Claude Code を GitHub Actions で動かす最小構成
- PR のたびに Claude が自動コードレビューする仕組み
- 「テスト通過・型チェック OK だけど品質が低い PR」を自動検出する方法
- レビュアーが確認する前に Claude が指摘を済ませておく設計
- 実際に導入して PR の手戻りが 60% 減った設定例
はじめに
PR を出すたびに繰り返していた確認作業があります。
□ console.log が残っていないか
□ any 型を使っていないか
□ テストが網羅されているか
□ コメントに「なぜ」が書かれているか
□ エラーハンドリングがあるか
これを毎回手動でチェックしてからレビュー依頼していました。
Claude Code を CI に組み込んだところ、これらの確認が全自動になり、レビュアーへの依頼前に問題が片付くようになりました。
仕組み
PR を作成 / 更新
↓
GitHub Actions が起動
↓
Claude Code がコード変更を分析
↓
問題を検出したら PR にコメント
↓
レビュアーへの通知
(Claude が指摘済みの状態で届く)
レビュアーは「Claude が何も言っていない部分」に集中できます。
最小構成
.github/workflows/claude-review.yml:
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install Claude Code
run: npm install -g @anthropic-ai/claude-code
- name: Get changed files
id: changed
run: |
git diff --name-only origin/${{ github.base_ref }}...HEAD \
| grep -E '\.(ts|tsx|js|jsx)$' \
| head -20 > changed_files.txt
cat changed_files.txt
- name: Run Claude review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
claude --print "以下のファイルをレビューして。
チェック項目:
1. any 型の使用
2. console.log の残存
3. エラーハンドリングの欠如
4. 明らかなバグ
問題があれば「ファイル名:行数 - 問題の説明」の形式で報告。
問題なければ「LGTM」とだけ答えて。
対象ファイル:
$(cat changed_files.txt | xargs cat)" \
> review_result.txt
cat review_result.txt
- name: Post review comment
if: always()
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const result = fs.readFileSync('review_result.txt', 'utf8');
if (result.trim() !== 'LGTM') {
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## 🤖 Claude Code レビュー\n\n${result}`
});
}
実践パターン集
1. 型チェック + Claude レビューの組み合わせ
TypeScript エラーを先に潰してから Claude に渡す:
steps:
- name: TypeScript check
run: npx tsc --noEmit 2>&1 | tee tsc_result.txt || true
- name: Run tests
run: npm run test 2>&1 | tee test_result.txt || true
- name: Claude review with context
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
claude --print "PR のコードをレビューして。
TypeScript チェック結果:
$(cat tsc_result.txt)
テスト結果:
$(cat test_result.txt)
変更コード:
$(git diff origin/${{ github.base_ref }}...HEAD -- '*.ts' '*.tsx' | head -500)
TypeScript エラーとテスト失敗の原因を説明して、
修正方法を具体的に提案して。
問題なければ LGTM と答えて。" > review_result.txt
2. セキュリティチェック専用ワークフロー
name: Security Review
on:
pull_request:
paths:
- 'src/api/**'
- 'src/auth/**'
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Security review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
DIFF=$(git diff origin/${{ github.base_ref }}...HEAD -- 'src/api/**' 'src/auth/**')
claude --print "以下の API / 認証コードのセキュリティレビューをして。
チェック項目:
- SQL インジェクションの可能性
- 認証チェックの欠如
- 機密情報のハードコード
- CORS 設定の問題
- レート制限の欠如
変更コード:
$DIFF
問題があれば深刻度(高/中/低)と修正方法を具体的に教えて。" \
> security_result.txt
# 高深刻度の問題があれば CI を失敗させる
if grep -q "深刻度:高\|深刻度: 高" security_result.txt; then
echo "::error::高深刻度のセキュリティ問題が検出されました"
cat security_result.txt
exit 1
fi
3. PR サイズチェック
大きすぎる PR を自動で分割提案:
- name: PR size check
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
CHANGED_LINES=$(git diff --stat origin/${{ github.base_ref }}...HEAD | tail -1)
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD | wc -l)
if [ "$CHANGED_FILES" -gt 20 ]; then
claude --print "この PR は $CHANGED_FILES ファイルを変更しています。
変更ファイル一覧:
$(git diff --name-only origin/${{ github.base_ref }}...HEAD)
この PR を小さな PR に分割するなら、どう分けるか提案して。
各 PR のタイトルと含めるファイルを教えて。" > size_result.txt
cat size_result.txt
fi
4. コミットメッセージ品質チェック
- name: Commit message check
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
COMMITS=$(git log --oneline origin/${{ github.base_ref }}...HEAD)
claude --print "以下のコミットメッセージを評価して。
基準:
- feat/fix/docs/chore などのプレフィックスがあるか
- 何を変更したか明確か
- 50文字以内か
コミット一覧:
$COMMITS
基準を満たしていないコミットを指摘して、改善案を提案して。
全て基準を満たしていれば LGTM と答えて。"
Before / After
Before(手動チェック)
PR 作成前のチェックリスト(毎回手動):
□ console.log の検索 → Cmd+Shift+F で全検索(5分)
□ any 型の確認 → TypeScript エラー確認(3分)
□ テスト追加確認 → カバレッジ手動確認(10分)
□ エラーハンドリング → コードを目視(10分)
□ コミットメッセージ → 手動で確認(5分)
→ PR 作成まで毎回 30分 のチェック作業
After(Claude CI)
git push → PR 作成
↓
Claude が自動チェック(5分)
↓
問題なし → レビュー依頼
問題あり → Claude のコメントを見て修正
→ チェック作業 0 分、修正も具体的な指摘があるので速い
ANTHROPIC_API_KEY の設定
GitHub リポジトリの Settings → Secrets and variables → Actions で設定します:
Name: ANTHROPIC_API_KEY
Value: sk-ant-...
コスト目安:
- PR 1 回あたり約 $0.01〜$0.03(1000 行以下の変更の場合)
- 月 100 PR で $1〜3 程度
まとめ
| ワークフロー | 効果 |
|---|---|
| 基本レビュー | any・console.log・エラーハンドリング自動チェック |
| 型チェック統合 | TypeScript エラーの原因と修正方法を自動提案 |
| セキュリティレビュー | API 変更時のセキュリティ問題を自動検出 |
| PR サイズチェック | 大きすぎる PR の分割提案 |
「レビュアーに依頼する前に Claude にレビューさせる」習慣をつけると、人間のレビュアーは本質的な設計や仕様の議論に集中できます。機械的なチェックは機械に任せましょう。
試したい人へ
英語の Glama Playground が苦手な人は、以下のコマンドで日本のターミナルから動かせます:
npx -y pay-per-call-mcp@latest
# → 8 つのデモ API がすぐ使えます
設定不要、課金なし、サインアップ不要。
よくある質問(FAQ)
Q. API コストが心配です
A. head -500 でコードを切ったり、変更行数が少ない PR はスキップする条件を入れると節約できます。月 100 PR で $1〜3 が目安です。
Q. プライベートリポジトリでも使えますか?
A. 使えます。ANTHROPIC_API_KEY を GitHub Secrets に設定するだけです。コードが Anthropic のサーバーを通ることに問題なければ利用できます。
Q. Claude のレビューが厳しすぎて CI が通らなくなりました
A. exit 1 でワークフローを失敗させる条件を厳しめに設定しすぎている可能性があります。最初は「コメントするだけ・CI は通す」設定にして、チームが慣れてから徐々に厳しくするのを推奨します。
Q. claude コマンドの --print フラグとは何ですか?
A. インタラクティブモードではなく、1 回の入力で結果を返して終了するフラグです。CI での利用に必須です。