火曜の朝、iMac の前でコーヒーを淹れながら、手元の Claude Code がどのチャンネルを向いているのかを確かめていました。更新の通知は静かに出ているのに、自分がいま何版遅れているのか、答えられなかったからです。
公式の Setup ページには、stable は「typically about one week old」で、重大な不具合のあった版を飛ばすと書かれています。一方で latest は既定のチャンネルで、出た版をすぐ受け取ります。「約 1 週間遅れ」という説明は分かりやすいのですが、自分の環境で何版ぶん遅れているのかまでは書かれていません。
そこで今日の時点で、レジストリの実値を引いてみました。
今日のレジストリの値
npm のレジストリから dist-tags を引くと、今日(2026 年 11 月 10 日)の実行結果は次のとおりでした。
| タグ | 版 |
|---|---|
| stable | 2.1.311 |
| latest | 2.1.322 |
最後の数字だけを見ると、322 − 311 で 11 版離れているように見えます。私も最初はそう読みました。
ところが公開済みの版を実際に数えると、stable より新しい版は 9 件でした。11 ではありません。番号の飛びがあるので、引き算は多めに出てしまうのです。
この数字は日によって動きます。ここに書いた値は、あくまで今日の記録として読んでください。
数えるスクリプト
次の Python は、レジストリから公開済みの版を取り、stable より新しく latest 以下の版だけを数えます。標準ライブラリだけで動き、事前準備はいりません。
#!/usr/bin/env python3
"""npm の stable と latest のあいだに、何版あるかを数える。"""
import json, urllib.request
URL = "https://registry.npmjs.org/@anthropic-ai/claude-code"
req = urllib.request.Request(URL, headers={"Accept": "application/vnd.npm.install-v1+json"})
with urllib.request.urlopen(req, timeout=20) as r:
meta = json.load(r)
def key(v):
# 2.1.319 のような素直な版だけを比べる(-beta 等は除く)
core = v.split("-")[0]
return tuple(int(x) for x in core.split("."))
plain = sorted((v for v in meta["versions"] if "-" not in v), key=key)
tags = meta["dist-tags"]
stable, latest = tags["stable"], tags["latest"]
gap = [v for v in plain if key(stable) < key(v) <= key(latest)]
print(f"stable={stable} latest={latest}")
print(f"stable より新しく公開された版: {len(gap)} 件")
print("先頭と末尾:", gap[:1], gap[-1:])実行すると、今日は次のように出ました。
stable=2.1.311 latest=2.1.322
stable より新しく公開された版: 9 件
先頭と末尾: ['2.1.312'] ['2.1.322']書き方の理由を 2 つだけ添えておきます。
- 文字列ではなくタプルで比べています。 文字列のまま並べると "2.1.99" が "2.1.322" より新しい扱いになってしまいます。
- ハイフン付きの版は除いています。 プレリリースを混ぜると、「stable から先に進んだ版」の意味が曖昧になるからです。
手元の版との突き合わせ
レジストリの差が分かっても、肝心なのは手元の版です。2 行で確かめられます。
claude --version
npm view @anthropic-ai/claude-code dist-tags --json手元の版が stable のタグと一致していれば、チャンネルどおりに動いています。stable より古ければ、更新が止まっている可能性があります。公式の Setup ページでは、更新の結果を claude doctor で確かめられると案内されています。
チャンネルを切り替えるときの注意
チャンネルは settings.json の autoUpdatesChannel で決まります。既定は "latest" で、"stable" にすると、約 1 週間遅れの版を受け取る側に回ります。
{
"autoUpdatesChannel": "stable",
"minimumVersion": "2.1.100"
}latest から stable へ切り替えるとき、すでに stable より新しい版を使っていると、手元の版が下がる場面があります。公式の説明では、/config から切り替えると「今の版に留まるか、下げるか」を尋ねられ、留まる側を選ぶと minimumVersion がその版に設定されます。latest へ戻せば解除されます。
Homebrew の場合は設定ではなく、cask の名前で決まります。claude-code が stable、claude-code@latest が latest です。ここを取り違えていた、という話をあとで聞くことが多いので、私は最初に cask 名を確かめるようにしています。
数字の読み方(私の場合)
数えた件数を、私は次のように受け止めています。あくまで個人開発の環境での目安で、正解ではありません。
| 件数 | 私の受け止め方 |
|---|---|
| 0〜3 件 | ほぼ追いついています。何もしません。 |
| 4〜10 件 | 今日のような範囲です。手元の作業が一段落した日に更新します。 |
| 11 件以上 | 更新が止まっていないかを疑い、claude doctor を先に見ます。 |
件数そのものより、前回の月初と比べて増えているかどうかを見るほうが、判断はぶれません。
私の線引き
個人でアプリを作っていると、「新しい機能がすぐ欲しい日」と「今週は何も壊したくない日」が交互に来ます。以前の私は、その日の気分でチャンネルを変えていました。
今回数えてみて気づいたのは、差の大きさを知らないまま、遅れを怖がっていたということです。9 版という具体的な数字が出ると、様子を見てもよい日か、すぐ追いつくべき日かを、落ち着いて決められます。
遅れは感覚で恐れず、月初に一度、数えてから決めます。 この線引きを、まずは自分の月初のメモに 1 行足しました。
次にやること
今日はスクリプトを保存して、実行結果を 1 行だけ手元のメモに残していただければと思います。数字が溜まると、自分の環境で stable がどれくらい遅れるのかが、感覚ではなく記録で見えてきます。