GitHub Issue・PR対応をClaude Codeで自動化する実践ガイド|トリアージからPR下書きまで

Claude Code
開発フロー自動化

GitHub Issue・PR対応をClaude Codeで自動化する実践ガイド|トリアージからPR下書きまで

Issueが積み上がる、レビュー待ちのPRが渋滞する——GitHub上の定型対応は、Claude Code公式のGitHub Actionsで自動化できます。この記事では、Issueの自動トリアージ、PRレビュー、そして「AIが暴走してmainを壊さない」ための安全設計まで、実際のワークフローYAMLとともに解説します。

スポンサーリンク

自動化は3段階に分けて進める

GitHub上の定型対応を自動化するときは、いきなり全自動を目指さず、「調査・要約」→「分類・ラベル付け」→「下書き作成(人間レビュー前提)」の順に自動化レベルを上げるのが安全です。AIにIssueを自動クローズさせたりPRを自動マージさせたりする完全無人化は目指さず、人間の最終判断を必ず挟む設計にします。

レベル内容この記事での扱い
①調査・要約Issueの内容整理、関連コードの特定、重複Issueの検出基本機能として全編で扱う
②分類・ラベル付けbug/feature/questionの判定、優先度推定、担当ラベル付与実践①
③PR下書き(人間レビュー)Issueの内容を実装し、ドラフトPRとして提出実践②
④全自動マージレビューなしでマージまで実行扱わない(非推奨)

2つの実装方法:GitHub Actions vs 自前スクリプト

Claude CodeをGitHubのワークフローに組み込む方法は、大きく2つあります。

方法特徴向いている場合
①公式GitHub Action
claude-code-action
Anthropic公式。GitHub Appとして権限管理され、@claudeメンションやIssue作成などのイベントで自動起動ほとんどのケースでこちらが簡単
②headlessモード+自前スクリプト
claude -p
gh CLIと組み合わせて自分のサーバー・cronから実行。GitHub Actions分数を消費しないGitHub外のインフラで動かしたい、より細かい制御が必要な場合

この記事では主に①を扱います。②のclaude -pの詳しい使い方(定期実行の設計)はClaude Codeを定期実行する方法で別途解説しています。

導入:公式GitHub Actionのセットアップ

ローカルのClaude Codeから、対象リポジトリで次のコマンドを実行するだけでセットアップが始まります。

/install-github-app

これでClaude GitHub Appのインストールと、ワークフローファイル・APIキーのシークレット登録まで対話的に進みます。手動で行う場合は、Claude GitHub Appをリポジトリにインストールし、リポジトリのSecretsにANTHROPIC_API_KEYを登録、.github/workflows/にワークフローYAMLを配置します。GitHub Appが要求する権限はContents・Issues・Pull requestsの読み書きのみです。

⚠ リポジトリ管理者権限が必要

GitHub Appのインストールとシークレットの追加には、リポジトリの管理者権限が必要です。組織のリポジトリで導入する場合は、事前に管理者に相談してください。

基本形:@claudeメンションに応答する

最も基本的な形は、IssueやPRのコメントで@claudeとメンションしたときだけ起動するワークフローです。

name: Claude Code
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
jobs:
  claude:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          # コメント内の @claude メンションに自動応答

導入後は、Issueやレビューコメントで次のように話しかけるだけで動きます。

@claude このIssueの内容を実装してPRにしてください
@claude このエンドポイントの認証はどう実装すべきですか?
@claude ダッシュボードのTypeErrorを直してください

実践①:新着Issueの自動トリアージ

Issueが作成されるたびに、種別・優先度を判定してラベルを提案させます。ラベル付けだけなら実装ミスの被害がほぼゼロなので、自動化の入り口として最適です。

name: Issue Triage
on:
  issues:
    types: [opened]
jobs:
  triage:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      contents: read
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            このIssueの内容を読み、以下を行ってください。
            1. bug / feature-request / question のいずれかを判定してラベル付け
            2. 優先度(critical/high/medium/low)を判定してラベル付け
            3. 情報が不足している場合は、必要な追加情報をコメントで質問する
            4. 実装方針をコメントするだけに留め、コードは書かない
          claude_args: "--max-turns 5"

promptにタスクを明示すると、@claudeメンションを待たずにIssue作成をトリガーに即座に起動します。ステップ4で「コードは書かない」と明示しているのがポイントで、トリアージ専用のジョブに役割を絞ることで、意図しない実装まで暴走するのを防ぎます。

実践②:Issueからドラフトプルリクエストを作る

実装まで任せる場合も、必ずドラフトPRとして提出させ、通常のPRとしてマージ可能にはしない設計にします。

name: Implement from Issue
on:
  issues:
    types: [labeled]
