Claude Codeで`claude update`が「成功」と出るのにバージョンが変わらない——反映されないアップデートの正体

Claude Codeで`claude update`が「成功」と出るのにバージョンが変わらない——反映されないアップデートの正体

Claude Codeのclaude updateが成功と表示されるのにバージョンが変わらない・アップデートできない原因を、複数インストールの競合・npm権限エラー・自動更新の設定に分けて解説。診断コマンドと対処法つき。

エンジニアのゆとです。

claude updateを叩くとSuccessfully updated from 1.2.34 to version 1.2.40みたいに成功メッセージが出る。なのにclaude -vを打つと古いバージョンのまま。新機能が使えると思ってたのに反映されてなくて、「え、さっき更新したよね?」ってなる——このパターン、実は結構よくある。

自分も一度、クライアントとのデモの直前に「新しいSkills機能を見せます」って言った後にこれをやらかして、手元だけ焦った経験がある。幸い開始前に気づけたけど、あれがデモ中だったら普通に事故ってた。

結論 — 原因は3パターンのどれか

claude updateが「成功」と言ってるのに反映されない場合、原因は大体この3つのどれかに収束する。

症状主な原因
claude updateは成功するがclaude -vが古いまま複数のインストール方式が共存していて、更新と実行で別の実体を見ている
claude updateが権限エラーで止まる、またはサイレントに失敗するnpmグローバルディレクトリの書き込み権限がない
そもそも新しい機能・修正が全く反映されない気配がない自動更新が無効化されている、またはバージョンが固定(pin)されている

まずはこの3つのどれに当てはまるか、次の診断コマンドで切り分ける。

code.claude.com
Troubleshoot installation and login - Claude Code Docs command not found・PATH・権限・複数インストールの競合など、インストール/更新周りのエラーを症状別に整理した公式ページ。

まず現状を診断する

3つのコマンドで自分の状態を把握する。

claude -v
claude doctor
which -a claude

claude doctorは自動診断レポートを出してくれるので、まずこれを走らせるのが早い。which -a claude(Windowsはwhere.exe claude)はPATH上に存在するclaudeバイナリを全部列挙してくれるコマンドで、次の「複数インストールの競合」を疑うときに一番役に立つ。

原因1 — 複数のインストール方式が共存している

これが一番多い原因。claudeバイナリが来る可能性のある場所は主に3つある。

  • ~/.local/bin/claude — ネイティブインストーラー(現在の推奨方式)
  • ~/.claude/local/ — 旧バージョンが作っていたレガシーなローカルnpmインストール
  • npm install -gによるグローバルインストール

claude updateを実行したとき、更新されるのはコマンドを実行した時点でPATH上の先頭に来ているclaudeだ。ところが手元のシェルには、更新されていない別のインストールが残ったままPATHの奥のほうに隠れている——というケースがよく起きる。3つとも個別に確認する。

ls -la ~/.local/bin/claude
ls -la ~/.claude/local/
npm -g ls @anthropic-ai/claude-code 2>/dev/null

No such file or directoryと出るのはエラーではなく、単にそこには何もないという意味。ネイティブインストールなら~/.local/share/claude/versions/へのシンボリックリンクになっているはずで、もしそこが自作のスクリプトやシンボリックリンクになっていたら、それは自動更新が触らないカスタムランチャーの可能性がある。

複数見つかった場合は、公式が推奨するネイティブインストール(~/.local/bin/claude)を1つだけ残して、他を削除する。

# npmのグローバルインストールを削除
npm uninstall -g @anthropic-ai/claude-code

# レガシーなローカルnpmインストールを削除
rm -rf ~/.claude/local

# Homebrewでインストールした場合(claude-code@latestを入れていればそちらを指定)
brew uninstall --cask claude-code

Windowsの場合はPowerShellでwhere.exe claudeを実行してPATH上のバイナリを列挙し、WinGetでインストールしていればwinget uninstall Anthropic.ClaudeCodeで削除できる。

バージョン管理ツール経由だと特に起きやすい

