claude setup-tokenの使い方|Claude Codeをcron・CIでログインなしに動かす1年トークンの作り方

大きな鍵と、ターミナルの画面を描いたイラスト
設定ガイド

claude setup-tokenの使い方|Claude Codeをcron・CIでログインなしに動かす1年トークンの作り方

cronやCIでClaude Codeを動かすとき、ブラウザでのログインができず止まることがあります。claude setup-tokenは、そうした環境向けに1年間使える認証トークンを発行するコマンドです。この記事では、発行から環境変数への設定、使えないこと、–bareとの相性までを、公式ドキュメントに沿って整理します。

claude setup-tokenとは:スクリプト用の長期トークンを作るコマンド

公式のCLIリファレンスでは、claude setup-tokenを「CIとスクリプト向けに、長期のOAuthトークンを発行するコマンド」と説明しています。トークンは画面に表示されるだけで、どこにも保存されません。Claudeのサブスクリプションが必要です。

項目公式ドキュメントの内容
使う場面CIパイプラインやスクリプトなど、ブラウザでのログインができない環境
有効期間1年間
必要なプランPro、Max、Ultra、Team、Enterprise
保存されない(表示されたものを自分でコピーする)
使い方環境変数CLAUDE_CODE_OAUTH_TOKENに入れる

普段のPCでは/loginで足ります。トークンが要るのは、サーバーのcron、GitHub Actionsのような自動実行、ブラウザのないコンテナなどです。関連する手順はheadlessモード×cronのガイドにもあります。

トークンの発行と設定の手順

  1. ブラウザが使える自分のPCで発行する:次のコマンドを実行します。/loginと同じブラウザでの認可画面が開きます。
claude setup-token
  1. ブラウザで承認する:承認すると、ターミナルにトークンが表示されます。保存はされないので、この場でコピーします。
  2. 環境変数に設定する:スクリプトを動かす場所で、CLAUDE_CODE_OAUTH_TOKENにトークンを入れます。

公式ドキュメントのmacOS・Linux・WSLの書き方は次のとおりです(your-tokenの部分に、発行されたトークンを入れます)。

export CLAUDE_CODE_OAUTH_TOKEN=your-token

Windows PowerShellなら$env:CLAUDE_CODE_OAUTH_TOKEN = "your-token"、コマンドプロンプトならset CLAUDE_CODE_OAUTH_TOKEN=your-tokenと書きます。

トークンの扱いに注意

トークンは、あなたのClaudeサブスクリプションで使える鍵です。記事やGitのリポジトリ、チャットには貼らないでください。CIならシークレットの機能に登録し、サーバーなら自分だけが読めるファイルに置くのが基本です。

cronやスクリプトで使うときの書き方と、確認方法

環境変数を設定したら、あとは通常どおりclaude -pで動かせます。cronは普段のシェルの設定を読まないのが一般的なので、cronの行かスクリプトの先頭で、変数を渡すようにしてください。たとえば、スクリプトの冒頭に環境変数を読み込む処理を置く形です。

#!/bin/bash
# トークンを書いたファイル(自分だけ読める権限にしておく)を読み込む
source "$HOME/.claude-token.env"
claude -p "昨日のコミットを要約して" --allowedTools "Read"

認証が通っているかは、claude auth statusで確認できます。公式のCLIリファレンスでは、認証の状態をJSONで表示し、ログインしていれば終了コード0、していなければ1を返すと説明されています。JSONのauthMethodという項目は、none、claude.ai、oauth_token、api_key、api_key_helper、third_partyのどれかです。トークンで認証されていれば、oauth_tokenが出る想定です。実際の出力は、この記事では確認していません。

人が読みやすい形にしたいときは、claude auth status --textを使います。

このトークンでできないこと・使えない場面

公式ドキュメントには、次の制限が書かれています。

  • モデルへのリクエストだけできる。Remote Controlのセッションは作れず、claude.aiのコネクタも取得できない
  • 自分でローカルに設定したMCPサーバーは、そのまま使える
  • –bareを付けると、このトークンは読まれない。bareモードでは、OAuthの認証情報やキーチェーンを読まないため

