フォーク不要!既存リポジトリだけで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
ブラウザが開いたら:
- 対象リポジトリを選択
- APIキーの入力を求められたら、一時的に適当な値(例:
dummy-key
)を入力 - インストールを完了
インストール後、すぐにGitHubのSettings → Secrets → ANTHROPIC_API_KEY
を削除してください。OAuth認証では不要です。
5. 認証情報の設定
Claude Codeで認証情報を取得します。
claude
/status
cat ~/.claude/.credentials.json
取得したaccess_token
、refresh_token
、expires_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