@claudeと書くだけで、Claudeが動き出す
あるチームのことです。GitHubでPull RequestとIssueは毎日使っている。レビューのコメントも、Issueへのラベル付けも人の手でやってきた。GitHub Actionsという言葉は聞いたことがあるけれど、設定したことは一度もない。
こういうチームがまず試すことになるのが、claude-code-actionです。Claude Codeの公式のGitHub Actionで、ワークフローファイルを1つ置くだけで、リポジトリの中にClaudeを常駐させられます。
動き方は2つあります。
ワークフローにpromptを指定しない設定。コメントに既定のトリガーフレーズ「@claude」を書き込むと、それに応答して動く
ワークフローにpromptを指定した設定。メンションを待たず、PRやIssueのイベントをきっかけに自動で動く
前者はPRのコメント欄に「@claude ここのテストが落ちてる理由を調べて」のように書きかけて使う形、後者は「PRが開かれたら自動でレビューする」のように仕込んでおく形です。個々の使い道は次のレッスンで扱うので、ここでは導入までを一通り済ませます。
導入は2通りある
窓口は2つあります。GitHub CLIが使えるならクイックセットアップの方が早く、そうでなくても手動で3ステップで終わります。どちらの窓口も、対象リポジトリに対して管理者権限を持つ人が行う前提です。GitHub Appのインストールやsecretsの登録は、リポジトリの設定そのものを変える操作なので、閲覧権限だけのメンバーでは進められません。
クイックセットアップ
クイックセットアップ
GitHub CLIで認証
ghをインストールし gh auth login。リポジトリの管理者権限が必要
/install-github-app を実行
対象リポジトリで claude を開いて実行し、案内に従う
Appとsecretsが自動設定される
Claude GitHub Appが入り、ANTHROPIC_API_KEY か CLAUDE_CODE_OAUTH_TOKEN がリポジトリのsecretとして保存される
PRを作成してマージする
Claude Codeがワークフローのブランチをpushしpull requestを用意する。作成してマージすると @claude が使えるようになる
/install-github-app が使えるのはgithub.comのリポジトリだけです。GitLabやBitbucketで管理しているなら、次の手動セットアップになります。
手動セットアップ
手動セットアップ
Claude GitHub Appをインストール
github.com/apps/claude。Contents・Issues・Pull requestsの読み書き権限を使う
secretsを登録
ANTHROPIC_API_KEY か CLAUDE_CODE_OAUTH_TOKEN をリポジトリのSecretsに追加
ワークフローファイルを配置
公式リポジトリのexamples/claude.ymlを.github/workflows/にコピー
どちらの窓口を通っても、最終的にリポジトリの中身は同じです。ワークフローファイルとsecretsが揃えば準備完了です。
動作を確かめたいときは、実際にPRかIssueのコメント欄で「@claude」と書き込んでみるのがいちばん早い方法です。しばらくしてClaudeからの返信やコミットが付けば、ここまでの設定は正しく効いています。
secretsに何を入れるか
認証に使えるsecretsは2種類あります。値そのものは、対象リポジトリのGitHub画面にあるSettingsタブの中のSecrets and variables(Actions)から登録します。登録する名前は、ワークフローファイルが参照する名前(ANTHROPIC_API_KEYまたはCLAUDE_CODE_OAUTH_TOKEN)と一字一句そろえてください。名前がずれていると、ワークフロー自体は動いても認証だけ失敗します。
secretsの選び方
どちらを選んでも、値そのものはリポジトリのSecretsに保存し、ワークフローからは${{ secrets.ANTHROPIC_API_KEY }}のように参照します。コードやCLAUDE.mdにキーの値をそのまま書き込まない理由は、APIキー、Claudeに渡してませんか?で扱った通りです。会話にキーを貼らないのと同じ理由で、リポジトリにも直接書きません。
最小のworkflow構成
公式ドキュメントに載っている構成要素を組み合わせると、@claudeのメンションに応答する最小のworkflowはこうなります。permissionsのブロックと、アクションの呼び出し方は公式ドキュメントの記載をそのまま使っています。
name: Claude Code
on:
issue_comment:
types: [created]
jobs:
claude:
if: contains(github.event.comment.body, '@claude')
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
id-token: write
actions: read
steps:
- uses: actions/checkout@v6
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
anthropics/claude-code-action@v1のように、バージョンを固定して参照します。ワークフローファイルはコードと同じ扱いです。git管理下に置き、変更はレビューを経てからマージします。
onに指定したissue_commentは、Issueのコメントだけでなく、Pull Requestのコメントにも反応します。GitHubの仕様上、PRのコメントもissue_commentイベントとして扱われるためです。ifの行で本文に「@claude」が含まれるかを確認しているので、それ以外のコメントではジョブ自体は起動しても、Claudeは何もしません。
権限は必要な分だけ
“Grant the workflow only the permissions it needs, and review Claude's changes before merging.”
筆者訳ワークフローには必要な権限だけを与え、Claudeの変更はマージする前にレビューすること。
id-token: writeは、既定のGitHub App認証に必要な権限で、APIキーそのものを扱っているわけではありません。actions: readは、PRのCI結果をClaudeに読ませるための権限です。使わない権限までは足さないのが基本です。
呼び出す側にも既定の歯止めがあります。IssueやPRのコメントでは、リポジトリへの書き込み権限を持つ人のコメントだけが起動条件になり、ボットのコメントは既定で拒否されます。
補足
動かないときに、まず確認する3点
コメントを書いても反応がないときは、次を順に確認してください。
- コメント本文に既定のトリガーフレーズ「@claude」が入っているか
- 書き込み権限を持つ人のコメントか(閲覧権限だけのメンバーやボットのコメントは、上で触れた通り既定で除外されます)
- secretsの名前と、ワークフローファイルが参照している名前が一致しているか
ここまで確認しても直らないときは、GitHubのActionsタブで該当のワークフロー実行がそもそも始まっているかを見ると、どこで止まっているかの手がかりになります。
かかる費用は2種類
GitHub Actionsでの実行には、2種類の費用が同時にかかります。
GitHub-hostedランナーが動く分の、GitHub Actionsの実行時間(分)
プロンプトの長さやタスクの複雑さに応じたトークン利用料。CLAUDE_CODE_OAUTH_TOKENで認証している場合はAPI課金でなく、サブスクリプションの利用枠を消費する
具体的な金額の目安や、モデル・effortの既定をチームでどう決めるかは、次のレッスンで扱います。
今日のまとめ
3行で振り返ります。
- claude-code-actionは、
@claudeのメンションに応答するInteractiveと、prompt指定で自動実行するAutomationの2通りで動く - 導入は
/install-github-appのクイックセットアップか、App+secrets+ワークフロー配置の手動セットアップ - キーは会話やコードに直接書かず、secretsに置いて権限も必要最小限に絞る
次のレッスンでは、このworkflowを土台に、PRレビューとIssue整理を自動化していきます。PRレビューとIssue整理を任せるを見ていきましょう。
セルフチェック
1. claude-code-actionのワークフローにpromptを指定しない場合、どう動きますか。
2. 複数のリポジトリで同じsecretを共有したい場合、どちらのシークレットが向いていますか。
3. workflowの権限(permissions)の考え方として、公式ドキュメントが勧めているのはどれですか。