Claude Media
GitHub Actionsのパラメータとclaude_argsの渡し方 — Claude Code

GitHub Actionsのパラメータとclaude_argsの渡し方 — Claude Code

Claude CodeをGitHub Actionsで動かすclaude-code-actionのwithパラメータと、claude_argsで渡すCLI引数の違い、v0.x旧キーの移行先を表で示します。

Claude CodeをGitHub Actionsで動かすアクションanthropics/claude-code-actionでは、認証やトリガーはwith:直下の専用パラメータで、--modelや--allowedToolsなどのCLI引数はclaude_argsという1つのパラメータで渡します。迷ったら、claudeコマンドのオプションならclaude_args、それ以外なら専用パラメータです。

GitHub Actionsアクションのパラメータ全体像

anthropics/claude-code-actionの設定は、同じwith:ブロックに並んでいても効く層が2つあります。

くらべる

with:ブロックの2つの層

アクションが読む

アクションパラメータ

anthropic_api_key・github_token・prompt・plugins・settingsなど。認証、トリガー、実行前のプラグイン導入といった、Claude Codeを起動するまでの部分を決めます。

claude_argsの1つに詰める

CLI引数

--model・--allowedTools・--mcp-configなど。claudeコマンドのオプションがそのまま通り、起動後のセッションの動作を決めます。

導入自体の手順はClaude CodeをGitHub Actionsに組み込むにあります。ワークフローYAMLのonやjobsをClaude Codeに書かせる手順は別の記事で扱っています。

with:で渡せるパラメータ一覧

公式ページが「よく使う」として挙げるのは12個です。表にはトリガー許可のallowed_non_write_usersとallowed_botsも加えています。

パラメータ説明必須
prompt説明Claudeへの指示。プレーンテキストかスキルの呼び出し。省略時はtrigger_phraseへの応答に切り替わる必須いいえ
claude_args説明Claude Codeに渡すCLI引数必須いいえ
anthropic_api_key説明Claude APIキー。OAuthトークンかworkload identity federationを使うなら不要で、Bedrock・Agent Platform・Foundryでも使わない必須条件付き
claude_code_oauth_token説明Claudeサブスクリプションで認証するOAuthトークン。claude setup-tokenで発行する必須いいえ
github_token説明GitHub操作用トークン。省略時はClaude GitHub Appとして認証する必須いいえ
plugin_marketplaces説明プラグインマーケットプレイスのGit URL(改行区切り)必須いいえ
plugins説明実行前にインストールするプラグイン名(改行区切り)必須いいえ
settings説明Claude Codeの設定。JSON文字列か設定ファイルへのパス必須いいえ
trigger_phrase説明Claudeが反応する語句。既定値は@claude必須いいえ
allowed_non_write_users説明書き込み権限のないユーザーにもトリガーを許可する一覧。自前のgithub_tokenと組み合わせる必須いいえ
allowed_bots説明トリガーを許可するbotの一覧必須いいえ
use_bedrock説明Claude APIの代わりにAmazon Bedrockを使う必須いいえ
use_vertex説明Claude APIの代わりにGoogle CloudのAgent Platformを使う必須いいえ
use_foundry説明Claude APIの代わりにMicrosoft Foundryを使う必須いいえ

この表は一部で、リポジトリの設定リファレンスにはコミット署名やbase_branchなど、さらに多くの入力が載っています。全件はusage.mdが最新です。

use_bedrock・use_vertex・use_foundryは、同時に有効にできるのは1つだけです。複数をtrueにすると、アクションはエラーで止まります。リポジトリのvalidate-env.tsにCannot use multiple providers simultaneouslyのメッセージがあります。

3つのクラウド経路の認証設定はGitHub Actions Bedrock連携に個別にあります。「SDK execution error」で落ちる場合は専用の対処記事を見てください。

claude_argsでCLI引数を渡す書き方

claude_argsは、公式ページの例のように1行の文字列でも、ブロックリテラル(|)による複数行でも書けます。フラグごとに行が分かれる複数行のほうが、差分が追いやすくなります。

- uses: anthropics/claude-code-action@v1
  with:
    claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
    prompt: "このPRの変更をレビューしてください"
    claude_args: |
      --max-turns 5
      --model claude-sonnet-5
      --mcp-config /path/to/config.json

公式ページが共通の引数として挙げるのは次の5つです。

  • --max-turns: 会話ターン数の上限
  • --model: 使うモデル。省略するとClaude Codeの既定モデルが使われる
  • --mcp-config: MCPサーバー設定ファイルへのパス
  • --allowedTools: 許可するツール。--allowed-toolsという別名でも通る
  • --debug: デバッグ出力を有効にする

ローカルの claude --help と見比べる

CLI引数はclaudeコマンドのオプションと同じものなので、手元のclaude --helpで書式を確かめられます。v2.1.287で出力を確認したところ、折り返しを詰めると次のとおりでした。

