9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

infographic_pattern1.png

はじめに

こんにちは、インティメート・マージャーの直人です。

2025年の8月末頃に、Claude Code GitHub Actions(Claude Code Action) が v1 として正式リリースされました。
β版の頃と比べて Actions の書き方が大きく変わっており、実装に当たってつまずいた点も多かったので記事としてまとめます。

この記事では、

  • Claude Code GitHub Actions がどんなものかを紹介
  • 導入方法を解説
  • Issue から自動で PR を作ってもらうサンプルワークフロー
  • 実際に使ってみて感じたメリット・注意点

といった流れで解説していきます。

Claude Code GitHub Actions とは

Claude の CLI ツールである Claude Code を、GitHub Actions 上で動かすためのアクション です。

  • GitHub 上で指示してコード修正
  • Issue 作成時に自動で分類・ラベル付け
  • プルリクエスト作成時に自動でレビューや、変更内容を解析させて見やすくまとめてもらう

など、様々な用途で利用できます。

詳しく知りたい方は、以下の公式ドキュメントやGitHubリポジトリをご確認ください。

セットアップ手順

Claude GitHub App をインストール

以下のリンクから Configure をクリックし、Claude Code GitHub Actions を利用したいリポジトリにインストールしてください。

認証情報の設定

以下の3パターンのいずれかから利用できます。

1. Claude の APIキーを発行して従量課金で使う

  • リポジトリの Secrets に ANTHROPIC_API_KEY として登録してください

2. Claude の Pro / Max プランに加入して使う

  • ローカルで Claude Code のセットアップが完了している状態で claude setup-token を実行
  • 表示されたトークンをリポジトリの Secrets に CLAUDE_CODE_OAUTH_TOKEN として登録してください

3. AWS Bedrock / Google Vertex AI / Foundry 経由で使う

  • こちらのやり方については今回は省略します

Issue からプルリクエストを作成する

サンプルワークフロー(Issue → PR)

name: Issue to PR

on:
  issues:
    types: [opened]
  issue_comment:
    types: [created]

env:
  DEFAULT_CLAUDE_MODEL: claude-haiku-4-5-20251001

jobs:
  claude:
    if: |
      (github.event_name == 'issues' && contains(github.event.issue.body, '@claude')) ||
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude'))
    runs-on: ubuntu-latest
    timeout-minutes: 10
    permissions:
      contents: write
      id-token: write
      issues: write
      pull-requests: write

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v6

      - name: Set Claude Model
        env:
          ISSUE_BODY: ${{ github.event.issue.body }}
          COMMENT_BODY: ${{ github.event.comment.body }}
        run: |
          if [ "${{ github.event_name }}" = "issues" ]; then
            BODY="$ISSUE_BODY"
          else
            BODY="$COMMENT_BODY"
          fi

          MODEL_NAME=$(echo "$BODY" | grep -oE 'model=[A-Za-z0-9._:-]+' | head -n 1 | cut -d= -f2 | tr -d '\r\n')

          case "$MODEL_NAME" in
            sonnet) CLAUDE_MODEL="claude-sonnet-4-5-20250929" ;;
            opus)   CLAUDE_MODEL="claude-opus-4-5-20251101" ;;
            haiku)  CLAUDE_MODEL="${{ env.DEFAULT_CLAUDE_MODEL }}" ;;
            *)      CLAUDE_MODEL="${{ env.DEFAULT_CLAUDE_MODEL }}" ;;
          esac

          echo "使用されるモデル: $CLAUDE_MODEL"
          echo "CLAUDE_MODEL=$CLAUDE_MODEL" >> $GITHUB_ENV

      - name: Run Issue to PR
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          # claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
          prompt: |
            REPO: ${{ github.repository }}
            ISSUE NUMBER: ${{ github.event.issue.number }}

            issueの内容を確認し、必要な修正を行い、プルリクエストを作成してください。
            issueの取得、ブランチの作成、プルリクエストの作成などのGitHubの操作は、MCPツールを使用してください。
            プルリクエストのタイトルや説明は日本語で記述してください。

          claude_args: |
            --model ${{ env.CLAUDE_MODEL }}
            --allowedTools "Read,Write,Edit,WebSearch,WebFetch,Bash(npm view:*),mcp__github__get_issue,mcp__github__add_issue_comment,mcp__github__push_files,mcp__github__create_branch,mcp__github__create_pull_request,mcp__github__update_pull_request"

