Claude

[Claude] GitHub のレビューを自動化するワークフローの導入方法(CLI)

以前にGitHub Actionsを使ってClaudeがPRレビューを自動で行う仕組みを紹介しました。

ただ現状では一番手っ取り早く導入できるのはCLIを使う方法です。
Claude Code CLI/install-github-app コマンドを実行するだけで、必要なファイルの生成からGitHub Appのインストール、Secretsの登録まで一括で行ってくれます。
またAPIを使用しないため、Pro/Maxプランに入っていれば料金も追加で発生しません。

ただデフォルトで導入しても、publicリポジトリの場合は外部ユーザーが @claude をトリガーできてしまうため、セキュリティ面で不安があるかもしれません。
そこで、CLIでセットアップした後にワークフローファイルを少しカスタマイズしています。
このカスタマイズによって、リポジトリの関係者以外が @claude をトリガーできないように制限できます。


完成イメージ

PR でのコードレビュー(自働)

開発者:プルリクエスト作成する
    ↓
Claude:GitHub Actionsからレビューを行う

PR でのコードレビュー(コメント)

開発者:「@claude レビューして」とPRにコメント
    ↓
Claude:👀 リアクションを即座に付ける(受信確認)
    ↓
Claude:差分を解析してレビューコメントを投稿

Issue での問い合わせ

開発者:「@claude このバグの原因を教えて」とIssueにコメント
    ↓
Claude:👀 リアクションを即座に付ける(受信確認)
    ↓
Claude:Issue の内容を読んで回答を投稿

事前準備

  • GitHub リポジトリの管理者権限を取得する
  • Anthropic のアカウントを取得し、Pro/Maxプランに加入する(claude.ai から加入可能)

手順

1. Claude Code CLI をインストールする

以前にご紹介したClaude Codeのインストール方法を参照してください。


2. /install-github-app コマンドを実行する

Claude Code が起動したら、次のスラッシュコマンドを入力します。

/install-github-app

ウィザードが起動し、以下の手順で導入を進めていきます。

2-1. Claude GitHub App のインストール

│ Install GitHub App                                                                                                                                              │
│ Select GitHub repository                                                                                                                                        │
│                                                                                                                                                                 │
│ > Enter repository                                                                                                                                              │
│                                                                                                                                                                 │
│   Enter a repo as owner/repo or https://github.com/owner/repo…   

この時に開発対象のリポジトリのURLを入力して、Claude GitHub App をインストールしてください。
以下のようにGitHubにClaudeのアプリケーションをインストールします。

2-2. ワークフローファイルの生成・コミット

  Select GitHub workflows to install
  We'll create a workflow file in your repository for each one you select.

  More workflow examples (issue triage, CI fixes, etc.) at: https://github.com/anthropics/claude-code-action/blob/main/examples/

  ❯ @Claude Code - Tag @claude in issues and PR comments ✔
    Claude Code Review - Automated code review on new PRs ✔

  ↑↓ to navigate · Space to toggle · Enter to confirm · Esc to cancel

ここではGitHubでClaudeがレビューしてくれるActionsのワークフローファイルを選択します。
@Claude Code - Tag @claude in issues and PR comments@claude メンションに応答するワークフロー、
Claude Code Review - Automated code review on new PRs はPRを開いた際に自動レビューするワークフローです。
スペースでチェックをON/OFFにできます。

2-3. CLAUDE_CODE_OAUTH_TOKEN の Secrets 登録

Claudeのトークンを使用するか、APIキーを使用するかの質問があります。
ここではClaude Pro/Maxプランアカウントを使用している方は上を選択します。

Install GitHub App
Choose API key

 > Create a long-lived token with your Claude subscription

   Enter a new API key

接続の許可が表示されるので「承認する」を選択してください。

承認したらOAuth トークンが自動で発行・登録されます。
リポジトリの Settings → Secrets and variables → Actions から CLAUDE_CODE_OAUTH_TOKEN にキーが登録されております。

設定が終了すると、ワークフローファイルの作成をONにしていた場合、Claude側でワークフローファイルをコミットして、プルリクエストが作成されます。
ここではmain ブランチへマージする必要があります。

作成されたファイルは以下の通りです。

ファイル用途
claude.yml@claude メンションに応答するワークフロー
claude-code-review.ymlPRを開いた際に自動レビューするワークフロー

