GitHub Actions × Claude APIでコードレビュー自動化|設定から運用まで完全ガイド

AI・ChatGPT活用

プルリクエストのコードレビューに時間がかかりすぎていませんか?レビュイストの負担が大きく、品質のばらつきが出ているチームも多いと思います。毎日何十件ものPRをチェックし続けるのは、本来やるべき開発業務に支障が出てしまいます。

そこで注目されているのがGitHub ActionsとClaude APIの連携によるコードレビュー自動化です。AIが初期段階のレビューを担当することで、人間のレビュアーはより重要な設計判断やビジネスロジックの検証に集中できます。

本記事では、実際にGitHub ActionsでClaude APIを呼び出し、自動的にコードレビューコメントを付与する仕組みを、ステップバイステップで構築する方法をお届けします。設定から運用までの全プロセスを網羅しています。

GitHub ActionsでClaude APIを使う前に知るべきこと

GitHub ActionsはGitHubのワークフロー自動化サービスで、リポジトリ内のイベント(プルリクエスト作成時など)に反応して任意のスクリプトを実行できます。一方、Claude APIはAnthropicが提供するAI APIで、テキスト理解と生成に優れています。

この組み合わせが強力な理由は以下の通りです。

  • GitHub上で完全にクローズしたワークフローが構築でき、外部サービスの依存が最小限になる
  • Claude APIは複雑なコード解析に強く、単純なルールベースの検査より実用的なフィードバックが得られる
  • プルリクエストのコメント機能を活用して、レビューコメントが自動で付与される
  • 無料枠内で試験運用が可能であり、導入の敷居が低い

ただし、完全自動化ではなく、AIの補助的な役割と考えることが重要です。セキュリティ脆弱性の完全な検出や、複雑な設計判断はAIに任せられません。初期フィルタリング機能として活用するのが現実的です。

必要な準備物と事前設定

1. Claude APIのAPIキーを取得する

まず、AnthropicのコンソールからAPIキーを発行します。

  1. Anthropic Consoleにアクセスしてログイン、またはアカウント作成をする
  2. 左側メニューから「API keys」を選択
  3. 「Create Key」をクリックしてキーを生成
  4. 生成されたキーをコピーして安全に保管する

APIキーは絶対に公開リポジトリに直接記述してはいけません。必ずGitHubのシークレット機能を使用します。

2. GitHubリポジトリにシークレットを登録する

APIキーをGitHubのシークレットとして登録しましょう。

  1. GitHubリポジトリのSettings画面を開く
  2. 左側メニューから「Secrets and variables」→「Actions」を選択
  3. 「New repository secret」をクリック
  4. Name: ANTHROPIC_API_KEY、Value: 先ほど取得したAPIキーを入力
  5. 「Add secret」で保存

別の選択肢として、環境変数を使う方法もありますが、シークレットの方がセキュアです。

3. ワークフローファイルのディレクトリ構造を準備する

リポジトリのルートに.github/workflowsディレクトリを作成します。このディレクトリにYAML形式のワークフローファイルを配置することで、GitHub Actionsが自動で認識します。

GitHub Actions ワークフローの構築手順

ステップ1: ワークフローファイルの作成

.github/workflows/claude-code-review.ymlという名前でファイルを作成します。これがコードレビューを自動化するメインのワークフロー設定ファイルになります。

