github actionでClaude Code Actionを走らせてみた。
Claude code actionを使ってPRのレビューとissue対応を自動化できるように、github actionを定義しました。
action定義についても様々な記事があり、チームや個人で利用されている方が多くいますね.
本記事は、Bed Rockを利用したパターンの一例として、みていただけますと幸いです!
参考
Amazon Bed Rockとは?
AWSが提供するAIエージェントを構築するツールです。
こちらを利用して、今回は設定していきます。
実際のコード PR Review toggleが推奨
PRのレビュー用のaction
name: Claude PR Reviewer
on:
pull_request_review_comment:
types: [created]
pull_request_review:
types: [submitted]
jobs:
review-pr:
if: |
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude'))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
issues: read
id-token: write
actions: read
env:
AWS_REGION: ap-northeast-1
CLAUDE_MODEL_ID: anthropic.claude-4-20250101-v1:0 # 利用可能なモデル
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 50 # 適度な履歴を保持
- name: Configure AWS Credentials (OIDC)
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ${{ env.AWS_REGION }}
- name: Run Claude Code for PR Review
uses: anthropics/claude-code-action@v1
timeout-minutes: 30 # 適切なタイムアウト設定
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
use_bedrock: "true"
claude_args: '--max-turns 5'
ワークフローの徹底解説
1.実行条件 (if:)
if: |
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude'))
ワークフローは毎回実行されるのではなく、コメント本文に@claudeという文字列が含まれている場合のみ、ジョブが実行されます.これにより,無駄な実行を防ぎ、コストを節約できます。今回は、コスト面を考慮して、自動で実行させることができないように意図的にしています.
- トリガー設定 (on:)
on:
pull_request_review_comment:
types: [created]
pull_request_review:
types: [submitted]
このワークフローは、PRのレビューコメントやレビュー自体が新しく作成・提出されたときに起動します.これにより、開発者がレビュープロセスの中で自然にClaudeを呼び出せるようになります.
- 権限設定 (permissions:)
permissions:
contents: read
pull-requests: write
id-token: write
セキュリティのベストプラクティスである「最小権限の原則」に従い、このジョブに必要な権限だけをGITHUB_TOKENに与えています.
contents: read: リポジトリのコードをチェックアウトするために必要です.
pull-requests: write: ClaudeがレビューコメントをPRに書き込むために必要です.
id-token: write: AWSとのOIDC認証(後述)のために必要です.
- AWS認証 (configure-aws-credentials)
- name: Configure AWS Credentials (OIDC)
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ${{ env.AWS_REGION }}
ここでは、OIDC (OpenID Connect) という仕組みを利用し、パスワードやアクセスキーをGitHub Secretsに保存することなく、安全にAWSの権限を一時的に取得しています. secrets.AWS_ROLE_ARNには、事前にAWS側で作成したIAMロールのARNを設定します.
このIAMロールをリポジトリごとに定義することで、権限を最小単位で管理ができるようにしています.
IAMユーザーではなく、ロールで定義を行うところがポイントです.
実際のコード Issue
name: Claude Issues Handler
on:
issues:
types: [opened, assigned]
issue_comment:
types: [created]
jobs:
handle-issue:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
id-token: write
actions: read
env:
AWS_REGION: ap-northeast-1
CLAUDE_MODEL_ID: anthropic.claude-4-20250101-v1:0 # 利用可能な場合
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 50 # 適度な履歴を保持
- name: Configure AWS Credentials (OIDC)
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ${{ env.AWS_REGION }}
continue-on-error: false
- name: Verify AWS Connection
run: |
aws sts get-caller-identity || {
echo "❌ AWS authentication failed"
exit 1
}
continue-on-error: false
- name: Run Claude Code for Issues
uses: anthropics/claude-code-action@v1
timeout-minutes: 30 # 適切なタイムアウト設定
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
use_bedrock: "true"
claude_args: '--max-turns 5'
issue用も基本的は同じです!PRを作成させるので、
permissions:
contents: write
pull-requests: write
issues: write
id-token: write
actions: read
contentsの作成を許可させるところは、変えています!
課題感
ざっと箇条書きで書きます.
- レビューが基本英語
@claudeだけで、レビューを開始した際、英語でレビューが返ってくる。これ自体は、そこまで困らないが、メンバー間で日本語のみの利用であれば、初めから設定してもいいかもしれない.
@claude 日本でレビューをして
これで、日本語にはなるが、最初からデフォルトでプロンプトに設定しておいても良さそう.
-
レビューの文章が長い.
不要なコメントと感じるところもあり、レビューの文章量も制限をするなど、読みやすいレビュー文になるように、チューニングは試みたい. -
PRのコメントで、反応しない場所がある.
慣れたら、気にならなさそうだが、コメントを書く場所を意識していく必要がある.
(画像追加)
今回はプロンプトの調整などをしていなかったので、今後細かなチューニングは行っていきたいと考えています.
最後まで、読んでいただき、ありがとうございました.
Discussion