GitHub ActionsでテストがfailしたらClaude Code Actionsで自動修正する
はじめに
CIでテストが失敗したとき、エラーメッセージを見てすぐに修正できる簡単なものでも、手動で修正してpushするのは手間がかかります。そんなとき、AIに自動で修正してもらえたら便利ですよね。
本記事では、GitHub ActionsとClaude Code Actionsを組み合わせて、テストが失敗したときに自動的に修正を試みるワークフローの実装方法を紹介します。
Claude Code Actionsとは
Claude Code Actionsは、AnthropicのClaude AIをGitHub Actionsで利用できるようにしたツールです。コードの解析、修正、ビルド/テストの実行などをAIに任せることができます。
実装方法
Claude Code Actionsを使うための準備は、公式ドキュメント等を参照してください。ここでは、必要な秘匿情報等が設定された前提で、CI用のGitHub Actionsの例を示します。
name: CI - Build Validation
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build project
run: npm run build
- name: Run tests
run: npm test
- name: Run Claude on failure
if: failure() && github.event_name == 'pull_request'
uses: anthropics/claude-code-action@beta
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
direct_prompt: |
CIのビルドまたはテストが失敗しました。上記のエラーログを分析して、
問題を修正してください。
具体的には:
1. エラーメッセージを確認
2. 失敗の原因を特定
3. 適切な修正を実行
4. 修正後、再度ビルド/テストを実行して成功を確認
5. 修正内容を説明的なコミットメッセージでコミット
ポイント
permissionsの設定
Claude Code Actionsのサンプル等に示されている権限を、CIのActionsにも設定する必要があります。
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
PRでのみ実行
直接mainブランチにpushするのを避けるため、プルリクエストでのみ実行します。
if: failure() && github.event_name == 'pull_request'
direct_prompt
を使ってClaude Code Actionsを起動
GitHub Actionsのbotアカウントによるコミットやコメントでは、デフォルトでは新しいワークフローをトリガーしません。failure()
の中で @claude 直して
といった内容をコメント投稿しても、Claude Code Actionsを起動できないという制約があります。
そのため、同じワークフロー内で failure()
条件を使い、Claude Code Actionsのdirect_prompt
でプロンプトを指定してClaude AIを起動します。この方法によりCIの中で修正やコメントを完結できます。
まとめ
GitHub ActionsとClaude Code Actionsを組み合わせることで、ビルドやテストの失敗を自動的に修正するワークフローを構築できました。いくつかプライベートのプロジェクトに導入したところ、意図的に入れたエラーであればほぼ特定してくれましたし、ライブラリのバージョンアップにおける非互換な変更等も一部修正してくれました。
mcpの利用でさらに便利になる可能性がありますので、いろいろなプロジェクトに入れて試していく予定です。
Discussion