※この段階ではClaudeのレビューでエラーとなる事があります。
これはまだmain ブランチにマージされていないためですので、一旦マージしましょう。

これでセットアップが完了です。
このまま使用してもいいですが、ワークフローファイルをカスタマイズしてセキュリティを高めたり、プロンプトを調整したりすることもできます。
あとPRについては、レビューはしてくれるけどコメントとして表示されなかったりしましたので、こちらも修正します。


3. ワークフローファイルをカスタマイズする

CLIが生成した2つのファイルのうち、@claude メンションに対応するのは「 claude.yml 」です。
まずはこちらをカスタマイズします。

.github/workflows/claude.yml 」を開き、内容を以下の通り置き換えます。
デフォルトのファイルの場合、トリガーを誰でも実行できてしまうため、リポジトリの関係者以外が @claude をトリガーできないように条件を追加しています。
またプロンプトもコメント時に指示を出せるのですが、事前の情報として「–append-system-prompt」に渡しています。
また暴走防止やモデルの設定などを「claude_args」に渡しています。

name: Claude Code

# -----------------------------------------------
# トリガー設定:@claude に反応するイベントの種類
# -----------------------------------------------
on:
  issue_comment:
    types: [created]           # PRやIssueのコメント欄への書き込み
  pull_request_review_comment:
    types: [created]           # PRのコード行へのインラインコメント
  issues:
    types: [opened, assigned]  # Issueの本文・タイトルに @claude が含まれて作成・アサイン
  pull_request_review:
    types: [submitted]         # レビュー送信時(Approve / Request changes)の本文

