📌

Claude MaxでClaude Code Actionsを使ってみた

に公開

Claude CodeのGithub Actionsを利用するためには、公式のリポジトリではClaudeのAPIキーが必要であり、Claude Maxのみを契約している人は別途でClaude Code APIの契約が必要になります。

しかし、Claude MaxのOAuth認証でもClaude Code Actionsを使えるようにフォークされたリポジトリが存在しており、これを使うことでClaude Code APIを契約なしに、Claude Maxの契約のみでClaude Code Actionsを利用することが可能です。

https://grll.bearblog.dev/use-claude-github-actions-with-claude-max/

これを日本語で解説しているブログを見つけたので参考にさせていただきました。
https://note.com/akira_papa_ai/n/n0e158a650c4a

大体上記のページ通りに進めれば設定を終わらせることができましたが、少しだけ注意点があったので書きます。

環境

  • MacOS

リポジトリのフォーク方法

https://github.com/grll/claude-code-base-action を自分のプライベートリポジトリとしてフォークする必要があります。しかし、githubのページ上から普通にフォークすると、パブリックリポジトリになってしまいます。プライベートリポジトリにするにはクローンする際に少し工夫が必要です。
↓を参考に、bareクローンしてmirrorプッシュすることでプライベートリポジトリにできました。
https://qiita.com/koji0705/items/9a11638f9e69362df8a1

OAuthの認証トークンの有効期限がすぐ切れる

OAuthの認証トークンの期限が1日も持たないらしく、頻繁にGithub ActionsのSecretを更新する必要があります。これは面倒なので、Claude Code Actionsを利用するリポジトリにSecretの更新を自動化するスクリプトを用意しました。

set_claude_code_secrets.sh
#!/bin/bash

# 設定
KEYCHAIN_SERVICE="Claude Code-credentials"
KEYCHAIN_ACCOUNT="[KeyChainAccessに表示されている「アカウント」]"
REPO="[github名]/[リポジトリ名]"

# JSONデータを取得
JSON_DATA=$(security find-generic-password -s "$KEYCHAIN_SERVICE" -a "$KEYCHAIN_ACCOUNT" -w)

if [ $? -ne 0 ]; then
    echo "Failed to retrieve data from keychain"
    exit 1
fi

# JSONから各パラメータを抽出
ACCESS_TOKEN=$(echo "$JSON_DATA" | jq -r '.claudeAiOauth.accessToken')
REFRESH_TOKEN=$(echo "$JSON_DATA" | jq -r '.claudeAiOauth.refreshToken')
EXPIRES_AT=$(echo "$JSON_DATA" | jq -r '.claudeAiOauth.expiresAt')

# 各シークレットを更新
if [ "$ACCESS_TOKEN" != "null" ] && [ "$ACCESS_TOKEN" != "" ]; then
    echo "$ACCESS_TOKEN" | gh secret set CLAUDE_ACCESS_TOKEN --repo "$REPO"
    echo "Updated CLAUDE_ACCESS_TOKEN"
fi

if [ "$REFRESH_TOKEN" != "null" ] && [ "$REFRESH_TOKEN" != "" ]; then
    echo "$REFRESH_TOKEN" | gh secret set CLAUDE_REFRESH_TOKEN --repo "$REPO"
    echo "Updated CLAUDE_REFRESH_TOKEN"
fi

if [ "$EXPIRES_AT" != "null" ] && [ "$EXPIRES_AT" != "" ]; then
    echo "$EXPIRES_AT" | gh secret set CLAUDE_EXPIRES_AT --repo "$REPO"
    echo "Updated CLAUDE_EXPIRES_AT"
fi

echo "All secrets updated successfully"

このスクリプトを動かすために以下のインストールが必要です。

brew install jq
brew install gh

実行方法

./set_claude_code_secrets.sh

※注意点
KeyChainに保存されているOAuthのアクセスキーは初回のもののみで、リフレッシュ時に更新されたトークンはclaude(ターミナル)側に保存されているようです。なので、有効期限が切れるたびに
ターミナルのclaudeコマンドで/loginし、KeyChain側のトークンを更新する必要があります。この手間は残ってしまっているので、何か方法がないか調査中です。

まとめ

この方法でClaude Maxの定額契約でもClaude Code Actionsを利用することが可能です。Claude Maxの$100/Monthだけ払えばClaude Code Actionsをジャブジャブ使えるので非常にいい感じです。
リンク元にも記載されていますが、非公式リポジトリを使った方法のため、Claude公式による動作保証はされていません。その点ご注意ください。

Discussion