Volta・nvm・fnmのようなNode.jsバージョン管理ツールを使っている環境だと、この競合がさらに起きやすい。実際にVoltaを使っていた環境で、claude updateが「1.0.27から1.0.29に更新しました」と表示するのにclaude -vは1.0.27のまま、という報告がある。原因はVoltaの管理下にインストールされたclaudeが、更新後も別の場所を参照し続けていたことだった。この場合、Claude Code内で/migrate-installerコマンドを実行してネイティブインストールの場所(~/.claude/local)に移行し、Volta管理下の古いインストールを削除、PATHで新しい場所を優先させることで解決している。2025年11月以降はネイティブインストールが公式推奨になっているので、これから設定する場合は最初からネイティブインストーラーを使うのが一番安全だ。

curl -fsSL https://claude.ai/install.sh | bash
Claude Codeで「command not found: claude」——インストールは成功してるのに動かない理由
Claude Codeで「command not found: claude」——インストールは成功してるのに動かない理由Claude Codeをインストールしたのに「command not found: claude」「is not recognized」と出る原因をPATH・複数インストールの競合・VS Code拡張機能の落とし穴に分けて解説。macOS/Linux/Windows別のコマンド付き。読む →

原因2 — npmグローバルの権限エラーでサイレントに失敗している

npm経由でインストールしている場合、claude updateがnpmのグローバルディレクトリへの書き込み権限エラーで止まっていることがある。エラーが分かりやすく出ればまだいいが、環境によっては警告レベルの出力に埋もれてしまい、「更新は終わったはず」と勘違いしたまま古いバージョンを使い続けることになる。

npm特有の権限エラーに当たった場合、公式ドキュメントが勧めているのは権限を頑張って直すことではなく、ネイティブインストーラーへの切り替えだ。

curl -fsSL https://claude.ai/install.sh | bash

ネイティブインストーラーはユーザーのホームディレクトリ配下(~/.local/bin)にインストールするため、npmのグローバルディレクトリのようにsudoや権限変更が必要になる場面がそもそも少ない。npm運用でこの手のトラブルが繰り返し起きるなら、乗り換えたほうが早い。

原因3 — 自動更新が無効化されている、またはバージョンが固定されている

これは設定に気づいていないだけのケースが多い。settings.jsonには自動更新まわりの設定項目がいくつかあり、過去の自分(あるいはチームの誰か)が設定したまま忘れられていることがある。

設定効果
autoUpdatesChannel"latest"(最新を即反映)か"stable"(約1週間遅れの安定版)かを選ぶ
minimumVersionこのバージョンより下にはバックグラウンド更新もclaude updateも落とさない、という床(フロア)を作る
環境変数DISABLE_AUTOUPDATER=1バックグラウンドでの自動更新チェックだけを止める。claude updateclaude installは引き続き動く
{
  "autoUpdatesChannel": "stable",
  "minimumVersion": "2.1.100"
}

特に見落としやすいのがDISABLE_AUTOUPDATERだ。これを設定してもclaude updateコマンド自体は動くので、「明示的にアップデートを実行すれば最新になる」と思い込んでいると、バックグラウンドでは全く更新されていないことに気づかない。チーム開発でCLAUDE.mdやsettings.jsonを共有している場合、誰かが意図的に設定したminimumVersionより新しいバージョンが降ってこないのも仕様通りの挙動なので、まずは自分のsettings.jsonを確認するのが早い。

原因4 — claude update自体がハングしている

もう1つ、地味だが厄介なパターンがある。claude updateclaude doctorが、シェルの設定ファイル(~/.zshrc~/.bashrc~/.config/fish/config.fish、macOSなら~/.bash_profileなど)に古いclaudeのエイリアスが残っていないかスキャンする処理を持っているんだけど、v2.1.214より前のバージョンでは、これらのパスのどれかが「ファイルではなくディレクトリ」になっていると、スキャンがそこで止まってハングするというバグがあった。claude doctorは無出力のまま固まり、claude updateChecking for updatesと表示した直後に固まる。

これに心当たりがある場合、該当パスがディレクトリになっていないか確認する。

ls -ld ~/.zshrc ~/.bashrc ~/.bash_profile ~/.bash_login ~/.profile ~/.config/fish/config.fish