ワークフローの解説

起動トリガーの設定

on:
  issues:
    types: [opened]
  issue_comment:
    types: [created]
jobs:
  claude:
    if: |
      (github.event_name == 'issues' && contains(github.event.issue.body, '@claude')) ||
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude'))

今回は、Issueの作成時と、Issueにコメントしたときに動くようにしています。
また、@claude というワードがない場合は動かないようにしています。

コメントで Claude モデルを切り替える

      - name: Set Claude Model
        env:
          ISSUE_BODY: ${{ github.event.issue.body }}
          COMMENT_BODY: ${{ github.event.comment.body }}
        run: |
          if [ "${{ github.event_name }}" = "issues" ]; then
            BODY="$ISSUE_BODY"
          else
            BODY="$COMMENT_BODY"
          fi

          MODEL_NAME=$(echo "$BODY" | grep -oE 'model=[A-Za-z0-9._:-]+' | head -n 1 | cut -d= -f2 | tr -d '\r\n')

          case "$MODEL_NAME" in
            sonnet) CLAUDE_MODEL="claude-sonnet-4-5-20250929" ;;
            opus)   CLAUDE_MODEL="claude-opus-4-5-20251101" ;;
            haiku)  CLAUDE_MODEL="${{ env.DEFAULT_CLAUDE_MODEL }}" ;;
            *)      CLAUDE_MODEL="${{ env.DEFAULT_CLAUDE_MODEL }}" ;;
          esac

          echo "使用されるモデル: $CLAUDE_MODEL"
          echo "CLAUDE_MODEL=$CLAUDE_MODEL" >> $GITHUB_ENV

コメントで、model=sonnet のように書くとモデルを選べるようにしてみました。
sonnet opus haiku の3つから選べるようにしてあります。

コストの安い Haiku 4.5 を普段使いし、複雑なタスクを任せるときは Opus 4.5 を使うと良さそうです。

Claude Code 実行ステップ

      - name: Run Issue to PR
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          # claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
          prompt: |
            REPO: ${{ github.repository }}
            ISSUE NUMBER: ${{ github.event.issue.number }}

            issueの内容を確認し、必要な修正を行い、プルリクエストを作成してください。
            issueの取得、ブランチの作成、プルリクエストの作成などのGitHubの操作は、MCPツールを使用してください。
            プルリクエストのタイトルや説明は日本語で記述してください。

          claude_args: |
            --model ${{ env.CLAUDE_MODEL }}
            --allowedTools "Read,Write,Edit,WebSearch,WebFetch,Bash(npm view:*),mcp__github__get_issue,mcp__github__add_issue_comment,mcp__github__push_files,mcp__github__create_branch,mcp__github__create_pull_request,mcp__github__update_pull_request"

anthropic_api_key を使うか claude_code_oauth_token を使うかは、自身の環境に合わせて設定してください。

プロンプトの最初の部分は、公式リポジトリのTipsを参考にして、リポジトリと該当Issueをプロンプトで明示しています。
CLAUDE.md も読んでくれるため、ローカルで Claude Code を使っていたり、複数のClaude Code Actionsを定義する場合は、共通で使用したいルールをそちらに書くとよさそうです。

claude_args でいろいろと設定できるのですが、今回は modelallowedTools のみ設定しています。

実行結果の例

1. Issue 作成

今回は package.json のライブラリアップデートを依頼します。
Issue のコメント内でモデルを切り替えられるようにしているので、今回は model=sonnet を指定し、claude-sonnet-4-5-20250929 に実装してもらいます。

image.png

2. GitHub Actions の実行ログを確認

少し待つと、GitHub Actions 上で Claude Code が動き出します。
GitHub Actions の Summary を確認するとどのように動いたかの過程を確認することができます。
権限不足により失敗した操作も確認できるので、適宜必要な権限を追加しましょう。
実行コストも Summary の末尾に表示されます。

