◉CLAUDE LABEN
●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●HAIKU 5.5 — 2.1.293(10/07)から claude-haiku-5-5 が Anthropic API の既定の Haiku モデルになりました●SONNET 4.5 — Claude API での提供終了は 11/30、残り47日。移行先は Sonnet 5.5●Q&A — Mod が「エラーなしで何も描かれない」ときに見る3か所が共有されています●AGENTS.MD — Codex と Claude Code を同じフォルダで使うとき、AGENTS.md と CLAUDE.md の入口をどう分けるかの整理が出ています●NEW — 「cd して git add して commit」の承認が毎回出るのは、設定の抜けではなく仕様でした●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●HAIKU 5.5 — 2.1.293(10/07)から claude-haiku-5-5 が Anthropic API の既定の Haiku モデルになりました●SONNET 4.5 — Claude API での提供終了は 11/30、残り47日。移行先は Sonnet 5.5●Q&A — Mod が「エラーなしで何も描かれない」ときに見る3か所が共有されています●AGENTS.MD — Codex と Claude Code を同じフォルダで使うとき、AGENTS.md と CLAUDE.md の入口をどう分けるかの整理が出ています●NEW — 「cd して git add して commit」の承認が毎回出るのは、設定の抜けではなく仕様でした
記事一覧/Claude Code
⟐ Claude Code/2026-09-11中級

inferenceGatewayHeaders はいまも動きます。10月7日の正午に、既定値へ落ちます

9月10日から出始めた管理設定の非推奨警告を、私は表記ゆれの整理だと受け取っていました。期限を過ぎた旧名は無視されるのではなく、fail-closed な値か既定値に落ちます。旧新の対応と、設定を1本のスクリプトで棚卸しする手順を書き残します。

Claude Code262managed-settings設定管理5移行10

9月10日の朝、Claude Code を立ち上げたところ、見慣れない通知が出ておりました。組織の設定に、いまは受け付けられているけれども近く受け付けられなくなる項目がある、という知らせです。Details を開くと、該当するキーと置き換え先、そして期限が並んでおりました。

最初に見たとき、私はこれを表記ゆれの整理だと受け取りました。名前が変わるだけなら、10月に入ってからまとめて直せば間に合うと考えたのです。

その見立ては、方向ごと間違っておりました。

10月7日に起きるのは、無視ではなく既定値への転落です

受付の期限は 2026年10月7日 正午(太平洋時間) です。警告そのものは8月27日の版で用意され、各利用者への表示が9月10日から始まりました。

取り違えやすいのは、期限を過ぎたあとの挙動です。旧名が「読み飛ばされて、これまでどおり動く」のであれば、直すのが遅れても実害はほとんどありません。実際にはそうではなく、名前を変えられたキーの旧名は、fail-closed な値か既定値に落ちます。

たとえば trustBootstrapLocalExec に true を置いて配っていた環境では、10月7日を境にその true が届かなくなります。緩む方向ではなく、締まる方向に振れるわけです。managedMcpServers や orgPluginSettings に不正なエントリが残っている場合は、そのコネクタやツールポリシーが書き直されるまで使えなくなります。

つまり、10月7日に変わるのは設定ファイルの読みやすさではなく、その日から先の既定の姿です。

期限つきの旧表記は、名前の問題ではなく既定値の問題です。 この一点を取り違えていたせいで、私は優先順位を一段下げたところに置いておりました。

なお、警告の出方にも仕様があります。disableConfigDeprecationWarnings を置けば最初の表示は抑えられますが、受付停止の24時間前に出る最後の通知は残ります。抑制はあくまで初回だけで、期限の存在そのものを消せるわけではありません。

旧名と新名の対応を、一度だけ書き写しておきます

対応表は Details ダイアログにも出ますが、手元に写しておいたほうが移行の作業がはかどります。名前が変わるものと、値や形式が変わるものが混ざっている点に注意が必要です。

旧い書き方置き換え先備考
inferenceGatewayHeadersinferenceCustomHeaders値も JSON オブジェクトで書きます
trustBootstrapLocalExectrustBootstrapDelivery—
enduserAttributionendUserAttributionE が大文字に変わるだけです
isDxtEnabledisDesktopExtensionEnabled—
isDxtSignatureRequiredisDesktopExtensionSignatureRequired—
inferenceGatewayAuthScheme: "sso"inferenceCredentialKind: "interactive"値の側が変わります
inferenceGatewayAuthScheme: "auto"キーごと削除しますbearer が既定です
ヘッダを文字列やリストで書くJSON オブジェクトで書くotlpHeaders otlpResourceAttributes bootstrapHeaders が対象です
orgPluginSettings の record 形式配列形式1.15200.0 より前の版は record 形式しか読みません
ツール権限の "ask-session""ask"builtinToolPolicy ほかが対象です
managedMcpServers[].scopesscope空白区切りの1文字列にします
oauth を数値や文字列で書くtrue か oauth オブジェクト—

orgPluginSettings の行だけは、移行の向きが素直ではありません。新しい書き方へ寄せると古い版の端末が読めなくなるためで、配布先の版がそろっているかを先に確かめる必要があります。期限の話と版の話が同じ行で交差しているのは、この一行だけです。

