Claude Code アップデートの手順そのものは claude update の1行で終わります。実際に人が詰まるのはその先で、「更新したのにバージョン番号が変わらない」「ディスクの空きが減り続ける」といった症状です。本記事では v2.1.241 の環境を実際に調べ、PATH上に154リリース分ずれた2つの claude が並んでいたこと使われていない旧バイナリが900MB残っていたことを実測しました。原因が分かれば対処は数分で終わります。

Claude Codeのバージョンが4つ同時に存在する状態を示す図。PATH上のnpm版2.1.87、実行中のnative版2.1.241、versionsディレクトリに眠る2.1.243、npmレジストリ最新の2.1.251が並び、旧版が900MB残っていることを示す。
1台のマシンで観測した「Claude Codeのバージョン」。どれを指しているかで話が噛み合わなくなる。

30秒でわかる Claude Code アップデート

・コマンドは claude update。版を指定するなら claude install stable|latest|<version>
状態確認は claude doctor。導入方式・チャネル・自動更新の可否・直近の更新結果まで1画面で出る
「更新しても変わらない」の主因はPATH上の二重インストール。検証環境では native 2.1.241 と npm 2.1.87 が同居していた
旧バイナリは消えない~/.local/share/claude/versions/ に3世代・900MBが残存していた
・自動更新は環境変数 DISABLE_AUTOUPDATER で止まる。チャネルは stable / latest

Claude Code の全体像と初期セットアップは、Claude Code|2026年版・インストールからCLAUDE.md・Hooks・本番運用までの実装手引きにまとめてあります。本記事は更新まわりだけを扱います。

Claude Code アップデートの3コマンドと、それぞれの役割

まずコマンドを整理します。claude --help に出るのは次の3つです。

