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の公式回答は「意図された機能、ドキュメントは正確」で、消費済の前払い金は返金しないと明言した。

2026年6月15日の課金分離(プログラム的利用がPool 2の従量へ分離される変更)で、この罠は踏みやすくなる。 分離への対応として「ANTHROPIC_API_KEYを発行してAPI課金へ移行する」のは正攻法の一つだが、その鍵をシェル全体に効かせると、自動運用だけでなく対話の利用まで従量課金に流れる。発火当日の起票 #68406 でも、月200米ドルの購読を払っているのにコンソールのclaudeが購読を使わず課金される、という同じ混乱が報告された(原因は環境に残ったANTHROPIC_API_KEY)。崖の対応で鍵を入れるなら、鍵を「自動運用だけ」に効かせる(下記の対処)のが要点になる。

注意: これは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)を走査し、代入の行があれば警告を出す。コメントアウトと空値は除外する。CC_DOTENV_AK_FILESで対象ファイル、CC_DOTENV_AK_ACTIONで警告かブロックかを設定できる。

警告内容は、検出されたファイル一覧、3種類の対処素案、出典のRedditのURLを含む。既定はブロックせず警告のみで、セッション開始時に「今のセッションはMax planかAPIか」を判定できる。テストは21件で全件パス済。hook本体は cc-safe-setup の examples/dotenv-anthropic-key-billing-guard.sh にある。

※ この hook は npm で配布中の 29.8.0(2026年4月20日)より後に追加したため、npx cc-safe-setup では入りません。npx github:yurukusa/cc-safe-setup --install-example dotenv-anthropic-key-billing-guard のように保管庫を直接指してください(npm への公開は資格情報の失効で止まっています)。

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

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

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

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

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

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

関連素材

予防hookの集まりは cc-safe-setup(無料)。この記事のdotenv-anthropic-key-billing-guard.shもここに入っている。

6月15日の課金分離そのものへの対応(自分の利用量が分離の対象か5分で確かめる手順、4つの対応の経路、費用の見積もり)は、Claude Code の6月15日の課金分離に備える本(¥800、第2章まで無料)にまとめた。発火当日に追加した第8章で、この記事のANTHROPIC_API_KEYの罠を含む、発火初日に実際に起票された3つの混乱への利用者側の対応を整理している。

こうした課金や仕様の変更は、毎月のように新種が出る。今月実際に起きた事故と仕様の変更を実機で検証してまとめ、安全チェックリストとコピペできる hook と設定例を月次で配信しているのが Claude Code 事故まとめ(無料・月次)。一回売りの本が「過去の事故の体系化」なのに対し、 この月刊は「今月また起きる新しい事故」への継続の追従。

おわりに

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

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


Claude Code の運用・安全・費用の検証記事は、これからも続けて公開します。note のゆるくさ をフォローしておくと、新しい記事を公開したときに通知が届きます(無料)。


トークンの消費がどこで膨らんでいるかを実機のログから切り分け、設定と文脈の管理とワークフローの設計で半分まで減らす全手順は、Claude Code のトークン消費を半分にする本(¥2,500・第1章まで無料の試し読み)にまとめています。

この記事の API キーの優先は、「購読しているのに従量課金される」原因の一つです。同じ症状でも、原因は4つ(共有の設定の上書き / 環境変数 ANTHROPIC_API_KEY の優先 / サーバー側の購読の資格の解決の失敗 / Desktop版とCLIの併存)に分かれます。自分がどれに当てはまるかは、ブラウザの中だけで完結する無料の 購読なのに従量課金 自己診断(5問・送信なし)で切り分けられます。

.env の API キーで知らないうちに Max plan が使われる、のような「無断の課金」を含め、データ消失・暴走・無断課金を実行の前で止める側の手順は、Anthropic 公式ガイドにない事故防止本(第3章まで無料の試し読み)に、800時間の自律運用の全手順としてまとめています。¥2,500 の節約ガイドの前に置ける、件数では一番読まれている摩擦の低い入口です。


ほかにも、800時間の運用データから、トークン消費の削減・複数ベンダー(Claude / Codex / Gemini / Copilot)の並行運用・サブエージェントの沈黙の失敗対策など、テーマ別の手引きを公開しています。気になる人は著者の本の一覧から、価格と評価を見て選べます。

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?