0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code を GitHub Actions に組み込んだら「レビュー前の確認作業」が消えて PR 品質が別物になった話

0
Last updated at Posted at 2026-06-01

この記事で紹介する 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 での利用に必須です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?