Claude Code のログイン状態を画面外から確認・切り替えしたい人向け
CI ジョブを書く前にローカルで認証種別を確認したい場面、<code>/login</code> を画面内で叩く代わりにターミナルから事前にログイン状態を見たい場面、個人 Claude Pro と会社の Console アカウントを切り替えて使い分けたい場面で叩く。GitHub Actions の先頭に <code>claude auth status || exit 1</code> を1行入れて、ログイン切れのまま空振りするのを防ぐ用途にも使える
Claude Code のログイン状態を、対話セッションに入る前にターミナル側から確認したり切り替えたりするためのサブコマンド群です。claude auth login でサインイン、claude auth logout でサインアウト、claude auth status で「今ログインしてるか」「どのアカウントか」を表示します。
対話セッション内で叩く /login /logout とは別物で、起動スクリプトや CI ジョブから事前にチェックするのが本来の出番です。
噛み砕くと
家の鍵を玄関の中から確認するか、玄関の外から確認するか、くらいの違いです。
/login や /logout は Claude を起動して中に入ってから操作する「玄関の中」の鍵管理。claude auth ... はターミナルから直接叩く「玄関の外」からの確認です。CI ジョブが Claude を起動する前にログイン状態を見たい、複数アカウントを切り替えるときに「今どれでログインしてるんだっけ」を即確認したい、こういう用途のために独立してます。
個人的にはこれ、毎朝の ~/.zshrc 起動時チェックで一番効いてます。
大事な前提:これは「対話に入る前」に叩くやつ
claude auth は Claude Code の対話セッションを開いていない状態で叩くサブコマンド群です。claude を打って対話画面に入った後、その中で claude auth status を打っても動きません。中で確認したいときは /status や /login を使います。
つまりこのコマンドが活きるのは「ターミナルの起動チェック」「CI ワークフローの認証ガード」「複数アカウントの管理スクリプト」みたいな、Claude の外側からログイン状態を扱いたい場面です。
「料理ブログ更新ジョブを GitHub Actions に組む前に、自分のアカウント状態を確認したい」を例に手順を見る
シナリオはこうです。Claude Pro 契約者が副業で料理ブログを運営していて、新記事の下書きを Claude に書かせるジョブを GitHub Actions に組みたい。ただ、組む前に「今ローカルの Claude Code がどういう状態でログインしているか」を確認したい。ここで claude auth の3兄弟を順番に試します。
ステップ1: claude auth status でログイン状態を JSON で確認する
まず素の status を叩きます。
$ claude auth status
ログイン済みなら、認証方式・アカウント情報・プラン名などが JSON 形式で返ってきます。スクリプトで読ませたいときはこの形が便利です。jq で「subscription なのか console なのか」だけ抜き出すこともできます。
ステップ2: 人が読む用なら --text をつける
JSON は機械向けで、目で追うには読みにくいです。手で叩くときは --text をつけます。
$ claude auth status --text
これでアカウント名・プラン・認証方式が、改行つきの読みやすい形で出ます。「今 Pro でログイン中」「Console でログイン中」みたいな状態が、JSON を機械パースしなくてもパッと分かる。
typo で -text(ハイフン1本)と書くと別物として扱われてエラーになるので、ハイフンは必ず2本です。
ステップ3: 終了コードで判定する
スクリプトで「ログインしてるかどうか」だけを分岐したいなら、出力ではなく終了コードを見ます。直前のコマンドの終了コードは $? に入ります。
$ claude auth status
$ echo $?
0
0 が返ればログイン中、1 が返ればログインしていません。これだけ覚えておけば、CI スクリプトの条件分岐に使えます。
ステップ4: 試しに claude auth logout でログアウトしてみる
挙動を体感するために、一度ログアウトしてもう一度 status を見ます。
$ claude auth logout
$ claude auth status
$ echo $?
1
1 が返ってきます。ログイン情報が消えた状態です。ここで初心者がやりがちな勘違いがひとつ。claude auth logout で消えるのは /login や claude auth login で入れた OAuth 認証情報だけです。ANTHROPIC_API_KEY をパソコン側の設定値としてセットしてあったり、claude setup-token で発行した CLAUDE_CODE_OAUTH_TOKEN を別途渡していたりすると、それらは生きたままなので、ログアウト後も Claude が普通に動いて「あれ消えてない?」と混乱します。
ステップ5: claude auth login で再ログイン
消えたので戻します。
$ claude auth login
ブラウザが自動で開いて、Anthropic のサインイン画面に飛びます。サインインを完了すると、ターミナルに「ログインしました」みたいな表示が返って終わり。会社の Console アカウントで API 課金側にログインしたいなら --console をつけます。
$ claude auth login --console
SSO 設定済みの組織アカウントで強制的に SSO 経由でログインしたいなら --sso。メールアドレスを事前入力したいなら --email you@example.com。個人 Pro 契約者が --sso を叩くと SSO 設定がないのでログインが通りません。
ステップ6: GitHub Actions に認証ガードを1行入れる
ここまで来たら本題。料理ブログ更新ワークフローの先頭に1行ガードを入れます。
- name: Verify Claude login
run: claude auth status || exit 1
|| は「左が失敗したら右を実行」の意味です。claude auth status が 1 を返したらジョブが即終了。CLAUDE_CODE_OAUTH_TOKEN の Secret 設定を忘れた状態でジョブが走って「Claude に話しかけて空振りする」事故が防げます。
これだけで、ログイン切れに気付かず空振りする無駄実行がなくなる。
つまり claude auth は何をしてくれるのか
- やってくれる: 対話セッションを起動せずに、ターミナルから直接ログイン・ログアウト・状態確認ができる。CI スクリプトでの自動判定にも使える
- やってくれる:
--console--sso--emailをつけて、ログイン経路を細かく指定できる - やってくれない: 対話セッションの中での操作。中に入った後は
/login/logout/statusの出番 - やってくれない:
ANTHROPIC_API_KEYやclaude setup-tokenで発行したトークンの管理。claude auth logoutはそれらを消さない - 意味が薄い場面: Amazon Bedrock / Google Vertex AI / Microsoft Foundry 経由で動かしているとき。それらは別の設定値で認証するので
auth statusで「ログインなし」と出ても普通に動いていることがある
使いどころ3シナリオ(具体題材で再現)
シナリオ1: 仕事マシンの zsh 起動チェックを入れる
毎朝 Mac を立ち上げて Claude Code を使う人向け。~/.zshrc の末尾に1行追加しておくと、ターミナル起動のたびにログイン状態を裏で確認してくれます。
claude auth status > /dev/null || echo "[warn] Claude にログインしてない"
ログイン中なら何も出ない。切れていたら警告が出る。ターミナル開いた瞬間に気付けるので「いざ作業し始めたらログイン切れてた」みたいな小さなストレスがなくなります。私は仕事 Mac でこれ入れていて、月1〜2回くらい警告に救われてます。
シナリオ2: 料理ブログ更新ワークフローの pre-job 認証ガード
副業でレシピサイトを運営していて、Claude に下書きを書かせるジョブを GitHub Actions に組んでいる人向け。ワークフロー先頭で claude auth status || exit 1 を1行入れておくと、CLAUDE_CODE_OAUTH_TOKEN の Secret 設定が抜けたまま push してしまったときに、Claude にリクエストを投げる前にジョブが落ちます。
これがないと、Claude API に何回も空リクエストを投げて、ログを汚し、レート制限を消費して、最後に「ログインしてないだけでした」と判明する。地味だけど効くガードです。
シナリオ3: 個人 Pro と会社 Console の切り替え
個人で Claude Pro 契約していて、会社からは Console(API 課金)で使えと言われている人向け。1台のマシンで両方を行き来する日常になります。
$ claude auth logout
$ claude auth login --console
$ claude auth status --text
個人セッションを切ってから Console 側にログインし直し、--text で今どっちにいるか目視確認。逆に戻すときは --console をつけずに claude auth login。アカウント切り替えのたびに「今どれ?」をはっきり見える化できるので、誤って会社の API 課金で個人のお遊びコードを動かしてしまう事故が減ります。
初心者が踏みやすい落とし穴
/login/logoutスラッシュコマンドとは別物。スラッシュ版は Claude を起動した後の対話セッション内で叩くもの、claude auth loginはターミナルから対話に入る前に叩くもの。挙動はほぼ同じですが、起動タイミングが違うので混同しないこと- CI 環境では
claude auth loginは通らない。ブラウザが開けないので OAuth フローが完了できません。CI 用はclaude setup-tokenで先に発行したCLAUDE_CODE_OAUTH_TOKENを Secret 経由で渡すか、ANTHROPIC_API_KEYを渡すのが正解 --ssoは組織が SSO 設定済みのときだけ意味がある。個人 Pro 契約者がノリで--ssoをつけるとログインが通らず弾かれます--consoleでログインしても、ANTHROPIC_API_KEYがパソコン側にセットされているとそちらが優先される。認証の優先順位は「Cloud provider 認証 > ANTHROPIC_AUTH_TOKEN > ANTHROPIC_API_KEY > apiKeyHelper > CLAUDE_CODE_OAUTH_TOKEN > subscription OAuth」の順。Console にログインしたはずなのに想定外のキーで動いている場合、まずパソコン側の設定値を疑う--textを-textと書くとエラー。ハイフンは必ず2本。地味ですが typo で時間を溶かしやすい- 認証情報の保存先は OS で違う。macOS は OS の Keychain に暗号化されて入るので漏れにくいですが、Linux はホームディレクトリ配下の
.claude/.credentials.json(ファイル権限0600で保護)、Windows は%USERPROFILE%\.claude\.credentials.jsonに保存されます。Linux/Windows でこのファイルを誤って Git に追加してしまうと認証情報が漏れるので、.gitignoreに.claude/.credentials.jsonを必ず入れておくこと claude auth logoutは OAuth credentials しか消さない。ANTHROPIC_API_KEYやclaude setup-token発行のトークンは別管理なので、ログアウト後も Claude が動いて見えることがある。完全に切りたいなら、それらも別途消すこと- Cloud providers(Amazon Bedrock / Google Vertex AI / Microsoft Foundry)経由で動かしているなら
claude authはほぼ無関係。それらはCLAUDE_CODE_USE_BEDROCKなどの設定値で動くので、auth statusで「ログインなし」と出ても Cloud 経由でちゃんと動いているケースがあります
書き方
claude auth {login|logout|status} [--email <addr>] [--sso] [--console] [--text]
やってみるとこうなる
入力
claude auth status --text
出力例
ログイン中なら、認証方式(subscription / console など)、アカウント情報、プラン名が改行つきで読みやすく表示される。素の <code>claude auth status</code> なら JSON 形式で同じ情報が返り、<code>jq</code> で必要な項目だけ抜き出せる。ログアウト状態なら短いメッセージ + 終了コード 1 が返る
このページに出てきた言葉
- サブサブコマンド
- メインコマンド(<code>claude</code>)の後ろに2段重ねで指定する単語。<code>claude auth login</code> なら <code>auth</code> がサブコマンド、<code>login</code> がサブサブコマンドにあたる
- OAuth
- ログイン用の秘密文字列を直接渡さずに、ブラウザ経由で「このアプリにログインを許可する」を行う仕組み。Google や GitHub のサインインで見覚えのあるあの画面
- SSO
- シングルサインオン。会社のメールアドレスとログイン用の秘密文字列で複数サービスにまとめてログインできる仕組み。組織契約のアカウントで使う
- 終了コード(exit code)
- コマンドが終わった瞬間に返す数字。<code>0</code> なら成功、<code>1</code> 以上なら何か失敗、という慣習。<code>echo $?</code> で直前のコマンドの終了コードが見られる
- Console
- Anthropic が提供する API 利用者向けの管理画面。月額の Claude Pro/Max とは課金経路が別で、API キー発行・利用料金の管理をする側
- jq
- JSON データを加工・抽出するための専用コマンド。<code>jq '.account'</code> のように指定すると、欲しい項目だけ取り出せる