name: Claude Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      contents: read
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Get changed files
        id: files
        run: |
          git fetch origin ${{ github.base_ref }}
          files=$(git diff --name-only origin/${{ github.base_ref }}..HEAD)
          echo "changed_files<> $GITHUB_OUTPUT
          echo "$files" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

      - name: Review code with Claude
        id: review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          python3 - << 'EOF'
          import os
          import json
          import subprocess
          import sys
          sys.path.insert(0, '/usr/local/lib/python3.10/site-packages')
          
          # 必要なパッケージをインストール
          subprocess.run(['pip', 'install', 'anthropic', '-q'], check=True)
          
          from anthropic import Anthropic
          
          client = Anthropic()
          
          # 変更ファイルの取得
          result = subprocess.run(
              ['git', 'diff', 'origin/${{ github.base_ref }}..HEAD'],
              capture_output=True,
              text=True
          )
          diff_content = result.stdout
          
          # 大きなdiffの場合は制限する
          if len(diff_content) > 8000:
              diff_content = diff_content[:8000] + "\n... (truncated)"
          
          # Claude APIにコードレビューをリクエスト
          message = client.messages.create(
              model="claude-3-5-sonnet-20241022",
              max_tokens=1024,
              messages=[
                  {
                      "role": "user",
                      "content": f"""以下のコード差分をレビューしてください。
                      
発見した問題点を箇条書きで列挙し、各項目について簡潔に改善案を提示してください。
問題がない場合は「特に問題は見つかりませんでした。」と返答してください。

差分:
{diff_content}

レビュー結果:"""
                  }
              ]
          )
          
          review_result = message.content[0].text
          print(review_result)
          
          with open('review_result.txt', 'w') as f:
              f.write(review_result)
          EOF

      - name: Post review comment
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const reviewResult = fs.readFileSync('review_result.txt', 'utf8');
            
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## 🤖 Claude による自動コードレビュー\n\n${reviewResult}\n\n---\n*このレビューはAIが自動生成したものです。必ず人間によるレビューも行ってください。*`
            });

このワークフローは以下の流れで動作します。変更ファイルを検出し、その差分を取得してからClaude APIに送信し、レビュー結果をプルリクエストのコメントとして投稿します。

ステップ2: ワークフローファイルをリポジトリにコミット

作成したYAMLファイルをリポジトリにコミットしてプッシュします。

git add .github/workflows/claude-code-review.yml
git commit -m "Add Claude API code review workflow"
git push origin main

これでワークフローの登録は完了です。次のプルリクエストから自動レビュー機能が動作します。

ステップ3: テストプルリクエストで動作確認

実際の動作を確認するために、テスト用のブランチを作成してプルリクエストを開いてみましょう。

git checkout -b test/code-review-feature
# 何か簡単な変更を加える
echo "# Test Comment" >> README.md
git add README.md
git commit -m "Test commit for code review"
git push origin test/code-review-feature

その後、GitHubでプルリクエストを作成すると、自動的にワークフローが実行されます。数秒から数十秒でClaude APIのレビューコメントがPRに投稿されます。

より実用的なカスタマイズ方法

特定ファイルタイプのみをレビュー対象にする

全てのファイルをレビュー対象にするとAPI呼び出し数が増えすぎる場合があります。Python、JavaScript、Goなど、特定の言語のみをターゲットにすることをお勧めします。

- name: Filter review targets
  id: filter
  run: |
    files=$(git diff --name-only origin/${{ github.base_ref }}..HEAD | grep -E '\.(py|js|ts|go)$')
    echo "code_files<> $GITHUB_OUTPUT
    echo "$files" >> $GITHUB_OUTPUT
    echo "EOF" >> $GITHUB_OUTPUT

この処理を追加することで、PythonやJavaScriptファイルだけが検査対象になります。

レビュー結果の品質を向上させるプロンプト調整

Claude APIに送信するプロンプト(指示)を調整することで、レビューの質が大きく変わります。以下は改善されたプロンプト例です。

"""あなたはシニアエンジニアです。以下のコード変更をレビューしてください。

以下の観点でチェックしてください:
1. セキュリティ脆弱性(SQLインジェクション、認証不備など)
2. パフォーマンス問題(無限ループ、N+1クエリなど)
3. コードスタイルと可読性
4. エラーハンドリングの適切性
5. テストカバレッジの不足

各問題について、重大度(Critical/High/Medium/Low)を明記してください。
問題がない場合は「✅ レビュー完了

🤖 このブログはAIで自動運営しています。 同じ仕組みを御社にも導入できます。 無料相談はこちら
タイトルとURLをコピーしました