--allowedTools, --allowed-tools <tools...>
    Comma or space-separated list of tool names to allow (e.g. "Bash(git *) Edit")
--model <model>
    Model for the current session. Provide an alias for the latest model
    (e.g. 'fable', 'opus', or 'sonnet') or a model's full name.
-d, --debug [filter]
    Enable debug mode with optional category filtering (e.g., "api,hooks" or "!1p,!file")

ここから読み取れる点が3つあります。

  • --allowedToolsはカンマ区切りだけでなく空白区切りでも書けます。ツール名にパターンを含めるBash(git *)の形も使えます
  • --modelにはエイリアス(sonnetなど)も完全なモデル名も渡せます。公式ページの例は完全名のclaude-sonnet-5です
  • --debugはapi,hooksのようにカテゴリを絞れ、!1pのように除外の指定もできます

一方、v2.1.287のclaude --helpの出力に--max-turnsは並んでいません。CLIリファレンスの表には「print modeのみ」の引数として載っており、上限に達するとエラーで終了すると書かれています。公式ページが共通引数の筆頭に挙げる--max-turnsでも、手元のヘルプには出ないことがあります。引数の存否を--helpだけで判断せず、リファレンスの表と突き合わせてください。

旧キーはどこへ移ったか

v0.x時代の入力をそのままwith:直下に残すと、v1では非推奨の扱いになります。リポジトリのusage.mdは、主な旧入力の移行先を次のように示しています。

旧入力(v0.x)v1での書き方
direct_promptv1での書き方prompt
max_turnsv1での書き方claude_argsの--max-turns
modelv1での書き方claude_argsの--model
allowed_tools / disallowed_toolsv1での書き方claude_argsの--allowedTools / --disallowedTools
mcp_configv1での書き方claude_argsの--mcp-config
custom_instructionsv1での書き方claude_argsの--append-system-prompt、またはpromptに含める
claude_envv1での書き方settingsのJSONにある環境設定
override_promptv1での書き方promptのテンプレート、または--system-prompt
modev1での書き方削除(実行文脈から自動判定)

--append-system-promptは既定のプロンプトに追記し、--system-promptは丸ごと置き換えます。custom_instructionsは同名のCLI引数を持たないので、--custom-instructionsのようなフラグを探しても見つかりません。移行の全体像はClaude CodeをGitHub Actionsに組み込むのv1移行の節にまとめています。

誰の発言でRunが始まるか

トリガーの条件は、promptの有無で決まるモードと、そのさらに手前の2つのチェックの二段になっています。

くらべる

prompt の有無で変わる動き

prompt を空にする

対話モード

trigger_phraseをissueやPRのコメント、レビュー、新規issueの本文・タイトルで待ち受け、その内容を指示として扱います。進行状況と結果は、トリガーになったissueやPRのコメントに出ます。

prompt を指定する

自動実行モード

メンションを待たずに動きます。結果は既定ではワークフロー実行ログに出ます。コメントに投稿させたいときは、プロンプトでそう指示し、投稿できるツールを持たせます。PRやissueのイベントで動かす場合に進捗コメントが欲しいときは、track_progressを使います。

自動実行モードの注意点が1つあります。プレーンテキストのpromptでは、シェルやGitHub APIを使う権限が最初はありません。必要なツールはclaude_argsの--allowedToolsか、settingsのpermissions.allowで与えます。スキルを呼び出す場合は、スキル側のallowed-toolsが与えるツールを使えます。

trigger_phraseは変更できます。たとえばリポジトリのusage.mdは/claudeを例に挙げています。公式のトラブルシューティングには、コメントに@claudeが単語として完結して含まれることを確かめる項目があり、@claude-botは一致しない例として書かれています。変えた場合はissueテンプレートやREADMEの案内も合わせます。

Claudeが動き出す前の2つのチェックは、どちらのモードでも走ります。

手順

Runが始まるまでの2つの関門

  1. 1

    書き込み権限のチェック

    issueとPRのイベントでは、トリガーしたユーザーにリポジトリへの書き込み権限が要ります。書き込み権限のないユーザーを通すには、allowed_non_write_usersに列挙し、自前のgithub_tokenも渡します。scheduleのようにユーザーが起点にならないイベントは、このチェックを飛ばします。

  2. 2

    人間アクターのチェック

    botは、allowed_botsに列挙しない限りどのイベントでも拒否されます。botどうしがループで呼び合うのを防ぐ仕組みです。schedule実行も対象で、GitHubはcron実行を、通常は「最後にcron設定を変えたユーザー」に帰属させます。そのユーザーがbotならallowed_botsが要ります。

