雑記

Claude Code CLIのOAuthトークンを複数エージェント、PCで共有する

はじめに

Claude Code CLIを複数セッションや複数マシンで使っていると、新しいセッションを開くたびにブラウザ認証を求められる問題に遭遇します。特にWindows環境では、OAuthトークンの管理に関する不具合が多く報告されています。

本記事では、claude setup-token で取得した長寿命OAuthトークンを使って、インタラクティブモードでもログインプロンプトをスキップする方法を、WindowsとWSL/Linuxの両環境で解説します。

前提条件

  • Claude Pro / Max / Team / Enterprise のいずれかのサブスクリプション
  • Claude Code CLIがインストール済み
  • 一度はブラウザ認証でログインできる環境(トークン取得時に必要)

背景:なぜセッションエラーが起きるのか

Claude Code CLIの通常のOAuth認証は、ブラウザベースのフローに依存しています。複数セッションを同時に起動したり、新規セッションを追加すると、ポートやクレデンシャルの競合が発生し、再認証を求められるケースがあります。

この問題の解決策は、ブラウザ認証を経由せずに環境変数でトークンを直接渡す方法です。

解決策の全体像

解決に必要なのは以下の3つです:

  1. claude setup-token でOAuthトークンを取得
  2. ~/.claude.json(Windows: %USERPROFILE%\.claude.json)にオンボーディング完了フラグを設定
  3. 環境変数 CLAUDE_CODE_OAUTH_TOKEN にトークンをセット

⚠️ 重要: ~/.claude/config.json ではなく ~/.claude.json に書く必要があります。ファイルの場所を間違えると機能しません。

WSL / Linux での手順

Step 1. 環境変数のクリア

Bash

unset ANTHROPIC_API_KEY
unset CLAUDE_CODE_OAUTH_TOKEN

Step 2. トークンの取得

Bash

claude setup-token

ブラウザが開くのでClaude.aiアカウントでログインします。完了後、ターミナルにオレンジ色でトークン(sk-ant-oat01-... 形式)が表示されます。これをコピーしてください。

Step 3. オンボーディング完了フラグの設定

Bash

cat > ~/.claude.json << 'EOF'
{
  "hasCompletedOnboarding": true
}
EOF

Step 4. トークンのセット

Bash

export CLAUDE_CODE_OAUTH_TOKEN="ここにコピーしたトークンを貼り付け"

Step 5. 確認

Bash

echo $CLAUDE_CODE_OAUTH_TOKEN   # トークンが表示されること
echo $ANTHROPIC_API_KEY          # 空であること

Step 6. 起動

Bash

claude

ログイン選択画面が表示されず、直接インタラクティブモードが起動すれば成功です。

Step 7. 永続化

Bash

echo 'export CLAUDE_CODE_OAUTH_TOKEN="トークン"' >> ~/.bashrc

Windows(PowerShell)での手順

Step 1. 環境変数のクリア

PowerShell

$env:ANTHROPIC_API_KEY = ""
$env:CLAUDE_CODE_OAUTH_TOKEN = ""

Step 2. トークンの取得

PowerShell

claude setup-token

WSL同様、ブラウザ認証後にオレンジ色のトークンが表示されます。

Step 3. オンボーディング完了フラグの設定

PowerShell

@'
{
  "hasCompletedOnboarding": true
}
'@ | Out-File -Encoding utf8NoBOM "$HOME\.claude.json"

Step 4. トークンのセット

PowerShell

$env:CLAUDE_CODE_OAUTH_TOKEN = "ここにコピーしたトークンを貼り付け"

Step 5. 確認

PowerShell

echo $env:CLAUDE_CODE_OAUTH_TOKEN   # トークンが表示されること
echo $env:ANTHROPIC_API_KEY          # 空であること

Step 6. 起動

PowerShell

claude

Step 7. 永続化

PowerShell

[Environment]::SetEnvironmentVariable("CLAUDE_CODE_OAUTH_TOKEN", "トークン", "User")

CLAUDE_CODE_OAUTH_TOKEN の技術的な根拠

この環境変数は裏技ではなく、Anthropicが公式にサポートしている認証方法です。

