🤖

Claude Code Actionsでコードレビューの負荷を下げる

に公開

AI駆動開発とコードレビューの課題

AI駆動開発が当たり前になった今、コーディング自体はAIが担うケースが増えています。しかし、それに伴ってコードレビューの量も急激に増加しており、レビュアーの負荷が問題となっています。我々のチームでも大量のPRが発生し、しかも1つ1つの変更量が大きいという状況でした。
我々のチームでは、Claude Code Actionsを活用したコードレビューの自動化により、この課題の改善を図りました。

Claude Code Actions

Claude Code Actionsはこの問題を解決する有力な選択肢ですが、デフォルト設定では実用面で少し物足りない部分もあります。具体的には、

  • 全体的なコメントのみで、インラインでの具体的な指摘ができない
  • どの観点でのレビューなのか、どの程度の優先度で対応すべきかが不明確

これらの課題を解決するため、カスタムインストラクションを適用してみましょう。

実装内容

例えばWebアプリ開発のレポジトリでは以下のような設定を使用しています:

- uses: anthropics/claude-code-action@beta
  with:
    model: "claude-sonnet-4@20250514"
    custom_instructions: |
      必ず日本語でレビューしてください。
      このPRをレビューして、GitHubレビューシステムを利用してインラインフィードバックを提供してください。以下の手順に従ってください:
      1. **レビューを開始**: `mcp__github__create_pending_pull_request_review`を使用して保留中のレビューを開始します
      2. **差分情報を取得**: `mcp__github__get_pull_request_diff`を使用してコードの変更点と行番号を理解します
      3. **インラインコメントを追加**: 特定の行に対する具体的なフィードバックについて、`mcp__github__add_comment_to_pending_review`を使用します
      4. **レビューを提出**: `mcp__github__submit_pending_pull_request_review`を使用して、イベントタイプ"COMMENT"("REQUEST_CHANGES"ではない)ですべてのコメントを非ブロッキングレビューとして公開します
      具体的で実行可能なフィードバックを提供してください。行固有の問題にはインラインコメントを使用し、レビューを提出する際には全体的な要約を含めてください。
      **重要**: PRをブロックしないよう、"COMMENT"タイプで提出してください。
      **重要**: インラインコメントは以下の方法で記述してください(全体へのレビューでは使用しないこと):
        - どの観点でのインラインコメントかをラベルとして記述
          - **`📄 Code`**: コード品質とベストプラクティス
          - **`🛡️ Security`**: 潜在的なバグやセキュリティの問題
          - **`🚀 Performance`**: パフォーマンス
          - **`🔧 Maintainability`**: 保守性と可読性
          - **`🏛️ Architecture`**: アーキテクチャと設計の決定
        - インラインコメントへの対応要否を記述
          - **`🔴 CRITICAL`**: 対応必須
          - **`🟡 RECOMMEND`**: 推奨対応
          - **`🔵 OPTIONAL`**: 任意対応
          - **`🟢 FYI`**: 参考情報(対応不要)
      記述例: **`🚀 Performance`** **`🟡 RECOMMEND`**
    allowed_tools: "mcp__github__create_pending_pull_request_review,mcp__github__add_comment_to_pending_review,mcp__github__submit_pending_pull_request_review,mcp__github__get_pull_request_diff"

レポジトリがAI開発の場合は、ラベルを少し変えて:

                - **`🔢 Data`**: データ品質(データの前処理、バリデーション等)
                - **`🔬 Reproducibility`**: 再現性(シード値の固定やパラメータの保存等)
                - **`🚀 Performance`**: パフォーマンス
                - **`🔧 Maintainability`**: 保守性と可読性
                - **`🤖 Model Design`**: モデル設計(アーキテクチャ、ハイパーパラメータ、学習戦略等)

等で設定しています。ラベルは適宜見直すことを想定していますが、現状あまり大きな見直しは発生していません。

実装のポイント

MCPによるインラインレビュー機能

4つのMCPツール(create_pending_pull_request_reviewget_pull_request_diffadd_comment_to_pending_reviewsubmit_pending_pull_request_review)を組み合わせることで、GitHubのレビューシステムと完全に統合されたワークフローを実現しています。これにより特定の行に対する具体的な指摘が可能になりました。

構造化されたラベルシステム

各インラインコメントには2軸でラベルを付与しています。

  • 観点ラベル: どの視点からの指摘か(📄 Code、🛡️ Security等)
  • 優先度ラベル: 対応の緊急度(🔴 CRITICAL、🟡 RECOMMEND等)

これらの組み合わせにより、開発者はどの観点での指摘なのか、どの程度の優先度で対応すべきかが一目で判断できます。

結果

導入後、定性的ではあるのですが、チーム内で以下のような効果を実感しています。

レビューの質向上

例えば、以下のようなレビューがClaude Codeから提供されます。

他にも、ラベルごとに以下のような指摘が行われています。

  • 🚀 Performance + 🟡 RECOMMEND: 無駄なfor loopの検知等
  • 🔧 Maintainability + 🔵 OPTIONAL: 変数名の改善提案等

効率化

AIによるレビューなのでもちろん的外れな指摘もありますが、インラインレビュー+ラベルシステムにより、指摘内容の妥当性を人が検証する時間も大幅に高速化されたと感じています。優先度ラベルがあることで、どの指摘に時間を使うべきかの判断も迅速になっています。

我々のチームではPRがReadyになった段階で、上記のAIコードレビューを実施することをルールとして運用しています。AIレビューに対するレビュイーの対応等を見てから、再度人がレビューすることができるので、レビュー時間自体の短縮にもつながったと考えています。

SOMPO Digital Lab

Discussion