17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

/model を1度でも押すと ANTHROPIC_DEFAULT_MODEL は効きません

17
Last updated at Posted at 2026-08-24

Claude Code v2.1.236 に ANTHROPIC_DEFAULT_MODEL という環境変数が入りました。新しいセッションが開始するモデルを決めるものです。

チームで初期モデルを揃えたくて設定したんですが、まったく効きませんでした。

ANTHROPIC_DEFAULT_MODEL=claude-haiku-4-5 claude -p "1+1は?" --output-format json
# modelUsage → claude-opus-5[1m]   ← haiku になっていない

バグではなく仕様でした。しかも名前がよく似た ANTHROPIC_MODEL とは優先順位が逆です。実測した結果を置いておきます。

一次情報
モデル設定: https://code.claude.com/docs/en/model-config
CHANGELOG: https://code.claude.com/docs/en/changelog

動作確認環境: Windows 10 / Claude Code v2.1.241 / settings.jsonmodel"opus[1m]"

実測: 5パターン流した結果

同じプロンプトを条件だけ変えて流し、--output-format jsonmodelUsage で実際に使われたモデルを見ました。

条件 実際に使われたモデル
環境変数なし(基準) claude-opus-5[1m]
ANTHROPIC_DEFAULT_MODEL=claude-haiku-4-5 claude-opus-5[1m](効かない)
ANTHROPIC_MODEL=claude-haiku-4-5 claude-haiku-4-5(効く)
ANTHROPIC_MODEL=haiku + ANTHROPIC_DEFAULT_MODEL=sonnet claude-haiku-4-5
ANTHROPIC_MODEL=haiku + --model sonnet claude-sonnet-5

DEFAULT と付いているほうだけが無視されています。

なぜ効かないのか

公式ドキュメントに条件が明記されていました。

Claude Code starts a new session on the variable's model only when none of these selects a model:

  • The --model flag
  • ANTHROPIC_MODEL
  • A model value in any settings file, including the choice you save with /model
  • An organization default model

どの設定ファイルにも model が書かれていないときだけ使われる、という条件付きの変数でした。

そして厄介なのが3つ目です。/model で選んだモデルは設定ファイルに保存されます。実際、/model opus[1m] を実行した直後の ~/.claude/settings.json がこれです。

{
  "model": "opus[1m]",
  "permissions": { }
}

一度でも /model を押していたら、その時点で ANTHROPIC_DEFAULT_MODEL は死んでいます。 モデルを切り替えたことがない人のほうが少ないと思うので、大半の環境では最初から効きません。

左が強い。DEFAULT という名前に反して、一番弱いのが ANTHROPIC_DEFAULT_MODEL です。

もう1つの罠: haiku と書くと無視される

ドキュメントには、変数そのものが無視されるケースも書かれていました。

Claude Code ignores the variable in these cases, and the Default option resolves as if you hadn't set it:

  • You set it to default, inherit, opusplan, or haiku

ANTHROPIC_DEFAULT_MODEL=haiku黙って無視されます。コストを下げようとしてこれを書くと、何も起きません。

一方、同じ文字列を ANTHROPIC_MODEL に渡すと普通に通ります。ここは実測できました。

ANTHROPIC_MODEL=haiku claude -p "..." --output-format json
# modelUsage → claude-haiku-4-5-20251001

同じ haiku という文字列が、変数名によって「有効」と「無視」に分かれます。

なお、この無視ルール自体は自分の環境では直接確認できていません。設定ファイルの model が先に効いてしまい、無視されたのか設定に負けたのかを区別できないためです。ここはドキュメントの記載として読んでください。

結局どちらを使えばいいのか

やりたいこと 使う変数
毎回このモデルに強制したい(CI、コスト固定) ANTHROPIC_MODEL
初期値だけ決めて、各自の /model は尊重したい ANTHROPIC_DEFAULT_MODEL

再起動後の挙動も逆になります。

A choice you save with /model takes precedence over the variable on later launches too. With ANTHROPIC_MODEL set instead, Claude Code returns to that variable's model on the next launch, whatever you saved with /model.

ANTHROPIC_MODEL は毎回そのモデルに戻す。ANTHROPIC_DEFAULT_MODEL/model の選択に譲る。チーム配布用なら後者が正しいのですが、その場合は各自の settings.jsonmodel が残っていないことが前提になります。

効かせたい場合

settings.json から model を消します。

# 現状確認
cat ~/.claude/settings.json | grep model

ここに model が残っている限り、環境変数は効きません。消したうえで ANTHROPIC_DEFAULT_MODEL を設定し、/model を押さなければ初期値として機能します。

まとめ

  • ANTHROPIC_DEFAULT_MODEL設定ファイルに model が無いときだけ効く
  • /model の選択は設定ファイルに保存されるので、押した時点で環境変数は効かなくなる
  • 優先順位は --model > ANTHROPIC_MODEL > 設定ファイル > ANTHROPIC_DEFAULT_MODEL
  • ANTHROPIC_DEFAULT_MODEL=haiku は無視対象(default / inherit / opusplan も同じ)
  • 強制したいなら ANTHROPIC_MODEL、初期値だけなら ANTHROPIC_DEFAULT_MODEL

「設定したのに効かない」と思ったら、まず settings.jsonmodel を見に行くのが早いです。

関連記事


JQITのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。

コーポレートサイト

エンジニア採用も行っています。もしご興味あれば覗いてみてください。

採用サイト

17
15
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
17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?