こんにちは、インテグレーション技術部のNagaraです。

皆さんは日々、Claude Codeを使っていますか?この前公式Xに一周年お祝いポストが投稿されていたのですが、動くClawd君がキュートでした。(噂だとClawd君はカニらしいです)

そんなClaude Codeですが、実はGithub Actionと連携できる「Claude Code Github Action」という機能があります。Claude Code Github Actionを使うと、AIを活用した便利なワークフローを作成することができます。

今回はClaude Code Github ActionをAmazon Bedrock経由で動かす方法や、作成したワークフローについて解説していきます。

Claude Code GitHub Action とは

Claude Code GitHub Actionは、Anthropicが公式に提供しているGitHub Actionです。GitHub上のPRやIssueにClaudeを統合し、コードレビュー・質問回答・コード実装などを自動化できます。

仕組みとしては、PRやIssueなどのGitHubイベントをトリガーにClaude Code SDKがGitHubランナー上で実行され、結果がGitHub APIを通じてコメントやレビューとして投稿されます。

ワークフロー自体は開発者が自由に定義できるため、以下の機能を組み合わせ、様々な自動化を行うことができます:

  • トリガーの自動検出: @claude メンション、Issueへの割り当て、PRイベントなど、トリガー種別を自動で判定してくれる
  • CLAUDE.md対応: リポジトリに配置した CLAUDE.md をプロジェクトルールとして読み込むため、コーディング規約や設計方針に沿った動作が可能
  • MCP(Model Context Protocol)サーバー対応: 外部ツールを統合して機能を拡張できる。インラインコメント投稿などもMCPサーバー経由で実現
  • 複数の認証方式: Anthropic API直接のほか、AWS Bedrock・Google Vertex AI等に対応

導入の背景

導入の背景としては以下の通りです。

チームの課題

  • レビュー負荷の集中: レビューできるメンバーが限られており、PRが滞留しがちだった
  • レビューの見落とし: 人手のレビューだけでは、タイポや単純なバグをすり抜けてしまうことがあった

こうした課題に対して、「AIに一次レビューを任せられないか」「人間が見落としがちな部分を機械的にカバーできないか」と考えたのが、導入のきっかけです。

技術的な興味

  • GitHub Actions × AI の可能性: CI/CDパイプラインにAIを組み込むことで、従来の静的解析やリンターとは異なる、文脈を理解したフィードバックが得られるようになる
  • Claude Codeの拡張性: 普段ローカルで使っているClaude Codeが、GitHub Actions上でもそのまま動く。ローカルとCI、両方でAIを使えると面白そう

※どちらかというと、技術的興味の方が大きかったのはここだけの話ということで…_(:3」 ∠)_

作成したワークフロー3種

今回、私が作成したワークフローは以下の三つです:

  • Issue → PR自動作成: Issueの内容を読み取って、コードを実装してPRを作成
  • PRの自動レビュー: PR作成時にClaudeがコードレビュー
  • @claudeメンションでの対話: Issue/PRコメントでClaudeに質問・依頼

「自分のリポジトリにAIアシスタントが常駐している」ような感覚で使えます。