jobs:
  implement:
    if: github.event.label.name == 'ai-implement'
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            このIssueの内容を実装してください。
            - 変更は新しいブランチで行い、ドラフトPRとして提出する
            - 実装方針・変更ファイル一覧をPRの説明に書く
            - テストが存在するプロジェクトなら、対応するテストも追加する
            - 不明な仕様判断があれば、実装せずPRの説明に「要確認」として明記する
          claude_args: "--max-turns 15 --model claude-sonnet-5"

ai-implementラベルが付いたときだけ起動する」という条件(if:)を挟むことで、人間が「これは自動実装させてよい」と判断したIssueだけを対象にできます。トリアージ(実践①)で分類したあと、簡単なタスクにだけこのラベルを付ける運用が現実的です。

✕ 絶対にやってはいけないこと

生成されたPRの自動マージ・自動承認は行わないでください。claude-code-actionのGitHub Appにcontents: write権限を与えている以上、理論上はpushも可能ですが、ドラフトPRを人間がレビューしてからマージするフローを崩さないことが安全設計の要です。CLAUDE.mdに「mainブランチへの直接pushは絶対に行わない」と明記しておくことも有効です。

実践③:スケジュール実行でPRレビュー・日次レポート

on: scheduleと組み合わせると、定期実行の自動化もできます。

name: Daily Report
on:
  schedule:
    - cron: "0 9 * * *"  # 毎日9:00 UTC
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: "昨日のコミットと未対応Issueの要約レポートを作成してください"
          claude_args: "--model opus"

cron式のタイムゾーンはUTCなので、日本時間で「毎朝9時」に実行したい場合はcron: "0 0 * * *"(UTC 0時=JST 9時)のように調整してください。より高度な定期実行の設計(Slack通知連携、コスト管理、エラーハンドリング)はClaude Codeを定期実行する方法で詳しく扱っています。

コストと安全のコントロール

設定項目目的設定例
--max-turns暴走的な繰り返しを防ぎ、コストの上限を作るトリアージなら5、実装タスクなら15程度
--modelタスクの難易度に応じてモデルを使い分ける単純なラベル付けは安いモデル、実装は高性能モデル
permissions:ジョブごとにGitHub Actionsのトークン権限を最小化トリアージジョブにはcontents: writeを与えない
if:条件起動するIssue/PRを絞り込む特定ラベル・特定ユーザーのコメントのみ対象にする
GitHub Actionsのconcurrency同時実行数を制限し、暴走的な並列実行を防ぐ同一Issue/PRに対する重複起動を防止
✓ CLAUDE.mdを必ず整備する

GitHub Actions経由で動くClaude Codeも、リポジトリルートのCLAUDE.mdのガイドラインに従います。コーディング規約・レビュー基準・「触ってはいけないファイル」などをここに明記しておくと、Issue経由の自動実装でも一貫した品質になります。詳しくはCLAUDE.mdの書き方完全ガイドをご覧ください。

よくある質問

Q. Amazon BedrockやGoogle Cloud経由でも使えますか?

使えます。use_bedrock: "true"use_vertex: "true"を指定し、それぞれのクラウドでOIDC認証・IAMロールを設定する形になります。エンタープライズでデータのリージョン管理が必要な場合はこちらを検討してください。

Q. Claude Codeが作ったコミットでCIが動きません

デフォルトのGitHub Actionsユーザーで作られたコミットは、無限ループ防止のためCIをトリガーしない仕様になっていることがあります。Claude公式のGitHub App、または自前のカスタムGitHub Appを使っていればこの問題は起きません。

Q. 費用はどれくらいかかりますか?

GitHub Actionsの実行時間(分単位の課金)と、Claude APIのトークン消費の両方がかかります。--max-turnsで上限を設定し、GitHub Actionsのconcurrency設定で無駄な並列実行を防ぐことが、コストコントロールの基本です。

Q. 外部コントリビューターのPRでも自動レビューさせて大丈夫ですか?

公式ドキュメントでも「外部コントリビューターのレビュー」は想定ユースケースとして挙げられていますが、悪意あるコードによるプロンプトインジェクションのリスクがゼロではありません。外部PR向けのワークフローでは権限を読み取り専用(レビューコメントの投稿のみ)に絞り、実装権限は与えない設計を推奨します。

まとめ

✓ この記事のポイント
  • 自動化は「トリアージ→ドラフトPR」の順に進める。全自動マージは避ける
  • 公式claude-code-action/install-github-appで導入すれば数分でセットアップできる
  • Issueトリアージはラベル付けのみに役割を絞ると、リスクをほぼゼロにできる
  • 実装タスクは特定ラベル・条件で起動を絞り、必ずドラフトPRとして人間のレビューを挟む
  • --max-turnspermissionsif条件・concurrencyでコストと暴走リスクを制御する

まずはリスクの低いIssueトリアージから試してみてください。ラベル付けが安定して機能するようになったら、限定的な条件でドラフトPR作成に進む——この段階的な進め方が、事故なく自動化を定着させる一番の近道です。

タイトルとURLをコピーしました