つまり、Googleカレンダーのようなclaude.aiのコネクタをスクリプトから使いたい場合は、このトークンでは動きません。ローカルのMCPサーバーを設定して使う形になります。

–bareを付けたいとき

公式のheadlessのページでは、CIやスクリプトでは--bareの使用が勧められています(今後-pの既定になる予定とも書かれています)。ただしbareモードはサブスクリプションのログインを使わないため、ANTHROPIC_API_KEYか、apiKeyHelperで認証する必要があります。

やりたいこと認証の方法
サブスクリプションで、–bareなしで動かすCLAUDE_CODE_OAUTH_TOKEN
–bareで、毎回同じ状態で動かすANTHROPIC_API_KEY(Claude Consoleで作成)かapiKeyHelper

–bareなしの-pは、作業フォルダの設定やMCPサーバー、フックを読み込みます。自分のPCやサーバーで、自分のリポジトリだけを動かす用途なら、これで十分です。

うまくいかないときの確認点

  • Not logged inで止まる:環境変数がそのシェルやcronに渡っているかを確認する。claude auth statusを、同じ環境で実行してみる
  • /loginを実行したら状態が変わった:公式ドキュメントによると、変数が設定されたまま/loginを実行すると、現在のセッションは新しいログインに切り替わる。以降のセッションでもそのログインを使いたいときは、シェルのプロファイルや設定ファイルから変数を消す
  • –bareで認証できない:上の表のとおり、bareではトークンは読まれない。APIキーを使う
  • 組織の制限がある:公式ドキュメントによると、setup-tokenはforceLoginMethodだけを強制し、forceLoginOrgUUIDは確認しない。組織の管理者が設定している場合は、管理者に確認する

ログインの期限について(変更履歴にある内容)

Claude CodeのCHANGELOGのv2.1.318には、保存されたclaude.aiのログインが切れる日付が、claude auth statusのJSON(loginExpiresAt)とclaude -pのJSON結果に追加された、とあります。claude -pの通常のテキスト出力では、ログインが切れる10日前から、標準エラーに1行の警告が出るとも書かれています。ただし、この内容は公式ドキュメントのページでは確認できませんでした。また、これは/loginで保存されたログインの話で、setup-tokenで作った1年のトークンにも同じ表示が出るのかは、確認できていません。

よくある質問(FAQ)

Q. APIキーとの違いは何ですか?

setup-tokenのトークンは、Claudeのサブスクリプションの枠で動きます。APIキーはClaude Consoleで作り、API利用の課金になります。–bareを使うなら、APIキーが必要です。

Q. トークンは何度でも発行できますか?

公式ドキュメントに、回数の上限は書かれていませんでした。失効や取り消しの方法も、今回確認したページには見つかりませんでした。漏らしてしまった場合は、Claudeのアカウント側の設定を確認してください。

Q. 1年たつと、どうなりますか?

1年のトークンなので、期限が切れたら再発行が必要になります。発行した日をメモしておくと安心です。

Q. 無料プランでも使えますか?

公式ドキュメントでは、Pro、Max、Ultra、Team、Enterpriseのプランが必要とされています。

まとめ

  • claude setup-tokenは、ブラウザのない環境用に、1年間使えるトークンを発行する
  • 発行されたトークンは保存されない。コピーしてCLAUDE_CODE_OAUTH_TOKENに設定する
  • モデルへのリクエストだけに使える。Remote Controlやclaude.aiのコネクタは使えない
  • --bareではトークンが読まれない。bareにするならANTHROPIC_API_KEYを使う
  • トークンは、記事やリポジトリに貼らず、シークレットとして管理する

まずは自分のPCでclaude setup-tokenを試し、claude auth statusで認証の状態が変わるかを見るところから始めてみてください。

タイトルとURLをコピーしました