image.png

image.png

image.png

3. 作成されたプルリクエストを確認

Issueを作成してからしばらく待つと、プルリクエストが作成されます。
プロンプトでレビュワーを指定すればレビュワーの設定もしてくれます。

image.png

使ってみた感想

以下のような、「やりたいことが明確な細かいタスク」 に相性がいいと感じました。

  • typo 修正や小さめの UI 修正
  • 型の整理やコメント付与
  • 既存ロジックの軽めのリファクタリング

また、今回は GitHub の操作を GitHub MCP を使って操作させるようにしました。
MCPを使わせるようにした理由は、操作可能な範囲を明確に設定しやすいと思ったからです。
GitHub MCP のドキュメント を確認しながら、Issue to PR に必要なツールのみ許可しました。

ただし、MCPはやはりトークンの使用量がかなり増えてしまうという欠点があると思います。
MCP のメリットは、AI に未知のツールの使い方を教える必要がなくなる点にあるため、十分に使い方が学習されているであろう gh コマンドの場合は直接使ったほうがトークンを節約できて良いかも知れません。

MCPを使うか gh コマンドを使うかは、今後も試しながら考えていこうと思います。

Claude Code GitHub Actions のメリット

実際に使ってみて感じたメリットを、いくつか挙げてみます。

1. プロンプトや作業履歴が残る

指示に使ったプロンプトが GitHub 上に残るため、後から見返したくなったときに便利です。
Claude がどんなツールを呼び出して何をしたか、どのくらいトークンを使っていくらかかったか、なども GitHub Actions の Summary から後から確認できます。(Summary はしばらくすると消えてしまいますが)

2. スマホからでも開発ができる

今回のように Issue をもとに動くように設定することで、GitHub のモバイルアプリからでも Issue を作成して動かすことができます。
通勤中や外出中にアイデアが思いついたときにすぐ形にすることもできそうですね。

3. Bedrock / Vertex AI 経由の利用に対応

Claude Code GitHub Actions の類似ツールである Codex GitHub Actionrun-gemini-cli では、AWS Bedrock 経由では利用できないようです。
ただし、run-gemini-cli は Google Vertex AI 経由での実行に対応しています。

会社やチームで AI を利用する場合は、API キーよりもこれらのクラウド環境を経由するケースが多いため、Claude Code GitHub Actions が Bedrock と Vertex AI の両方に対応している点は大きなメリットと言えます。

注意点・課題

1. GitHub Actions 自体のコストもかかる

Claude の利用料金だけでなく、GitHub Actions 自体の実行時間にもコストがかかります。
無料枠が比較的大きいため個人開発ではあまり気にならないかもしれませんが、チーム開発や長時間のワークフローを多用する場合は注意が必要です。

2. 試行錯誤がしづらい

GitHub Actions 上で実行されるため、毎回 Claude Code のセットアップ処理が入ります。
その分、応答まで少し待たされます。
対話を重ねながら進めるような複雑なタスクには、不向きかもしれません。

また、ローカルの Claude Code なら「ちょっとプロンプトを直して再実行」が簡単にできますが、Actions 経由だと

  • ワークフロー定義を変更
  • リモートに Push
  • Actions 画面で動作を確認

という手順が必要になります。

そのため、試行錯誤のスピードはローカル実行よりも落ちてしまいます。

おわりに

今回は、Issueからプルリクエストを自動作成するGitHub Actionsの例を紹介しましたが、汎用性が高いツールなのでぜひいろいろ試していただきたいです。
また、GitHub API や Zapier などのワークフローツールを使って外部と連携させることで、Issueの作成すらも自動化してプルリクエスト作成まで一貫して行うこともできそうですね。

ここまで読んでいただき、ありがとうございました!
他のインティメート・マージャーの記事もぜひどうぞ!

また、インティメート・マージャーでは新卒から中途まで、幅広く採用を行っています!
少しでもご興味を持っていただけた方は、ぜひ採用ページもご覧ください!

9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?