公式ドキュメントの記述

Anthropic公式リポジトリ claude-code-action の setup.md に以下の記述があります:

Add authentication to your repository secrets:
Either ANTHROPIC_API_KEY for API key authentication
Or CLAUDE_CODE_OAUTH_TOKEN for OAuth token authentication (Pro and Max users can generate this by running claude setup-token locally)

認証の優先順位

CLI内部では、以下の順序で認証情報をチェックしています:

  1. ANTHROPIC_API_KEY(APIキー・従量課金)
  2. CLAUDE_CODE_OAUTH_TOKEN(OAuthトークン・サブスクリプション枠)
  3. ~/.claude/.credentials.json 内のキャッシュ済みセッション
  4. いずれもなければブラウザを起動してOAuth認証

⚠️ ANTHROPIC_API_KEYCLAUDE_CODE_OAUTH_TOKEN の両方がセットされていると、競合警告(Auth conflict)が表示されます。必ずどちらか一方のみをセットしてください。

hasCompletedOnboarding の役割

~/.claude.jsonhasCompletedOnboarding フラグは、CLIに「初回セットアップは完了済み」と伝えるためのものです。このフラグがないと、CLAUDE_CODE_OAUTH_TOKEN をセットしていても、インタラクティブモードではログイン選択画面が表示されてしまいます。

モードCLAUDE_CODE_OAUTH_TOKENhasCompletedOnboarding結果
claude -p(ヘッドレス)✅ セット済み不要✅ 動作する
claude(インタラクティブ)✅ セット済み❌ 未設定❌ ログイン画面が出る
claude(インタラクティブ)✅ セット済み✅ 設定済み✅ 動作する

トークンの有効期限と運用上の注意

有効期限

claude setup-token で取得するトークンは「long-lived(長寿命)」と公式に説明されていますが、正確な有効期限は公式ドキュメントに明記されていません。通常のOAuthログインで取得するアクセストークン(数時間で失効)よりは長いものの、いずれは再発行が必要です。

再発行の手順

トークンが失効した場合は、claude setup-token を再度実行してトークンを取得し、環境変数を更新してください。setup-token はブラウザ認証が必要なため、完全自動での再発行はできません。

複数マシンでの共有

取得したトークンは複数のマシンやコンテナで使い回すことができます。各環境で CLAUDE_CODE_OAUTH_TOKENhasCompletedOnboarding を設定するだけです。

トラブルシューティング

Auth conflict エラー

Error

‼ Auth conflict: Both a token (claude.ai) and an API key (ANTHROPIC_API_KEY) are set.

対処: ANTHROPIC_API_KEY を削除してください。

Bash(WSL / Linux)

unset ANTHROPIC_API_KEY

PowerShell(Windows)

$env:ANTHROPIC_API_KEY = ""
# 永続的に削除する場合
[Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", $null, "User")

Invalid API key エラー

Error

Invalid API key · Fix external API key

対処: トークンが正しくセットされているか確認してください。また、settings.jsonapiKeyHelper が設定されている場合、OAuthトークンとは互換性がないため削除してください。

settings.json の hooks エラー

Error

Settings Error: hooks → PreToolUse → "string": Expected object

対処: PowerShellの ConvertTo-Jsonsettings.json を編集すると、オブジェクトがPowerShell独自の文字列形式(@{matcher=...})に変換されて壊れることがあります。settings.json はテキストエディタで直接編集するか、ヒアストリング(@'...'@)で書き直してください。

まとめ

Claude Code CLIのOAuthトークン共有で重要なのは以下の3点です:

  1. claude setup-token で長寿命トークンを取得する
  2. ~/.claude.json~/.claude/config.json ではない)に {"hasCompletedOnboarding": true} を設定する
  3. 環境変数 CLAUDE_CODE_OAUTH_TOKEN にトークンをセットする

この3つの組み合わせにより、インタラクティブモードでもヘッドレスモードでも、ブラウザ認証なしでClaude Code CLIを使用できます。複数セッション同時起動時の再認証問題も解消され、複数マシンへのトークン共有も可能になります。

-雑記

タグ一覧