9月4日の移設で、どちらのパスも読まれない窓が開きます

10月7日の話とは別に、9月4日の版でひとつ移設がありました。relaunchEnforcementHours が、配信される設定のなかで bootstrap の下から lifecycle の下へ移っております。

厄介なのは読み取りの方向です。9月4日以降の版は古いパスを読まず、それ以前の版は新しいパスを読みません。 端末の版がそろっていない環境で新しい書き方へ移すと、移行の途中に「どちらの版からも値が読まれない」窓が開きます。

この窓のあいだ、値は消えるのではなく既定に戻ります。そして同じ版で、再起動を促すまでの既定の猶予が1時間から24時間へ変わりました。値が読まれていないことに、しばらく気づけない組み合わせです。

さらに、デバイス管理のプロファイルがアプリの挙動に関わるキーを1つでも設定している場合、そのプロファイルが配信側の値より優先されます。プロファイル側にも同じ値を置いておかないと、配信側だけを直しても効きません。私はここを読み飛ばしかけて、手元で設定を往復させました。

手元の設定を、落ちる検査で棚卸しします

目視で拾うには項目が多く、入れ子の奥にも該当箇所があります。私は次のスクリプトを置いて、設定ファイルを通すことにしました。旧名・値の旧表記・形式違反・移設されたパスを、まとめて洗い出します。

#!/usr/bin/env python3
"""管理設定から、2026-10-07 に受付が終わる旧表記を洗い出します。"""
import json, sys, pathlib
 
RENAMES = {  # 旧表記 -> (新表記, 備考)
    "inferenceGatewayHeaders": ("inferenceCustomHeaders", "値も JSON オブジェクトで書きます"),
    "trustBootstrapLocalExec": ("trustBootstrapDelivery", ""),
    "enduserAttribution":      ("endUserAttribution", "E が大文字になります"),
    "isDxtEnabled":            ("isDesktopExtensionEnabled", ""),
    "isDxtSignatureRequired":  ("isDesktopExtensionSignatureRequired", ""),
}
VALUE_RENAMES = {  # 値そのものが旧表記になるキー
    "inferenceGatewayAuthScheme": {
        "sso":  'inferenceCredentialKind: "interactive" に置き換えます',
        "auto": "キーごと削除します(bearer が既定です)",
    },
}
OBJECT_ONLY = ("inferenceCustomHeaders", "inferenceGatewayHeaders",
               "otlpHeaders", "otlpResourceAttributes", "bootstrapHeaders")
TOOL_POLICY_KEYS = ("builtinToolPolicy", "managedMcpServers", "orgPluginSettings")
 
 
def walk(node, path=""):
    """入れ子を辿りながら (パス, キー, 値) を返します。"""
    if isinstance(node, dict):
        for k, v in node.items():
            here = f"{path}.{k}" if path else k
            yield here, k, v
            yield from walk(v, here)
    elif isinstance(node, list):
        for i, v in enumerate(node):
            yield from walk(v, f"{path}[{i}]")
 
 
def audit(cfg):
    hits = []
    for path, key, value in walk(cfg):
        if key in RENAMES:
            new, note = RENAMES[key]
            hits.append((path, f"{key} -> {new}", note))
        if key in VALUE_RENAMES and isinstance(value, str):
            note = VALUE_RENAMES[key].get(value)
            if note:
                hits.append((path, f'{key}: "{value}"', note))
        if key in OBJECT_ONLY and not isinstance(value, dict) and key not in RENAMES:
            hits.append((path, f"{key} が {type(value).__name__} です",
                         "JSON オブジェクトに書き換えます"))
        if key == "orgPluginSettings" and isinstance(value, dict):
            hits.append((path, "orgPluginSettings が record 形式です",
                         "配列形式に書き換えます"))
        if key == "scopes" and "managedMcpServers" in path:
            hits.append((path, "managedMcpServers[].scopes",
                         "scope(空白区切りの1文字列)に直します"))
        if key == "oauth" and not isinstance(value, (bool, dict)):
            hits.append((path, f"oauth が {type(value).__name__} です",
                         "true か oauth オブジェクトにします"))
        if value == "ask-session" and any(t in path for t in TOOL_POLICY_KEYS):
            hits.append((path, '"ask-session"', '"ask" に直します'))
    # 10/7 とは別枠。9/4 に移設されたパス
    if isinstance(cfg.get("bootstrap"), dict) and "relaunchEnforcementHours" in cfg["bootstrap"]:
        hits.append(("bootstrap.relaunchEnforcementHours",
                     "lifecycle.relaunchEnforcementHours へ移設",
                     "2026-09-04 以降の版は旧パスを読みません"))
    return hits
 
 
