🌳

Claude Code Actionsの派生元ブランチ問題

に公開

はじめに

Anthropicの Claude Code Actions を GitHub Actions で導入する際、多くの開発チームが直面するであろう課題があります。それは、Claude Code によって新しく作成されるブランチの派生元を適切に指定できないという問題です。

多くのプロジェクトでは、mainブランチではなくdevelopブランチを開発の中心として使用しています。Claude Code Actions で自動生成されるブランチも、当然developから派生させたいところです。

公式の README によると、base_branchパラメータを設定することで派生元を指定できるとされています。しかし実際にbase_branch: "develop"と設定しても、新しいブランチがmainから作成されてしまうという現象が発生します。

本記事では、この問題の根本原因を実装レベルで調査し、現時点で有効な回避策を提示します。

Claude Code Actionsとは

Claude Code Actions は Anthropic が提供する GitHub Actions 用のツールです。Issue や Pull Request のコメントで@claudeとメンションすることで、AIが自動的にコード変更やレビューを実行する機能を提供します。

基本的な設定例.github/workflows/claude.yaml

name: Claude Assistant

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

jobs:
  claude-response:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      issues: write
      pull-requests: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Run Claude Code Action
        uses: anthropics/claude-code-action@beta
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          trigger_phrase: "@claude"
          base_branch: "develop"  # ← これが効かない!

問題の発見

上記の設定で実際に Claude Code Actions を実行した後、ブランチの履歴を確認してみると問題が明らかになります。

新しく作成された Claude のブランチがmainブランチから分岐していることが分かります。

実装を調べてみた

https://github.com/anthropics/claude-code-action

Claude Code Action のソースコードを調査したところ、この問題の根本原因が判明しました。

src/github/operations/branch.tsの該当部分:

// base_branchの処理
if (baseBranch) {
  sourceBranch = baseBranch;  // ← 変数に設定するだけ
} else {
  sourceBranch = repoResponse.data.default_branch;
}

// 実際のブランチ作成
console.log(`Creating branch from source: ${sourceBranch}`);  // ← ログ出力のみ
await $`git checkout -b ${newBranch}`;  // ← 現在のブランチから分岐!

問題点

  • sourceBranch変数には正しくdevelopが設定される
  • しかし、実際にはそのブランチにチェックアウトしていない
  • git checkout -bは現在のブランチ(通常はmain)から新しいブランチを作成

つまり、base_branchパラメータはログ出力にしか使われていないのが現状です。

解決策:ワークフローでの事前チェックアウト

この問題を回避するには、Claude Code Action が実行される前に、意図したベースブランチに事前にチェックアウトしておく方法が有効です。

修正版ワークフロー

name: Claude Assistant

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

jobs:
  claude-response:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      issues: write
      pull-requests: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          ref: develop        # developブランチを明示的にチェックアウト

      - name: Run Claude Code Action
        uses: anthropics/claude-code-action@beta
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          trigger_phrase: "@claude"
          base_branch: "develop"

重要なポイント

ref: develop: トリガーイベントに関係なく、常にdevelopブランチからスタート

この設定により、Claude Code Action が実行される時点で既にdevelopブランチにいるため、新しいブランチが正しくdevelopから作成されます。

動作確認

修正後、実際に@claudeで Issue にコメントしてみると:

新しいブランチが正しくdevelopから分岐していることが確認できます。

まとめ

Claude Code Actions は非常に強力なツールですが、現在の実装ではbase_branchパラメータが期待通りに動作しない問題があります。

この問題は、ワークフローで事前に正しいブランチにチェックアウトすることで回避できます。

今後のアップデートでこの問題が修正されることを期待しますが、現時点ではこの回避策を使用することで適切なブランチ管理が可能になります。

追記(2025/07/23)

https://github.com/anthropics/claude-code-action/pull/311

Issueを投げ、修正していただきました。

参考情報


この記事が同じ問題で困っている開発者の方々の参考になれば幸いです。他により良い解決策をご存知の場合は、ぜひ情報をお寄せください。

Sparkle AIブログ

Discussion