コマンド 役割
claude update(別名 claude upgrade 更新の有無を確認し、あれば導入する
claude install [target] native ビルドを導入する。targetstable / latest / 具体的なバージョン番号を指定できる。--force で既存があっても上書き
claude doctor インストールの健全性を確認する。設定ファイルも読む

claude install にバージョン番号を直接渡せるのは覚えておく価値があります。特定の版で不具合が出たときに戻せるからです。stablelatest はチャネル名で、claude doctor の出力にも「Auto-update channel」として現れます。

# 更新の確認と導入
claude update

# 版を指定して導入(stable / latest / 2.1.241 のような番号)
claude install stable

claude doctor の出力を1行ずつ読む

更新まわりの調査は、まず claude doctor から始めるのが最短です。実際の出力(環境依存の行は一部省略)を見ながら、何が読み取れるかを確認します。

claude doctor
Claude Code doctor

Running: native (2.1.241)
Commit: c87e2742fc9a
Platform: darwin-arm64
Path: /Users/<user>/.local/share/claude/versions/2.1.241
Config install method: native
Search: OK (bundled)
Auto-updates: disabled (set by env: DISABLE_AUTOUPDATER)
Auto-update channel: latest
Last update attempt: success → 2.1.241 (2026-08-25)

Multiple installations found
- npm-global at /Users/<user>/.nodebrew/node/v22.13.1/bin/claude
- native at /Users/<user>/.local/bin/claude

1 warning found
- Leftover npm global installation at /Users/<user>/.nodebrew/node/v22.13.1/bin/claude
  Fix: Run: npm -g uninstall @anthropic-ai/claude-code

判断に効く行は5つです。

読み取れること
Running: native (2.1.241) いま動いている実体の導入方式とバージョン
Path: その実体の絶対パス。シンボリックリンクの解決先
Auto-updates: 自動更新の可否と、無効ならその理由(この例では環境変数)
Auto-update channel: stablelatest
Last update attempt: 直近の更新が成功したか、その結果どの版になったか、いつか

Auto-updates: disabled (set by env: DISABLE_AUTOUPDATER) の括弧内が重要です。 「無効になっている」だけでなく「何によって無効にされたか」まで出るので、設定ファイルを探し回る必要がありません。

そして最後の2ブロック——「Multiple installations found」と警告が、次節の本題です。

claude doctorの出力から読み取れる5項目を整理した図。実行中の導入方式とバージョン、実体のパス、自動更新の可否と無効化の理由、更新チャネル、直近の更新結果が1画面で確認できることを示す。
更新の調査は doctor から始める。「なぜ無効か」まで書いてあるのが効く。

「アップデートしたのに変わらない」の正体——PATH上の二重インストール

検証環境で which -a claude を実行すると、2つ返ってきました

which -a claude
/Users/<user>/.local/bin/claude
/Users/<user>/.nodebrew/current/bin/claude

それぞれのバージョンを確認すると、差は劇的でした。

場所 導入方式 バージョン
~/.local/bin/claude native(先勝ち) 2.1.241
~/.nodebrew/current/bin/claude npm グローバル 2.1.87

154リリース分の開きです。いまはPATHの順序で native 側が勝っているので実害は出ていませんが、PATHの順序が変わった瞬間に2.1.87が起動します。シェルの設定を触ったとき、別のNodeバージョンに切り替えたとき、あるいはCI環境で同じ手順を再現したときに、静かに数か月前のCLIが動くことになります。

claude update を実行したのにバージョンが変わらない」という症状の多くはこれです。更新されたのは片方だけで、起動しているのはもう片方という状態になります。

claude doctor はこれを検出し、対処コマンドまで提示します。

Fix: Run: npm -g uninstall @anthropic-ai/claude-code

削除する前に、どちらを残すかを決めてください。

npm 側を消すのは「native 版を正とする」場合の手順です。逆にチーム全体を npm 管理で揃えたい場合は、native 側(~/.local/bin/claude~/.local/share/claude/)を片付けることになります。どちらでも動きますが、片方に寄せないと同じ問題が再発します。

なお claude doctor が出す Fix: はあくまで提案です。上の npm -g uninstall は本記事の検証環境では実行していません(実行すると環境が変わるため)。実行前に which -a claude で現状を確認してください。

旧バージョンは消えない——検証環境では900MBが残っていた

もう1つの実測です。native 版はバージョンごとに実行ファイルを保存します。

du -sh ~/.local/share/claude/versions/*
du -sh ~/.local/share/claude/versions/
245M    /Users/<user>/.local/share/claude/versions/2.1.220
310M    /Users/<user>/.local/share/claude/versions/2.1.241
345M    /Users/<user>/.local/share/claude/versions/2.1.243
900M    /Users/<user>/.local/share/claude/versions/

3世代で900MBでした。1つあたり245〜345MBあり、しかも世代が進むほど大きくなっています(2.1.220 の245MBに対し 2.1.243 は345MB、約1.4倍)。更新を重ねるほど蓄積するので、数か月放置すると数GB規模になります。

さらに注目したいのが、2.1.243 が置かれているのに動いているのは 2.1.241 だという点です。

readlink ~/.local/bin/claude
/Users/<user>/.local/share/claude/versions/2.1.241

シンボリックリンクが指しているのが「いま動く版」で、ディレクトリにあるバイナリは単に置かれているだけです。「新しいバージョンをダウンロードした形跡があるのに claude --version が古い」という状況は、このリンクが更新されていないことで説明できます。

掃除するなら、リンク先だけは残す。

readlink ~/.local/bin/claude で現在のリンク先を確認し、そこに含まれないディレクトリは削除できます。ただし直前の版を1つ残しておくと、更新後に問題が出たときに claude install <前の版> を待たずに戻せます。

本記事では削除は実行していません(検証環境を壊さないため)。容量の実測値だけを示しています。

Claude Codeのversionsディレクトリの構造図。2.1.220が245MB、2.1.241が310MB、2.1.243が345MBで合計900MB残り、シンボリックリンクが指す2.1.241だけが実際に動いていることを示す。
置いてあるバイナリの数と、動く版は別。決めているのはシンボリックリンク1本。

Claude Code アップデート後にnpm版が残っていないか——実体は27KBのラッパー

「npm で入れた Claude Code」がどういう構造なのかも確かめました。パッケージをダウンロードして中身を数えます。

npm pack @anthropic-ai/claude-code@latest
tar tzf anthropic-ai-claude-code-*.tgz

実測時点の最新は 2.1.251、tarball は 27KB、含まれるファイルは 7個だけでした。

package/cli-wrapper.cjs
package/install.cjs
package/bin/claude.exe
package/package.json
package/LICENSE.md
package/README.md
package/sdk-tools.d.ts

CLI本体はこの中に入っていません。 install.cjs を読むと、プラットフォーム(process.platform と CPU アーキテクチャ)を判定し、対応するネイティブバイナリを optionalDependencies から解決する構造でした。ソース冒頭のコメントもそう書いています。

この構造から分かることが2つあります。

1つ目。npm でインストールしても、実際に走るのは別パッケージのネイティブバイナリです。 したがって「npm 版と native 版でCLIの中身が違う」わけではなく、配り方が違うだけです。

2つ目。パッケージ内を grep してもCLIの機能は判定できません。 「この環境変数はまだ有効か」といった確認を npm パッケージの中身で行おうとしても、本体コードがそこに無いため結論を出せません。確認は実バイナリに対して行う必要があります。

なお、npm レジストリの最新(2.1.251)・手元の native 実行版(2.1.241)・versions/ に眠る版(2.1.243)・PATH上のnpm版(2.1.87)と、同じマシンで4つの「バージョン」が観測できました。バージョン番号の話をするときは、どのレイヤーの番号なのかを先に揃えないと会話が噛み合いません。

flowchart TD A["claude --version が古い"] --> B{"which -a claude
で何本出るか"} B -->|"2本以上"| C["PATH上の二重インストール
doctor の Fix に従って片方へ寄せる"] B -->|"1本"| D{"readlink ~/.local/bin/claude
のリンク先は?"} D -->|"古い版を指している"| E["claude install latest
でリンクを張り直す"] D -->|"最新を指している"| F{"claude doctor の
Auto-updates は?"} F -->|"disabled (set by env: ...)"| G["環境変数を外す
DISABLE_AUTOUPDATER"] F -->|"enabled"| H["Last update attempt の
結果と日付を確認"]

Claude Code アップデートで設定は消えるのか——置き場所が分かれている

更新のたびに気になるのが「CLAUDE.md や履歴は残るのか」です。結論から言うと別のディレクトリなので消えません。実際に両方を測りました。

du -sh ~/.local/share/claude   # 実行ファイル
du -sh ~/.claude               # 設定・履歴・プラグイン
ディレクトリ 中身 実測サイズ
~/.local/share/claude/ バージョンごとの実行ファイルだけ 900MB
~/.claude/ 設定・セッション・履歴・プラグイン・スキル 1.2GB

~/.claude/ の内訳を見ると、更新とは無関係に育つものが大半でした。

du -sh ~/.claude/* | sort -h
152K    file-history
196K    sessions
552K    shell-snapshots
580K    cache
1.6M    backups
 35M    skills
 65M    plugins
1.1G    projects

projects が1.1GBで全体の9割を占めます。これは会話ログの蓄積で、バイナリの更新では一切触られません。逆に言えば、ディスクを空けたいときに効くのは versions/ の掃除(900MB)より projects/ の整理(1.1GB)です。この2つを混同すると、旧バイナリを消しても体感が変わらないことになります。

世代ごとのバイナリは大きくなり続けている。

実測した3世代の推移は 245MB →(+65MB/1.27倍)→ 310MB →(+35MB/1.11倍)→ 345MB でした。23リリースで100MB増えています。 現在のペースが続くなら、旧版を放置したまま10世代重ねれば3GBを超える計算です。

~/.claude/ 側は更新で増えませんが、versions/ 側は更新のたびに1世代ぶん積み上がります。定期的に見るべきはこちらです。

Claude Codeのディスク使用の内訳図。実行ファイルは~/.local/share/claudeに900MB、設定と履歴は~/.claudeに1.2GBあり、そのうちprojectsが1.1GBを占めることを示す。
更新で増えるのは左だけ。容量を空けたいなら右の projects を見るほうが効く。

自動更新の制御と、更新チャネル

最後に自動更新まわりの設定を整理します。実行バイナリの文字列と claude doctor の出力から確認できたものです。

対象 名前 効果
環境変数 DISABLE_AUTOUPDATER 自動更新を無効化する。doctor が「set by env」として理由を表示する
設定キー autoUpdates 設定ファイル側で自動更新の可否を持つ
設定キー installMethod 導入方式(doctor の Config install method に対応)
チャネル stable / latest doctor の Auto-update channel に現在値が出る

チャネルが latest の環境で「勝手に上がると困る」場合は、環境変数で止めるより stable に寄せるほうが素直です。 自動更新そのものを切ると、セキュリティ修正も自動では入らなくなります。

特定バージョンの変更点そのものを追いたい場合は、リリース単位の解説記事のほうが早いことがあります。たとえばClaude Code v2.1.108解説|/recap・Skill経由スラコマ・キャッシュ1時間TTLのように、版ごとに何が入ったかを個別に扱った記事を参照してください。そもそも Claude Code が何をするツールなのかから確認したい場合はClaude Codeとは?できること・動く4環境・料金とライセンスを公式情報で整理が入口になります。

まとめ

・更新は claude update、版指定は claude install stable|latest|<version>、状態確認は claude doctor
doctor は「なぜ自動更新が無効か」まで出すdisabled (set by env: DISABLE_AUTOUPDATER)
「更新しても変わらない」の主因はPATH上の二重インストール。検証環境では native 2.1.241 と npm 2.1.87 が同居し、154リリース分ずれていた
旧バイナリは自動削除されない。3世代で 900MB(245〜345MB/世代)が残っていた
動く版を決めているのはシンボリックリンク1本readlink ~/.local/bin/claude で確認できる
npm 版は27KB・7ファイルのラッパーで、本体は optionalDependencies のネイティブバイナリ
・自動更新は DISABLE_AUTOUPDATER で停止。チャネルは stable / latest

アップデート自体は1コマンドです。詰まるのは常に「どの版が動いているか」で、それは which -a claudereadlink の2つで確定します。

参照ソース