jobs:
  claude:
    runs-on: ubuntu-latest
    timeout-minutes: 10        # [追加] 暴走防止:デフォルト360分から短縮。長時間実行による課金・リソース消費を防ぐ

    # -----------------------------------------------
    # 実行条件:以下の2条件を両方満たす場合のみ実行
    # 条件①:各イベントの本文に @claude が含まれているか
    # 条件②:実行者がリポジトリの関係者であるか(外部ユーザーを除外)
    # [追加] デフォルトは条件①のみ。条件②を加えることで第三者からの悪用を防ぐ
    # 注意:if: | の中に # コメントは書けないため条件式のみ記載
    # -----------------------------------------------
    if: |
      (
        (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
        (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')) ||
        (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
      ) &&
      (
        github.event.comment.author_association == 'OWNER' ||
        github.event.comment.author_association == 'MEMBER' ||
        github.event.comment.author_association == 'COLLABORATOR' ||
        github.event.issue.author_association == 'OWNER' ||
        github.event.issue.author_association == 'MEMBER' ||
        github.event.issue.author_association == 'COLLABORATOR' ||
        github.event.review.author_association == 'OWNER' ||
        github.event.review.author_association == 'MEMBER' ||
        github.event.review.author_association == 'COLLABORATOR' ||
        github.event.sender.login == github.repository_owner
      )

    # -----------------------------------------------
    # 権限設定:Claude がリポジトリを操作するために必要な権限
    # -----------------------------------------------
    permissions:
      contents: read
      pull-requests: write  # [変更] デフォルトは read。コメント返信・PR操作に write が必要
      issues: write         # [変更] デフォルトは read。Issueへのコメント返信に write が必要
      id-token: write       # GitHub の OIDC 認証トークンを発行する
      actions: read

    steps:
      # -----------------------------------------------
      # ステップ①:リポジトリのコードをランナーに取得
      # fetch-depth: 1 で直近のコミットのみ取得(高速化)
      # -----------------------------------------------
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      # -----------------------------------------------
      # ステップ②:Claude を実行してコメントの指示に応答
      # prompt: を省略することでコメント本文がそのまま Claude への指示になる
      # -----------------------------------------------
      - name: Run Claude Code
        id: claude
        uses: anthropics/claude-code-action@v1
        with:
          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
          track_progress: true  # [追加] 処理中に進捗コメントを投稿してユーザーに状況を通知する(v1 新機能)
          claude_args: >-
            --model claude-sonnet-4-6
            --max-turns 20
            --append-system-prompt
            "あなたはこのリポジトリの開発アシスタントです。
            作業を開始する前に必ず CLAUDE.md を確認し、プロジェクトの概要・ブランチ運用・作業の流れ・注意事項を把握した上で対応してください。
            実装の詳細は 00.document/requirements.md を、ロードマップは 00.document/roadmap.md を参照してください。"
            --allowedTools "Bash(gh issue comment:*),Bash(gh pr comment:*),Bash(gh pr view:*),Bash(gh issue view:*),Bash(gh pr diff:*)"
          # [追加] claude_args の各オプション説明:
          # --model: 使用モデルを明示。未指定時はデフォルトモデル(claude-sonnet-4-6)が使われるが、テンプレートとして明示する
          # --max-turns: エージェントの最大実行ターン数。コスト・暴走防止のため上限を設定
          # --append-system-prompt: デフォルトのシステムプロンプトを保持しつつプロジェクト固有の指示を追記
          #   ※ --system-prompt は全体を上書きするため組み込み機能が失われる。append を使うこと
          # --allowedTools: デフォルトでは Bash は全て禁止。gh コマンドに限定して許可することでコメント返信等を可能にする
          additional_permissions: |
            actions: read

編集後、デフォルトブランチ(main)にマージすれば完了です。

コメントにも記述があるように、プロンプト自体はコメントの指示をそのまま Claude に渡す形にしています。
その前の事前情報として、プロジェクトの概要や注意事項を「–append-system-prompt」に追記しています。
また長時間の実行によるコスト・リソース消費を防ぐために、--max-turnstimeout-minutes でエージェントの最大実行ターン数を設定しています。
Opusを使用したい場合は --modelclaude-opus-4-6 を指定してください。

重要:main へのマージが必須
issue_comment トリガーのワークフローは、PRのターゲットブランチに関わらず、常にデフォルトブランチ(main)のワークフローファイルを参照します。
main にマージされて初めて @claude が動作します。

次に、PRの自動レビューを行う `claude-code-review.yml` を以下のようにカスタマイズします。

name: Claude Code Review

on:
  pull_request:
    types: [opened, synchronize, ready_for_review, reopened]
    #branches:
    #  - develop  # [追加] develop へのPRのみレビュー対象にする場合はコメントアウトを解除してください

jobs:
  claude-review:
    runs-on: ubuntu-latest
    timeout-minutes: 10        # [追加] 暴走防止:デフォルト360分から短縮。長時間実行による課金・リソース消費を防ぐ
    permissions:
      contents: read
      pull-requests: write  # [変更] デフォルトは read。PRへのレビューコメント投稿に write が必要
      issues: read
      id-token: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      - name: Run Claude Code Review
        id: claude-review
        uses: anthropics/claude-code-action@v1
        with:
          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
          # [変更] デフォルトは plugins + /code-review:code-review 方式(@beta 向け)だが、
          # @v1 では plugins 経由のレポートがPRに投稿されない問題があるため direct prompt 方式に変更。
          # prompt にレビュー指示を直接記述し、claude_args でコメント投稿権限を付与する。
          prompt: |
            REPO: ${{ github.repository }}
            PR NUMBER: ${{ github.event.pull_request.number }}

            レビューを開始する前に、以下のドキュメントを必ず確認してください。
            - CLAUDE.md:プロジェクト概要・ブランチ運用・作業の流れ・注意事項
            - 00.document/requirements.md:実装の詳細仕様

            上記を踏まえた上で、このPullRequestのコードをレビューしてください。
            以下の観点で確認し、問題があればコメントを投稿してください。
            - コード品質・ベストプラクティス
            - バグ・潜在的な問題
            - セキュリティ上の懸念
            - 要件定義書(requirements.md)の仕様との整合性
          claude_args: >-
            --model claude-sonnet-4-6
            --max-turns 20
            --allowedTools "Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),mcp__github_inline_comment__create_inline_comment"
          # [追加] claude_args の各オプション説明:
          # --model: 使用モデルを明示。未指定時はデフォルトモデル(claude-sonnet-4-6)が使われるが、テンプレートとして明示する
          # --max-turns: エージェントの最大実行ターン数。コスト・暴走防止のため上限を設定
          # --allowedTools: デフォルトでは Bash は全て禁止。gh コマンドに限定して許可することでPRへのコメント投稿を可能にする
          #   mcp__github_inline_comment__create_inline_comment: インラインコメント投稿用MCPツール

こちらも main にマージすれば、すべてのブランチへのPRで自動レビューが行われるようになります。
特定のブランチ(例:develop)のみを対象にしたい場合は、YAML内の branches のコメントアウトを解除してください。
暴走防止のため、こちらも timeout-minutes--max-turns で実行時間の上限を設定しています。
PRの内容を踏まえてレビューするため、プロンプト内でPR番号やリポジトリ名を渡しています。
レビューコメントを投稿するために、--allowedToolsgh pr commentmcp__github_inline_comment__create_inline_comment を許可しています。

※デフォルトの plugins 方式ではレビューコメントがPRに投稿されない問題があったため、direct prompt 方式に変更しています。この設定はClaudeに確認しながら調整しました。


4. 動作確認する

PR での確認
これでPR時に自動でレビューが行われるようになりました。
PRを開いて、数分待ってみてください。
PRのFiles changed タブを開くと、コード行にClaudeのレビューコメントが表示されているはずです。
PRのConversation タブには、Claudeがレビューを開始したことを知らせるコメントも投稿されます。

また追加でレビューや確認したい場合は、PRのコメント欄に @claude レビューして とコメントしてみてください。
こちらも数分待つと、PRのコード行にレビューコメントが表示されるはずです。

Issue での確認
Issueの本文やタイトルに @claude を含めて作成してみてください。
または既存のIssueのコメント欄に @claude 要約して とコメントすると、Issueの内容を要約して返信してくれます。

うまく動かない場合は、リポジトリの Actions タブ でワークフローのログを確認してみてください。
もしエラーが出ても、Claudeにエラー内容を確認して調整するといいでしょう。


ワークフローの仕組み

ワークフロー内の主要な設定について補足します。

トリガーの種類

on:
  issue_comment:               # PRやIssueのコメント欄への書き込み
  pull_request_review_comment: # PRのコード行へのインラインコメント
  issues:                      # Issueのタイトル・本文に @claude が含まれて作成・アサイン
  pull_request_review:         # レビュー送信時(Approve / Request changes)の本文

4種類のイベントをカバーすることで、PRやIssue上のあらゆる場面で @claude に反応します。

if 条件の構成

if: |
  (
    イベントの種類ごとに @claude を含むか判定
  ) &&
  (
    author_association が OWNER / MEMBER / COLLABORATOR のいずれか
    または リポジトリオーナー本人
  )

author_association によってリポジトリに招待された開発者のみが @claude を実行できるよう制限しています。
外部ユーザーがパブリックリポジトリでコメントしても、ワークフローは起動しません。

actions/checkout が必要な理由

claude-code-action はリポジトリのコードを読んだ上でレビューを行います。actions/checkout でコードをランナーにチェックアウトしないと、Claude がコードにアクセスできず、レビューコメントが投稿されません。
fetch-depth: 1 は直近のコミットのみ取得する設定で、リポジトリが大きい場合でも高速に動作します。

additional_permissions: actions: read の役割

CIの実行結果(テストの合否など)をClaudeがレビュー時に参照できるようにするための設定です。PR上でCIが失敗している場合、その情報をレビューコメントに含めることができます。

issue_comment トリガーとデフォルトブランチの関係

issue_comment トリガーは GitHub のセキュリティ設計上、常にデフォルトブランチ(通常は main)のワークフローファイルを参照します。
これは「誰でもワークフローを勝手に書き換えて実行させられないようにする」ための仕様です。
そのため、ワークフローの変更を有効にするには必ず main へのマージが必要です。


パブリックリポジトリでの追加セキュリティ設定

パブリックリポジトリでは、外部の誰でも @claude をトリガーできてしまいます。
悪意のある指示を実行させるリスクを減らすために、Environment の保護ルールを活用できます。

  1. Settings → Environmentsclaude-review という環境を作成する
  2. Required reviewers にメンテナーを追加する
  3. ワークフローに environment: claude-review を追加する
jobs:
  claude:
    runs-on: ubuntu-latest
    environment: claude-review  # 追加
    if: ...

これにより、メンテナーが承認した場合のみ Claude が実行されます。


まとめ

  1. Claude Code CLI をインストールしてログイン
  2. /install-github-app で一括セットアップ(CLAUDE_CODE_OAUTH_TOKEN の登録・2ファイル生成)
  3. claude.yml を置き換えて main にマージ
  4. PRで @claude レビューして、Issueで @claude 教えて とコメントして動作確認

一度セットアップすれば、PRでは @claude レビューして、Issueでは @claude 教えて とコメントするだけ。
レビューや問い合わせの初動を Claude に任せることで、人間のレビュアーはより本質的な議論に集中できます。
ぜひ試してみてください。