🚀

フォーク不要!既存リポジトリだけでClaude Code ActionをMaxプラン枠内で使う方法

に公開

はじめに

Claude Maxプランに月額100ドル(または200ドル)払っているのに、
GitHub ActionsでClaude Code Actionを使うとさらにAPI料金がかかる。。。
これを何とかしたい。。

そんな想いに、Akira-Papa氏が素晴らしい解決策を公開してくださいました
OAuth認証を使うことで、Claude Maxプランの枠内でClaude Code Actionが使えるようになったのです。本当に革命的な貢献です。

ただ、Akira-Papa氏の方法では、リポジトリをフォークして管理する必要があります。

「新しいリポジトリを作らずに、今あるリポジトリだけで完結させたい」

そこで、Akira-Papa氏の実装をベースに、フォーク不要で使える方法を考えました。Claude Maxプランの費用だけで、追加料金なし、新規リポジトリなしで使える方法です。

従来の方法とその課題

APIキーを使う方法

公式のドキュメントに従うと、こんな感じでAPIキーを設定します。

- uses: anthropics/claude-code-action@v1
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

しかし、これだとClaude Maxプランを契約していても、API使用分の料金が別途発生してしまいます。

OAuth認証を使う方法

Akira-Papa氏の実装により、OAuth認証でMaxプランの枠内で使えるようになりました。この方法の素晴らしい点は、APIキーが不要になることです。

ただし、この方法を使うには:

  • claude-code-actionをフォーク
  • claude-code-base-actionをフォーク
  • 2つのリポジトリを管理

フォークしたリポジトリを別管理するのは、ちょっとだけ面倒ですよね。
私のような管理がずさんな人間だと、脳内のキャパがすこし圧迫されてしまいます。

Git Subtreeを使った新しいアプローチ

そこで考えたのが、Git Subtreeを使ってモノレポ内で管理する方法です。

基本的な考え方はシンプルです。フォークする代わりに、必要なアクションコードを自分のリポジトリ内に取り込んでしまうのです。

your-repository/
├── .github/
│   ├── workflows/
│   │   └── claude.yml
│   └── claude-code-actions/
│       └── actions/
│           ├── claude-code-action/
│           └── claude-code-base-action/
└── src/

実装手順

1. ディレクトリの準備

まず、アクションを配置するディレクトリを作成します。

mkdir -p .github/claude-code-actions/actions

2. Git Subtreeでアクションを取得

OAuth対応のアクションをGit Subtreeとして追加します。

# メインのアクション
git subtree add --prefix=.github/claude-code-actions/actions/claude-code-action \
    https://github.com/Akira-Papa/claude-code-action.git main --squash

# ベースアクション
git subtree add --prefix=.github/claude-code-actions/actions/claude-code-base-action \
    https://github.com/Akira-Papa/claude-code-base-action.git main --squash

--squashオプションを使うことで、取り込む際のコミット履歴を1つにまとめています。

3. 相対パスへの修正

取り込んだアクション内で、外部参照している箇所を相対パスに修正します。

.github/claude-code-actions/actions/claude-code-action/action.ymlを開いて:

# 変更前
uses: Akira-Papa/claude-code-base-action@main

# 変更後
uses: ./.github/claude-code-actions/actions/claude-code-base-action

4. GitHub Appのインストール

Claude GitHub Appをインストールします。

# Claude Code内で実行
/install-github-app

ブラウザが開いたら:

  1. 対象リポジトリを選択
  2. APIキーの入力を求められたら、一時的に適当な値(例:dummy-key)を入力
  3. インストールを完了

インストール後、すぐにGitHubのSettings → Secrets → ANTHROPIC_API_KEYを削除してください。OAuth認証では不要です。

5. 認証情報の設定

Claude Codeで認証情報を取得します。

claude
/status
cat ~/.claude/.credentials.json

取得したaccess_tokenrefresh_tokenexpires_atをGitHub Secretsに設定します。