出力の先頭がdになっている行が、ディレクトリ化してしまっているパスだ。No such file or directoryはそこに何もないだけなので原因ではない。該当ディレクトリを退避するか、v2.1.214以降にアップデートすれば直る。ただしこのバグの影響下ではclaude update自体がハングするので、アップデートはインストールスクリプトを再実行する形で行う必要がある。

curl -fsSL https://claude.ai/install.sh | bash

Windows特有の罠 — Claude Desktopがclaudeコマンドを乗っ取る

Windowsで地味にハマるのがこれ。古いバージョンのClaude Desktopをインストールしていると、WindowsAppsディレクトリにClaude.exeが登録され、それがPATH上でClaude Code CLIより優先されることがある。この状態でclaudeと打つと、CLIではなくデスクトップアプリが起動する。アップデートが反映されないというより「そもそも自分が更新しているのはCLIじゃない」というオチで、症状だけ見るとアップデート未反映に見えてしまう。Claude Desktopを最新版に更新すれば直る。

フリーランス視点 — 本番の直前にアップデートしない

ここまで原因を並べてきたけど、実務的にはもう1段階手前の話として「クライアントとの作業直前にアップデートしない」というルールを自分の中に持っておくほうが効く。autoUpdatesChannel"stable"にしておけば最新から約1週間遅れになるので、リリース直後の不具合を踏みにくくなる。逆に新機能を検証する用の個人プロジェクトでは"latest"のままにしておく、というふうに環境ごとにチャンネルを分けるのが自分のやり方だ。

minimumVersionをチームのsettings.jsonに設定しておくのも地味に効く。誰かの手元だけ古いバージョンのまま固まっていて、Hooksの挙動がチームの他のメンバーと違う、みたいな事故を防げる。

Claude Code Hooks 実践ガイド 2026 — CI/CD連携からコード品質ゲートまで
Claude Code Hooks 実践ガイド 2026 — CI/CD連携からコード品質ゲートまでClaude Code Hooksの設定方法から実践的なユースケースまで。PreToolUse/PostToolUseフック、Agent Teamsとの連携、Lintチェック自動化、セキュリティゲートの実装例を網羅。読む →

FAQ

claude updateを何度実行しても変わらない

再実行だけでは直らないことが多い。この記事の「複数インストールの競合」を先に疑ってほしい。which -a claude(Windowsはwhere.exe claude)で複数のバイナリがヒットする場合、更新しているものと実行しているものが別物になっている。

npmとネイティブインストーラー、結局どっちを使うべき?

2025年11月以降、公式はネイティブインストーラーを推奨している。npm運用は権限まわりのトラブルが起きやすく、社内npmミラーを使っている場合はプラットフォームごとのバイナリパッケージが揃っていないとnative binary not installedエラーにもなりやすい。特別な理由がなければネイティブインストーラーに寄せたほうがトラブルが少ない。

アップデート後に設定やHooksがおかしくなった

アップデート自体は成功していて、Hooksが発火しない・設定が読み込まれないという場合は原因が別にある。こちらの記事にHooksの実践的な設定パターンをまとめてある。

Claude Code Hooks 実践ガイド 2026 — CI/CD連携からコード品質ゲートまで
Claude Code Hooks 実践ガイド 2026 — CI/CD連携からコード品質ゲートまでClaude Code Hooksの設定方法から実践的なユースケースまで。PreToolUse/PostToolUseフック、Agent Teamsとの連携、Lintチェック自動化、セキュリティゲートの実装例を網羅。読む →

まとめ

claude updateが成功と表示されるのにバージョンが変わらない場合、原因は「複数インストールの競合」「npm権限エラー」「自動更新の設定・バージョン固定」のどれかにほぼ収束する。まずclaude doctorwhich -a claudeで現状を診断し、複数のインストールが見つかったらネイティブインストーラーに一本化する——これだけで大半のケースは解決する。

github.com
anthropics/claude-code Issues 同じ症状の報告を検索したり、再現しない不具合を報告するならここ。
← 記事一覧に戻る