Claude Codeのサブスクリプションに入っているのにAPIキーを設定したままだとAPI課金されちゃうよの記
はじめに
Claude CodeをターミナルやVSCode拡張機能で日常的に使っている方は多いと思います。ProやMaxのサブスクリプションに加入していれば、月額の範囲内で利用できるはずです。
ところが、シェルの設定ファイルに ANTHROPIC_API_KEY という環境変数が残っていると、サブスクリプションとは別にAPI従量課金が発生します。筆者自身がこの状態に気づかないまま約1か月間Claude Codeを使い続けた結果、Maxの月額料金に加えて約$300の追加課金を受けました。
この記事では、同じ問題を避けるための仕組みの解説と、確認手順、対処方法を紹介します。
まずこれだけ確認してください
記事を読み進める前に、以下のコマンドをターミナルで実行してみてください。
echo $ANTHROPIC_API_KEY
sk-ant-api03- で始まる文字列が表示された方は、この記事の内容に該当する可能性があります。何も表示されなければ、この問題の影響は受けていません。
認証の優先順位について
Claude Codeには、大きく分けて2つの認証方式があります。
1つ目は、claude.aiアカウントによるOAuth認証です。ProやMaxのサブスクリプションに紐づいており、月額の範囲内で利用できます。
2つ目は、Anthropic ConsoleのAPIキーによる認証です。sk-ant-api03- で始まるキーを使い、トークン単位で従量課金されます。
この2つが同時に存在する場合、Claude Codeは環境変数 ANTHROPIC_API_KEY を優先して使用します。これはAnthropicが公式に文書化している仕様です。
つまり、Maxサブスクリプションに加入していても、.zshrc にAPIキーが書かれていれば、Claude Codeの利用分はすべてConsole側の従量課金として処理されます。サブスクリプション料金はそれとは無関係に支払い続けるため、実質的に二重で支払っている状態になります。
実際に何が起きていたか
筆者の環境では、.zshrc にAPIキーのexport文が残っていました。
export ANTHROPIC_API_KEY="sk-ant-api03-..."
これはClaude Codeの初期セットアップ時に設定したもので、その後Maxサブスクリプションに加入した際にも削除を忘れていました。
Anthropic ConsoleのBillingページを確認したところ、auto-reload(自動リロード)によって以下のクレジット購入が発生していました。
| 日付 | 種別 | 金額 |
|---|---|---|
| 2026年1月7日 | Credit grant | $100.00 |
| 2026年1月22日 | Credit grant | $100.00 |
| 2026年1月28日 | Credit grant | $100.00 |
合計$300のうち$298.85はすでに消費済みでした。すべて、Maxサブスクリプションの範囲内で使えるはずの利用分です。
Claude Codeで /status を確認したところ、「Login method」が「Claude API Account」、「Plan」が「Claude api」と表示されていました。サブスクリプション認証が使われていれば「Max」と表示されるはずなので、ここで初めてAPIキー経由で動作していたことに気づきました。
自分が影響を受けていないか確認する
以下の3つを順番に確認してください。
環境変数が設定されていないか確認する
APIキーがどのファイルで設定されているかを調べます。
grep -n "ANTHROPIC_API_KEY" ~/.zshrc ~/.bashrc ~/.bash_profile ~/.zprofile 2>/dev/null
該当する行が見つかった場合、そのファイルからClaude Codeにキーが渡されています。
Claude Codeの認証状態を確認する
ターミナルでClaude Codeを起動し、/status を実行してください。
「Login method」または「Plan」の欄に注目します。「Claude API Account」や「Claude api」と表示されている場合は、APIキー経由で動作しています。「Pro」や「Max」と表示されていれば、サブスクリプション認証が使われているので問題ありません。
なお、VSCode拡張機能のClaude Codeでは /status が使えません。その場合は、Claude Code拡張機能の入力欄の右下にあるスラッシュの箇所をクリックすると表示される「Account & Usage」の表示を確認してください。
Consoleの課金履歴を確認する
ブラウザで https://console.anthropic.com を開き、Billingページを確認してください。Invoice historyに「Credit grant」の項目があれば、APIクレジットが購入されています。心当たりがなければ、意図しない課金が発生している可能性があります。
問題に対処する
環境変数を無効にする
.zshrc(macOSのデフォルトシェルの場合)を編集し、ANTHROPIC_API_KEY の行をコメントアウトします。
# 変更前
export ANTHROPIC_API_KEY="sk-ant-api03-..."
# 変更後(先頭に # を付ける)
# export ANTHROPIC_API_KEY="sk-ant-api03-..."
保存したら、以下を実行して設定を反映します。
source ~/.zshrc
ただし、source だけでは現在のシェルセッションにexport済みの変数は消えません。あわせて以下も実行してください。
unset ANTHROPIC_API_KEY
echo $ANTHROPIC_API_KEY を実行して何も表示されなければ成功です。
他にターミナルのタブやウィンドウを開いている場合は、それぞれで unset を実行するか、すべて閉じて新しく開き直してください。新しいターミナルでは .zshrc の変更が反映されるため、環境変数はセットされません。
Claude Codeの認証を切り替える
Claude Codeのプロンプトで /logout を実行し、その後 exit で終了します。
/logout
exit
改めて claude コマンドで起動すると、ログイン方法の選択画面が表示されます。ここで「Claude.ai」(サブスクリプション)側を選んでください。「Anthropic Console」ではなく、サブスクリプション側を選ぶことが重要です。
ブラウザが開いたら、claude.aiのアカウントで認証を完了してください。完了後に /status で「Plan」が「Max」や「Pro」に変わっていれば切り替え成功です。
VSCodeのClaude Code拡張機能も確認する
VSCode拡張はCLIと認証情報を共有していると思っていましたが、筆者の環境ではCLIの設定変更後でも反映されませんでした。VSCode側でも、VSCodeのターミナルから /logout → /login を実行して、サブスクリプションアカウントで再認証しておくことを強くおすすめします。
auto-reloadを無効にする
https://console.anthropic.com のBillingページで、auto-reloadの設定を確認してください。意図的にAPI従量課金を使う予定がなければ、OFFにしておくことを推奨します。これにより、万が一同じ問題が再発してもクレジットの自動購入を防げます。
再発を防ぐために
この問題が起きる根本的な原因は、APIキーをシェルの設定ファイルに恒久的に書いたまま忘れてしまうことです。
Claude CodeをPro/Maxサブスクリプションで使うなら、ANTHROPIC_API_KEY をシェル設定ファイルに書かないでください。APIキーが必要な場面(Pythonスクリプトからの一時的なAPI呼び出しなど)では、コマンド実行時にその場で渡す方法が安全です。
ANTHROPIC_API_KEY="sk-ant-api03-..." python my_script.py
この書き方であれば、環境変数はそのコマンドの実行中だけ有効になり、シェル全体には影響しません。
また、定期的に /status で認証方法を確認する習慣をつけておくと、意図しない状態になっていてもすぐに気づけます。
すでに課金が発生していた場合
意図しない課金に気づいた場合は、https://support.anthropic.com からサポートに問い合わせてみてください。サブスクリプション加入中であったこと、環境変数の優先順位を知らずに二重課金になっていたことを説明すれば、個別に対応してもらえる可能性があるかもしれません(未確認です)。
おわりに
Claude Codeは開発者にとって非常に便利なツールです。ただ、環境変数のAPIキーがサブスクリプション認証より優先されるという仕様は、知らなければ見落としやすいポイントです。
サブスクリプションに加入してClaude Codeを使っている方は、ぜひ一度 echo $ANTHROPIC_API_KEY をターミナルで実行してみてください。数秒の確認で、不要な出費を防げます。
Discussion