はじめに
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つです:
claude setup-tokenでOAuthトークンを取得~/.claude.json(Windows:%USERPROFILE%\.claude.json)にオンボーディング完了フラグを設定- 環境変数
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:
EitherANTHROPIC_API_KEYfor API key authentication
OrCLAUDE_CODE_OAUTH_TOKENfor OAuth token authentication (Pro and Max users can generate this by runningclaude setup-tokenlocally)
認証の優先順位
CLI内部では、以下の順序で認証情報をチェックしています:
ANTHROPIC_API_KEY(APIキー・従量課金)CLAUDE_CODE_OAUTH_TOKEN(OAuthトークン・サブスクリプション枠)~/.claude/.credentials.json内のキャッシュ済みセッション- いずれもなければブラウザを起動してOAuth認証
⚠️ ANTHROPIC_API_KEY と CLAUDE_CODE_OAUTH_TOKEN の両方がセットされていると、競合警告(Auth conflict)が表示されます。必ずどちらか一方のみをセットしてください。
hasCompletedOnboarding の役割
~/.claude.json の hasCompletedOnboarding フラグは、CLIに「初回セットアップは完了済み」と伝えるためのものです。このフラグがないと、CLAUDE_CODE_OAUTH_TOKEN をセットしていても、インタラクティブモードではログイン選択画面が表示されてしまいます。
| モード | CLAUDE_CODE_OAUTH_TOKEN | hasCompletedOnboarding | 結果 |
|---|---|---|---|
claude -p(ヘッドレス) | ✅ セット済み | 不要 | ✅ 動作する |
claude(インタラクティブ) | ✅ セット済み | ❌ 未設定 | ❌ ログイン画面が出る |
claude(インタラクティブ) | ✅ セット済み | ✅ 設定済み | ✅ 動作する |
トークンの有効期限と運用上の注意
有効期限
claude setup-token で取得するトークンは「long-lived(長寿命)」と公式に説明されていますが、正確な有効期限は公式ドキュメントに明記されていません。通常のOAuthログインで取得するアクセストークン(数時間で失効)よりは長いものの、いずれは再発行が必要です。
再発行の手順
トークンが失効した場合は、claude setup-token を再度実行してトークンを取得し、環境変数を更新してください。setup-token はブラウザ認証が必要なため、完全自動での再発行はできません。
複数マシンでの共有
取得したトークンは複数のマシンやコンテナで使い回すことができます。各環境で CLAUDE_CODE_OAUTH_TOKEN と hasCompletedOnboarding を設定するだけです。
トラブルシューティング
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.json に apiKeyHelper が設定されている場合、OAuthトークンとは互換性がないため削除してください。
settings.json の hooks エラー
Error
Settings Error: hooks → PreToolUse → "string": Expected object
対処: PowerShellの ConvertTo-Json で settings.json を編集すると、オブジェクトがPowerShell独自の文字列形式(@{matcher=...})に変換されて壊れることがあります。settings.json はテキストエディタで直接編集するか、ヒアストリング(@'...'@)で書き直してください。
まとめ
Claude Code CLIのOAuthトークン共有で重要なのは以下の3点です:
claude setup-tokenで長寿命トークンを取得する~/.claude.json(~/.claude/config.jsonではない)に{"hasCompletedOnboarding": true}を設定する- 環境変数
CLAUDE_CODE_OAUTH_TOKENにトークンをセットする
この3つの組み合わせにより、インタラクティブモードでもヘッドレスモードでも、ブラウザ認証なしでClaude Code CLIを使用できます。複数セッション同時起動時の再認証問題も解消され、複数マシンへのトークン共有も可能になります。