Claude Code アップデートの手順そのものは claude update の1行で終わります。実際に人が詰まるのはその先で、「更新したのにバージョン番号が変わらない」「ディスクの空きが減り続ける」といった症状です。本記事では v2.1.241 の環境を実際に調べ、PATH上に154リリース分ずれた2つの claude が並んでいたこと、使われていない旧バイナリが900MB残っていたことを実測しました。原因が分かれば対処は数分で終わります。
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 ビルドを導入する。target に stable / latest / 具体的なバージョン番号を指定できる。--force で既存があっても上書き |
claude doctor |
インストールの健全性を確認する。設定ファイルも読む |
claude install にバージョン番号を直接渡せるのは覚えておく価値があります。特定の版で不具合が出たときに戻せるからです。stable と latest はチャネル名で、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: |
stable か latest か |
Last update attempt: |
直近の更新が成功したか、その結果どの版になったか、いつか |
Auto-updates: disabled (set by env: DISABLE_AUTOUPDATER) の括弧内が重要です。 「無効になっている」だけでなく「何によって無効にされたか」まで出るので、設定ファイルを探し回る必要がありません。
そして最後の2ブロック——「Multiple installations found」と警告が、次節の本題です。
「アップデートしたのに変わらない」の正体——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 アップデート後に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つの「バージョン」が観測できました。バージョン番号の話をするときは、どのレイヤーの番号なのかを先に揃えないと会話が噛み合いません。
で何本出るか"} 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 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 claude と readlink の2つで確定します。
参照ソース
- Claude Code 公式ドキュメント — Setup(導入方式の一次情報。2026-08-30 確認)
- @anthropic-ai/claude-code — npm(バージョンと配布物。2026-08-30 に
npm view/npm packで実測) - Claude Code 公式ドキュメント — Settings(設定キーの所在。2026-08-30 確認)
- 本記事の実測環境: Claude Code v2.1.241(native)/ npm 版 2.1.87 が同居 / macOS (Darwin 23.5.0, arm64) / Node.js v22.13.1