こんなかんじ。

6. ワークフローの作成

.github/workflows/claude.ymlを作成します。

name: Claude Assistant

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

permissions:
  contents: write
  issues: write
  pull-requests: write

jobs:
  claude-response:
    runs-on: ubuntu-latest
    if: contains(github.event.comment.body, '@claude') || contains(github.event.issue.body, '@claude')

    steps:
      - uses: actions/checkout@v4

      - name: Claude Code Action (OAuth)
        uses: ./.github/claude-code-actions/actions/claude-code-action
        with:
          use_oauth: 'true'
          claude_access_token: ${{ secrets.CLAUDE_ACCESS_TOKEN }}
          claude_refresh_token: ${{ secrets.CLAUDE_REFRESH_TOKEN }}
          claude_expires_at: ${{ secrets.CLAUDE_EXPIRES_AT }}
          github_token: ${{ secrets.GITHUB_TOKEN }}

ポイントはuses: ./.github/...で相対パスを使っているところです。これでリポジトリ内のアクションを参照できます。

この方法のメリット

1. 管理が楽

フォークリポジトリを別管理する必要がなく、すべてが1つのリポジトリで完結します。チーム開発でも、クローンするだけですぐに使えます。

2. カスタマイズが簡単

アクションのコードが手元にあるので、必要に応じて修正できます。例えば、特定のツールを無効化したり、カスタムの処理を追加したりできます。

3. 更新も簡単

最新版を取り込みたいときは:

git subtree pull --prefix=.github/claude-code-actions/actions/claude-code-action \
    https://github.com/Akira-Papa/claude-code-action.git main --squash

4. APIキー不要

OAuth認証を使うので、Claude Maxプランの枠内で利用でき、追加料金が発生しません。

注意点

トークンの有効期限

OAuthトークンには有効期限があるので、定期的に更新が必要です。期限が切れたら、再度Claude Codeにログインして新しいトークンを取得してください。

プライベートリポジトリ推奨

誰でも@claudeでメンションできてしまうので、プライベートリポジトリでの利用をおすすめします。

まとめ

Git Subtreeを使うことで、フォーク不要でOAuth認証のClaude Code Actionを実現できました。

この方法なら:

  • リポジトリ管理がシンプルになる
  • APIキーが不要で追加料金なし
  • カスタマイズや更新も簡単

モノレポ派の方には特におすすめの方法です。ぜひ試してみてください。

書いてて気づいたけど...

記事を書き終えて冷静に考えてみると、実はフォークを作って複数のリポジトリから参照する方が便利なケースも多いですね。

この方法(Git Subtree)のメリット

  • カスタマイズの自由度: プロジェクト固有の修正を気軽に加えられる
  • 外部依存なし: フォークリポジトリが削除されても影響を受けない
  • 権限管理がシンプル: チームメンバーに追加のリポジトリアクセス権限を付与する必要がない
  • 完全なオフライン開発: すべてのコードが手元にある

デメリット

  • 複数プロジェクトで使う場合は非効率: 各リポジトリで同じセットアップが必要
  • 更新の手間: アップストリームの更新を各リポジトリで個別に取り込む必要がある
  • リポジトリサイズの増加: アクションのコードが含まれる分、リポジトリが大きくなる

結論

  • 汎用的に使うなら: Akira-Papa氏の方法でフォークを作る
  • 特定プロジェクト専用なら: この記事のGit Subtree方式

という使い分けが良さそうです。私の場合は、このプロジェクト専用にカスタマイズを加えたかったので、Git Subtree方式を選びました。

皆さんの用途に合わせて選んでください!

謝辞

OAuth認証版のアクションを作成されたAkira-Papa氏に感謝します。素晴らしい実装のおかげで、このような活用方法を見つけることができました。


参考になったらLGTMお願いします。質問や改善提案はコメント欄でお待ちしています。

Discussion