0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.envにANTHROPIC_API_KEYがあると、Claude CodeはMax planを黙って無視してAPI課金に切り替える(187米ドル損失の事例)

0
Last updated at Posted at 2026-05-14

まとめ

プロジェクトの.envANTHROPIC_API_KEY=sk-ant-...の行が含まれていて、かつシェルがそのファイルを読み込んでいる(direnvsource .envなど)と、Claude Codeはその鍵をAPI課金で使う。月額のMax planの購読認証は使われない。Claude Codeはセッション開始の挨拶の段で「今は購読かAPI鍵か」を表示するが、一度きりの表示で見落としやすい。自動補充がAPI側の既定で有効だと、月末の請求や前払い残高の枯渇まで気づかない。

2026年5月13日のReddit投稿(ID 1tbaq2d、約11時間で332ポイントと86コメント)では、9回の自動補充で約187米ドルの取り返し不能の損失が発生した。Anthropicの公式回答は「意図された機能、ドキュメントは正確」で、消費済の前払い金は返金しないと明言した。

注意: これはClaude Codeのバグではない。標準の環境変数の優先順位 + 利用者側の.envの読み込み + 見落としやすい挨拶の表示 + 自動補充の既定値、の組み合わせで発生する。下記の対処は利用者側で動かせる部分を扱う。

仕組み

Claude CodeのBashの道具がコマンドを実行する時、子プロセスは親から全ての環境変数を継承する。.envdirenvやシェルの起動スクリプトで読み込んでいれば、ANTHROPIC_API_KEYもそのまま継承される。

Anthropicの認証の優先順位:

  1. 環境変数ANTHROPIC_API_KEY(空でない場合)
  2. 設定ファイル
  3. 購読の認証(Max planなど)

ANTHROPIC_API_KEYが空でない値で設定されていれば、購読は使われない。これは公式に文書化された挙動で、公式回答も「意図された機能」として確認した通り。

公式回答の原文:

Claude Code is designed to prioritize API keys set as environment
variables over subscription credentials.
This is intentional functionality.

画面表示には実は合図がある。Claude Codeはセッション開始時の挨拶の段で「現在の認証は購読か、API鍵か」を表示する。Reddit投稿の議論で複数の利用者が独立して証言している(「Claude Code window tells you whether it's using a subscription」、「the first thing Claude tells you then is it using API billing」)。ただし一度きりの表示で、作業に集中していると読み飛ばす。次に気づく合図は、課金通知のメールか、前払い残高の枯渇か、月末の請求の急増だ。

つまり、利用者の理解(「Max planで課金は固定」)と、実態(「環境変数でAPI課金に変質」)の乖離は、合図ゼロで起きるのではなく、見落としやすい挨拶の段の一行 + 自動補充の既定値、の組み合わせで継続する。

Claude Codeが「やらない」こと

Reddit投稿の議論では、複数の経験のある開発者が独立して「Claude Codeは.envを自動読みしない」と証言した(8件以上のコメント)。.envANTHROPIC_API_KEYの行があるだけでは、Claude Codeには影響しない。利用者のシェルがdirenvsource .envで先に読み込んでいる場合のみ、Claude Codeの子プロセスが環境変数を継承する。利用者側の自分の作業の場の構成が起点だ。

自分のプロジェクトを点検する

直近で使ったプロジェクトのルートで、次の一行を実行する。

grep -E '^[[:space:]]*(export[[:space:]]+)?ANTHROPIC_API_KEY[[:space:]]*=' .env .env.* 2>/dev/null

.env系のファイルに代入の行があれば表示される。何も出なければ問題ない。

加えて、Anthropicのconsoleで直近30日の請求項目を確認する。想定外のAPI課金があれば、すでに黙って課金されていた可能性がある。

対処は3種類

対処1: .envの行を削除

.envからANTHROPIC_API_KEY=...の行を削除する。アプリの本体でAPI鍵が必要なら、Claude Codeのシェルが読まない別のファイル(例: .api-keys)に移して、アプリの起動スクリプトの中だけで読み込む。

弱点: チームの他のメンバーが行を戻すと再発する。

対処2: シェル起動時に空にする

~/.bashrc~/.zshrcの末尾に追加する。

unset ANTHROPIC_API_KEY

または

export ANTHROPIC_API_KEY=""

どのプロジェクトの.envで設定されても、シェル起動時に空になる。弱点: Claude Code以外でAPIを使う(例: PythonのSDKスクリプト)時には、明示的に設定し直す必要がある。

対処3: cc-safe-setupのhookで自動検出

cc-safe-setupを採用していれば、2026年5月13日に追加した新規のhookで自動検出できる。

{
 "hooks": {
 "SessionStart": [{
 "hooks": [{ "type": "command", "command": "~/.claude/hooks/dotenv-anthropic-key-billing-guard.sh" }]
 }]
 }
}

このhookはSessionStart時にプロジェクトの中の5種類の.env系ファイル(.env.env.local.env.development.env.production.env.dev)を走査し、代入の行があれば警告を出す。コメントアウトと空値は除外する。

警告内容は、検出されたファイル一覧、3種類の対処素案、出典のRedditのURLを含む。ブロックはせず警告のみで、セッション開始時に「今のセッションはMax planかAPIか」を判定できる。テストは21件で全件パス済。

なぜ「意図された機能」なら対処の設計が変わるか

これはバグではなく、設計通りの動作だと公式が明言した。バグなら修正を待つ選択肢があるが、設計なら修正は来ない。利用者側のツールで対処するしかない。

これが、公式CLIのオプション追加や設定の新規追加を待つのではなく、SessionStart hookで自動検出する設計を選んだ理由だ。利用者側だけが動ける。

同じ「意図された設計と利用者の理解の乖離」のパターンは、Claude Codeの他の場所でも観察される。

  • Issue #58550: /goalにサーキットブレーカーがなく、200回超の繰り返しで5時間、週次利用枠の50%を黙って消費する
  • Issue #58289: permissions.askが既定モードのMCPの道具で無視される
  • Issue #58297: agentsの表示がターン完了後もバックグラウンドbashを「Working」と誤表示する

いずれも、利用者の理解が公式UIで更新されず、利用者側の観察ツールがないと乖離が継続する場所だ。

関連素材

この記事の根本パターン(主張と実態の乖離)は、2026年5月22日発売予定の事例集 Claude Code Claim-Verify Handbook で、130件の事例(本文15件+付録D 115件)、5種類の検出ツール、14種類の防衛手順としてまとめている。試し読み1章の全文(約9,400字)は Gist で無料で読める。

予防hookの集まりは cc-safe-setup。この記事で紹介したdotenv-anthropic-key-billing-guard.shは最新の追加hookで、yurukusa/cc-safe-setupのfeat/dotenv-anthropic-key-billing-guard-2026-05-13ブランチで公開している。

おわりに

  • .envANTHROPIC_API_KEYは、Claude CodeのMax plan購読を黙って上書きする
  • 公式が「意図された機能」と確認した動作で、修正は来ない
  • 対処は3種類: 行の削除/シェルで空に設定/hookで自動検出
  • 直近のプロジェクトでgrepの一行を試し、該当があれば今日のうちに対処することを推奨する

消費済の前払い金は返金されないため、予防の優先度は高い。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?