allowed_botsの値はカンマ区切りで、dependabot[bot],renovate[bot]のように書きます。リポジトリのusage.mdには、'*'で全botを許可する書き方も載っています。公開リポジトリで'*'を使うと、外部のAppがアクションを呼べる可能性があるという警告が付いています。allowed_non_write_usersにも同じく'*'の書き方があり、こちらは「RISKY」と明記され、github_tokenを渡した場合にだけ働きます。

github_tokenを自前で渡す場面と、渡してはいけない場面

github_tokenを省略すると、Claude GitHub Appとして認証されます。usage.mdは「自前のGitHub Appをつなぐときだけ指定する」と書いています。通常のワークフローは、省略したままのApp認証で動きます。

自前の指定が要る主な場面は、次のとおりです。

  • allowed_non_write_usersで、書き込み権限のないユーザーにもトリガーを許可するとき
  • 自前のGitHub Appをつなぐとき

逆に、ワークフロー標準のGITHUB_TOKENは渡すと逆効果になる場合があります。GitHubはデフォルトのGITHUB_TOKENで作ったコミットに対してワークフローを起動しません。Claudeがpushしたコミットで別のCIが動かないときは、github_token: ${{ secrets.GITHUB_TOKEN }}を外してApp認証に戻すか、カスタムAppのトークンを渡します。あわせて、CI側のトリガーがClaudeのpushで起きるイベント(pushやpull_request)を含んでいるかも確認してください。

pluginsとplugin_marketplacesで実行前にツールを揃える

plugin_marketplacesにマーケットプレイスのGit URLを、pluginsに入れたいプラグインを、どちらも改行区切りで書くと、Claudeの起動前にインストールされます。公式ページの例はこうです。

plugin_marketplaces: "https://github.com/anthropics/claude-code.git"
plugins: "code-review@claude-code-plugins"
claude_args: '--allowedTools "mcp__github_inline_comment__create_inline_comment"'

pluginsの値はプラグイン名@マーケットプレイス名の形です。@の右は、リポジトリのURLではなく、マーケットプレイス自身のマニフェストに書かれた名前です。URLの末尾を写してyour-org/lint-helperのように書くと、名前が一致しません。

この例のclaude_argsを消してはいけない理由も、公式ページに書かれています。スキル自身のallowed-toolsが同じツールを挙げていても、インラインコメントを投稿するMCPサーバーは、claude_argsの--allowedToolsにそのツールがあるときだけアクションが起動します。

plugin_marketplacesを設定すると、ネイティブインストーラーの警告をclaude-code-actionが見逃し、バイナリ未配置のままマーケットプレイス追加でENOENTになる問題が報告されています。原因と回避策はplugin_marketplacesでバイナリが配置されない原因と対処にあります。

settingsはJSON文字列でもファイルパスでも渡せます。

settings: |
  {
    "permissions": {
      "allow": ["Bash(npm run lint)", "Edit"]
    }
  }

ファイルパスで渡せば、設定の変更がワークフローYAMLではなく通常のファイルの差分に現れます。同じ構成を組織全体のリポジトリへ配る手順はClaude CodeのGitHub Actionsを組織全体に導入する手順にあります。

目的別のパラメータ早見表

やりたいこと設定するパラメータ
Claudeサブスクリプションで認証したい設定するパラメータclaude_code_oauth_token
Bedrock / Agent Platform / Foundry経由で呼び出したい設定するパラメータuse_bedrock / use_vertex / use_foundry
PRコメントに書いた指示をそのまま実行させたい設定するパラメータpromptを空欄、必要ならtrigger_phraseを設定
実行前に社内プラグインを揃えたい設定するパラメータplugin_marketplaces + plugins
ターン数やモデルを調整したい設定するパラメータclaude_args(--max-turns / --model)
書き込み権限のない外部ユーザーにも許可したい設定するパラメータallowed_non_write_users + 自前のgithub_token
cron定期実行をbotアカウント名義で回したい設定するパラメータallowed_bots

資格情報の渡し方

anthropic_api_keyやclaude_code_oauth_tokenは、ワークフローYAMLに直接書かず、GitHub Secretsに登録して${{ secrets.ANTHROPIC_API_KEY }}のような参照式で渡します。YAMLファイルはリポジトリを読める人全員に見えるため、直書きすると、そこに書いた時点で鍵が漏れます。

クラウド経由(use_bedrockなど)に切り替えるときは、anthropic_api_keyが使われないことが公式の表に明記されています。長期のAPIキーを持たない構成にしたい場合は、WIFをGitHub Actionsと連携するのようにOIDCトークン交換へ切り替える方法があります。base_branchに#や()を含むブランチ名を渡すときは、Invalid branch nameエラーの原因と対処法も見ておくと安全です。

まとめ

旧キーがwith:直下に残っているワークフローは、移行表のclaude_args側へ移す箇所から洗い出すと、効いていない設定を見つけやすくなります。

この記事を共有:XはてブLinkedIn