1. Issue to PR(claude-issue-to-pr.yml

Issueに claude:implement ラベルを付ける
    ↓
Claude がコードを実装
    ↓
PRが自動作成される

Issueに要件を書いて、ラベルをポチッと付けるだけでPRができあがります。ちょっとした機能追加やバグ修正なら、これで十分対応できることも多いです。

使い方の例:

  1. Issueを作成して要件を記載

## 概要
ユーザー一覧画面に検索機能を追加してください。

## 要件
– 名前で検索できること
– メールアドレスで検索できること
– 部分一致検索に対応すること

  1. claude:implement ラベルを付与
  2. しばらくすると、Issue欄にGithubActionによるコメントが投稿・更新され、リアルタイムで進捗が確認できます。
  3. 数分待つと…自動でPRが作成されます!

2. PR Review(claude-pr-review.yml

PRを作成(Draft以外)
    ↓
Claudeが自動でコードレビュー
    ↓
インラインコメントで指摘

人間のレビュアーが見る前に、Claudeが一次レビューをしてくれます。タイポや明らかなバグは、ここで弾けます。

3. Chat(claude-chat.yml

Issue/PRで @claude とメンション
    ↓
Claudeが返答

「この関数の動作を教えて」「再レビューをお願い」といった質問に、コードベースを踏まえて回答してくれます。

使い方の例:

PRのコメントで:

@claude このPRでの追加の変更内容をレビューしてください。
特にセキュリティの観点でチェックをお願いします。

すると、Claudeが差分を分析してインラインコメントで指摘してくれます。PRの指摘修正後の再レビューに使うことが多いです。

補足: Chatワークフローはリードオンリーに設定しています。元々Write権限を与えていましたが、メンバーがGithub上で@claudeメンションによるコード変更をすることがなかった(利用率が低かった)ため、不要なWrite権限を除去し、質問回答やレビューコメントに特化させています。コード修正が必要な場合は、個人の環境で対応する運用としています。

セットアップ手順

ここからは実際のセットアップ手順を解説します。

1. OIDCプロバイダーの設定

まず、AWSアカウントにGitHub ActionsのOIDCプロバイダーを登録します。

IAMコンソールでの設定:

  1. IAMコンソール → IDプロバイダープロバイダを追加
  2. プロバイダのタイプ: OpenID Connect
  3. プロバイダURL: https://token.actions.githubusercontent.com
  4. 対象者(Audience): sts.amazonaws.com
  5. プロバイダを追加 をクリック

これで、GitHub ActionsからAWSへのキーレス認証が可能になります。

2. IAMロールの作成

次に、Claude Code ActionがBedrockを呼び出すためのIAMロールを作成します。

信頼ポリシー(Trust Policy):

{
    “Version”: “2012-10-17”,
    “Statement”: [
        {
            “Effect”: “Allow”,
            “Principal”: {
                “Federated”: “arn:aws:iam::{AWSアカウントID}:oidc-provider/token.actions.githubusercontent.com”
            },
            “Action”: “sts:AssumeRoleWithWebIdentity”,
            “Condition”: {
                “StringEquals”: {
                    “token.actions.githubusercontent.com:aud”: “sts.amazonaws.com”
                },
                “StringLike”: {
                    “token.actions.githubusercontent.com:sub”: “repo:{Organization}/{リポジトリ名}:*”
                }
            }
        }
    ]
}

{Organization}/{リポジトリ名} の部分は、実際のリポジトリに合わせて変更してください。

権限ポリシー(Permission Policy):

{
    “Version”: “2012-10-17”,
    “Statement”: [
        {
            “Effect”: “Allow”,
            “Action”: [
                “bedrock:InvokeModel”,
                “bedrock:InvokeModelWithResponseStream”
            ],
            “Resource”: [
                “arn:aws:bedrock:ap-northeast-1:xxxxxxxxxxxx:inference-profile/global.anthropic.claude-opus-4-6-v1”,
                “arn:aws:bedrock:ap-northeast-1:xxxxxxxxxxxx:inference-profile/global.anthropic.claude-sonnet-4-6”,
                “arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-opus-4-6-v1”,
                “arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-sonnet-4-6”,
                “arn:aws:bedrock:*::foundation-model/anthropic.claude-opus-4-6-v1”,
                “arn:aws:bedrock:*::foundation-model/anthropic.claude-sonnet-4-6”
            ]
        }
    ]
}
※`xxxxxxxxxxxx` の部分は、ご自身のAWSアカウントIDに置き換えてください。Bedrockの推論プロファイル(Inference Profile)を使用することで、クロスリージョン推論が可能になります。

3. GitHub Secretsの設定

作成したIAMロールのARNを、リポジトリのSecretに登録します。

  1. GitHubリポジトリの SettingsSecrets and variablesActions
  2. New repository secret をクリック
  3. Name: CLAUDE_CODE_ACTION_ROLE
  4. Secret: IAMロールのARN(arn:aws:iam::...から始まる文字列)

4. ワークフローファイルの配置

最後に、ワークフローファイルを .github/workflows/ に配置します。

以下は PR Review ワークフローの例です:

name: Claude PR Review

on:
  pull_request:
    types: [opened, ready_for_review]

jobs:
  pr-review:
    if: github.event.pull_request.draft == false

    runs-on: ubuntu-latest
    timeout-minutes: 15

    env:
      ANTHROPIC_BEDROCK_BASE_URL: “https://bedrock-runtime.ap-northeast-1.amazonaws.com”
      # サブエージェント用モデル設定(Bedrockで有効なモデルIDを指定)
      ANTHROPIC_DEFAULT_HAIKU_MODEL: “global.anthropic.claude-haiku-4-5-20251001-v1:0”
      ANTHROPIC_DEFAULT_SONNET_MODEL: “global.anthropic.claude-sonnet-4-6”

    permissions:
      contents: read
      pull-requests: write
      id-token: write # OIDC認証に必要

    steps:
      – name: Checkout repository
        uses: actions/checkout@v5
        with:
          fetch-depth: 0

      – name: Configure AWS Credentials (OIDC)
        uses: aws-actions/configure-aws-credentials@v6
        with:
          role-to-assume: ${{ secrets.CLAUDE_CODE_ACTION_ROLE }}
          aws-region: ap-northeast-1

      – name: Run Claude PR Review
        uses: anthropics/claude-code-action@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          use_bedrock: “true” # Bedrock経由を有効化
          show_full_output: true # デバッグ用ログを表示
          track_progress: true
          claude_args: |
            –model global.anthropic.claude-sonnet-4-6
            –allowedTools “
              Task,
              Read,
              Glob,
              Grep,
              git fetch,
              mcp__github_comment__update_claude_comment,
              mcp__github_inline_comment__create_inline_comment,
              Bash(gh pr diff:*),
              Bash(gh pr view:*),
              Bash(gh issue view:*),
              Bash(git diff:*),
              Bash(git log:*)
            “
          prompt: |
            PRのコードレビューを行い、問題点をインラインコメントで指摘してください。

ポイント:

  • use_bedrock: "true" でBedrock経由を有効化
  • id-token: write がOIDC認証に必須
  • aws-actions/configure-aws-credentials@v6 でAWS認証(v4はNode.js 20非推奨警告が出るためv6に更新)
  • モデルIDは global.anthropic.claude-sonnet-4-6 のように指定(Bedrockの推論プロファイル形式)
  • ANTHROPIC_DEFAULT_HAIKU_MODEL / ANTHROPIC_DEFAULT_SONNET_MODEL 環境変数で、サブエージェントが使用するモデルを指定
  • --allowedToolsGitHub MCP ツールmcp__github_inline_comment__create_inline_comment 等)を明示的に許可する必要がある。これを指定しないと、Claudeがインラインコメントを投稿できない
  • show_full_output: true でデバッグ用のログを確認可能。
  • track_progress: true でPRコメントに進捗表示

ハマりポイントと対処法

導入時にいくつかハマったポイントがあったので、共有します。

1. Actions作成のPRで自動レビューが動かない

現象: claude-issue-to-pr.yml で作成されたPRに対して、claude-pr-review.yml が動作しない

原因: GitHub Actionsの仕様で、GITHUB_TOKEN で作成されたイベントは新しいワークフローをトリガーしません(無限ループ防止のため)

対処法: PRコメントで @claude レビューして とメンションすれば、Chat経由でレビューできます

2. devブランチでワークフローが動かない

現象: mainブランチでは動くが、devブランチでは動かない

原因: issues イベントや issue_comment イベントは、デフォルトブランチのワークフローファイルしか参照しない

対処法: mainブランチのワークフローを更新したら、devブランチにも同期する

運用上の注意点

便利なClaude Code GitHub Actionですが、運用する上で意識しておくべきポイントがあります。

ブランチ保護ルールの設定

Issue to PRワークフローでは、Claudeがブランチ作成・コミット・プッシュを行います。そのため、ブランチ保護ルールを設定しないと、Claudeが maindev に直接プッシュできてしまう可能性があります

GitHubのリポジトリ設定で、以下を設定しておくことをおすすめします:

  • main / dev などの重要ブランチに対して Branch protection rules を有効化
  • Require a pull request before merging を有効にし、直接プッシュを禁止
  • 必要に応じて Require approvals で人間のレビュー承認を必須化

ワークフロー側でも branch_prefix: "feature/" を指定して、Claudeが作成するブランチを feature/* に限定していますが、ブランチ保護はGitHub側でも必ず設定しておきましょう。

Claudeの権限は最小権限にする

Claude Code ActionはGitHub Actionsのランナー上で動作するため、付与する権限は必要最小限に絞ることが重要です。権限が広すぎると、予期しない操作が実行されるリスクがあります。

GitHub Actionsのpermissions設定:

ワークフローの permissions は、そのワークフローが本当に必要とする権限だけを付与します。

  • コードレビューのみ行うワークフローなら contents: read / pull-requests: write で十分
  • Issue to PRのようにコードを書くワークフローは contents: write が必要だが、それ以外は絞る
  • id-token: write はOIDC認証に必要だが、Bedrock不使用なら不要

–allowedToolsでコマンド権限を制限:

Claude Code Actionは --allowedTools オプションで、Claudeが実行できるツール・コマンドを明示的に制限できます。これを指定しない場合、Claudeはすべてのツールを使用できる状態になります。

  • レビューワークフローなら読み取り系のみ許可(ReadGlobGrepBash(git diff:*) など)
  • Bash(*) のような広い指定は避け、実行するコマンドを具体的に列挙する
  • インラインコメント投稿が必要なら mcp__github_inline_comment__create_inline_comment を個別に許可する

ワークフローの目的に合わせて、最小限の権限・ツールセットを定義することで、意図しない操作のリスクを減らすことができます。

Issueの要件は明確に書く必要がある

Issue to PR機能は、Issueに書かれた要件をもとにClaudeが実装を行います。そのため、要件が曖昧だと、意図しないコードが生成されます

  • 「検索機能を追加して」だけでは不十分。何を、どのように検索するのか、UIはどうするのかまで書く
  • 受け入れ条件(Acceptance Criteria)を箇条書きで明記するのが効果的
  • 既存のコードとの整合性が必要な場合は、参照すべきファイルや関数名を具体的に指示する

人間のエンジニアに依頼するときと同様、「伝わるIssue」を書くことが品質に直結します。

おわりに

導入してみて一番良かったのはpr-reviewで、PRを出した直後にレビューコメントが付くようになったことです。タイポや明らかなバグ、CLAUDE.mdへの準拠チェックなど、人間が見落としがちな部分を機械的に拾ってくれるので、レビュアーの負荷が軽くなりました。

個人的には「自分のリポジトリにAIアシスタントが常駐している」感覚が面白く、@claudeで気軽に質問や再レビュー依頼ができるのも地味に便利です。

将来的には、サブエージェントによる並列レビュー、MCPを用いたレビュー品質向上、Dependabotと連携した脆弱性対応の自動化などにもチャレンジしてみたいです。

AWS Bedrockを既に利用されている方は、ぜひ試してみてください!

参考リンク