def main(paths):
    total = 0
    for p in paths:
        f = pathlib.Path(p)
        if not f.exists():
            print(f"[skip] {p}(見つかりません)")
            continue
        try:
            cfg = json.loads(f.read_text())
        except json.JSONDecodeError as e:
            # 9月4日以降、パースできない設定は起動そのものを止めます
            print(f"[FATAL] {p}: JSON として読めません -> {e}")
            total += 1
            continue
        hits = audit(cfg)
        print(f"\n=== {p} — 要修正 {len(hits)} 件 ===")
        for path, what, note in hits:
            print(f"  {path}\n    {what}" + (f"\n    {note}" if note else ""))
        total += len(hits)
    print(f"\n合計 {total} 件")
    return 1 if total else 0
 
 
if __name__ == "__main__":
    sys.exit(main(sys.argv[1:] or ["managed-settings.json"]))

旧表記を意図的に詰めた検体を通したところ、次のように出ました。

=== sample-managed-settings.json — 要修正 11 件 ===
  inferenceGatewayHeaders
    inferenceGatewayHeaders -> inferenceCustomHeaders
    値も JSON オブジェクトで書きます
  inferenceGatewayAuthScheme
    inferenceGatewayAuthScheme: "sso"
    inferenceCredentialKind: "interactive" に置き換えます
  ...
  managedMcpServers[0].scopes
    managedMcpServers[].scopes
    scope(空白区切りの1文字列)に直します
  bootstrap.relaunchEnforcementHours
    lifecycle.relaunchEnforcementHours へ移設
    2026-09-04 以降の版は旧パスを読みません
 
合計 11 件

新しい書き方へ直した設定を同じスクリプトに通すと 0 件になり、終了コードが 0 へ変わります。ここが肝で、終了コードで落ちる形にしておかないと、検査は置いただけの飾りになります。私は以前、出力を眺めるだけの検査を書いて、何も拾えていないことに長く気づきませんでした。

キー名の書き間違いが黙って無視されるという性質は、非推奨とは別の話として以前から残っています。そちらは settings.json のキー名を1文字間違えても、Claude Code は何も言わずに無視します に書き残しました。あわせて読んでいただくと、いま自分の設定のどこが検証されていないのかが見えやすくなると思います。

壊れた設定は、もう起動そのものを止めます

最後に、移行作業そのものの足元に関わる変更をひとつ書き添えます。9月4日の版から、managed-settings.json・その drop-in・デバイス管理の plist・Windows のポリシーレジストリ値のいずれかがパースできない場合、Claude Code は起動を拒否し、原因となった場所の名前を示すようになりました。

以前は、読めない設定を無視してそのまま起動しておりました。挙動としては親切でしたが、設定が効いていないことに気づけないという問題を抱えていたわけです。いまは止まります。

移行の途中で末尾にカンマを1つ残しただけでも、その端末のセッションは始まらなくなります。先ほどのスクリプトも、パースに失敗した時点で [FATAL] を出して打ち切る形にしてあるのは、この挙動に合わせたためです。

[FATAL] broken.json: JSON として読めません -> Expecting property name enclosed in double quotes: line 1 column 26 (char 25)
 
合計 1 件

配布している設定を書き換えるときは、端末へ配る前にこの一段を必ず通すようにしています。手元の1台で気づける失敗と、配ってから気づく失敗とでは、戻すための手間がまるで違うからです。

手を動かす順番

まずは自分の managed-settings.json を1度だけスクリプトに通して、要修正の件数を見てください。0 件であれば、10月7日について考えることはもうありません。1件でも出たなら、その行が期限の後にどの既定値へ落ちるのかを確かめるところから始めていただければと思います。

無人で回す検査を「落ちる形」にしておく話は、毒入りサンプルを置くまで、無人の検査は一度も落ちていませんでした で、実際に検体を仕込んで確かめたところまで書いております。設定の棚卸しを仕組みにしたい方の参考になれば幸いです。

期限のある変更を前にすると、つい「あとでまとめて」と思ってしまいます。私も今回そうでした。落ち着いて読めば最初から書いてあったことに気づいたのは、対応表を三度なぞったあとでした。同じところで足を止めている方がいらっしゃるかもしれません。読んでくださってありがとうございました。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

⟐ Claude Code2026-09-04
~/.claude.json の巻き戻しは v2.1.259 で直りました。消えた設定は自分で戻します
同時に走らせたセッションが ~/.claude.json を互いに巻き戻す不具合が v2.1.259 で修正されました。消えた信頼設定と MCP を洗い出して戻すまでを、キー集合の差分を取る小さなスクリプトとあわせて書き残します。
⟐ Claude Code2026-08-21
ANTHROPIC_MODEL を消さないまま ANTHROPIC_DEFAULT_MODEL を足しても、始まるモデルは変わりません
v2.1.236 で追加された ANTHROPIC_DEFAULT_MODEL は ANTHROPIC_MODEL の後継ではありません。二つの効き方の違いと、モデル指定の散らばりを一覧する Python スクリプトをまとめました。
⟐ Claude Code2026-10-13
「cd して git add して commit」の承認が毎回出る — 設定の抜けではなく、仕様だと分かるまでにたどった道
cd /path && git add && git commit のような複合コマンドで、許可ルールを入れても承認が繰り返し出る。公式の権限ドキュメントと GitHub の報告を突き合わせると、cd と git の組み合わせは設計上プロンプトが出ると分かりました。原因の切り分け順と、手数を減らす4つの直し方を並べます。