火曜日, 9月 2, 2025
火曜日, 9月 2, 2025
- Advertisment -
ホームニューステックニュースClaude Codeをネイティブインストールしたらめっちゃ面倒くさかったのでnpmに戻す方法

Claude Codeをネイティブインストールしたらめっちゃ面倒くさかったのでnpmに戻す方法



最近、Claude Codeがアホになったという話がめっちゃ話題です。
私もそう感じていたので、Claude Codeをダウングレードすることにしました。

TL;DR

  • 筆者は、知らない間にClaude CodeをNative Installで使用していた
  • Claude Codeには claude install という、特定バージョンをインストールするコマンドが用意されていることに気づかなかった
  • 適当にnpmで特定バージョンをインストールしたところ、Claudeが競合してしまった
  • Native InstallされているClaudeを削除しようとしたら、削除方法がどこにも載ってなく、めっちゃ大変だった

Native Install

Claude Codeには、npm経由でインストールする方法と、Native Installを行う方法があります。

基本的には皆さん初回インストール時にはnpmで入れていると思うのですが、何らかの理由でAuto Updatorが動作しない(権限エラーなど)場合があり、そういった場合にはClaude Code上で /migrate-installer コマンドを実行することで、勝手にNative Installに変えてくれて、権限エラーなどが回避できるようになっています。

現在インストールされているのがどのような方法なのかは、/doctorコマンドを実行するか

$ claude doctor

 Diagnostics
 └ Currently running: native (1.0.98)
 └ Path: /home/minato86/.local/bin/claude
 └ Invoked: /home/minato86/.local/share/claude/versions/1.0.98
 └ Config install method: native
 └ Auto-updates enabled: disabled
 └ Search: OK (bundled)

のような感じでチェックできます。

Currently runningがnativeになっている場合は、Native Installを利用していることになります。

ダウングレードしたい

Claude Codeをダウングレードしたい場合

claude config set -g autoUpdates false

を実行し、Configで自動アップデートを停止した上で、
~/.claude/settings.json

{
  "model": "opus",
  "env": {
    "DISABLE_AUTOUPDATER": "1"
  }
}

を追記し、env上でも自動アップデートを停止します。(なんで二重で管理されてるのかはわからないけど)
そして

などのバージョンを入力すればダウングレード可能です。

しかしながら、私はそれに気づかず、npmでダウングレードをしようとしたところclaudeが競合してしまいました。

競合するとどうなる?

Claudeは、/home/user/.local/bin を自動的に .bashrc などの最下部に追記します。
よって、Claude CodeのNative Installが優先されます(多くの場合npmのPATHはもっと前に書いてあると思うので)

この場合、claude doctor を実行すると以下のようになります

 $ claude doctor

 Diagnostics
 └ Currently running: native (1.0.98)
 └ Path: /home/minato86/.local/bin/claude
 └ Invoked: /home/minato86/.local/share/claude/versions/1.0.98
 └ Config install method: native
 └ Auto-updates enabled: disabled
 └ Search: OK (bundled)
 Warning: Multiple installations found
 └ npm-global at /home/minato86/.nvm/versions/node/v22.17.0/bin/claude
 └ native at /home/minato86/.local/bin/claude

Warning: Multiple installations found

と表示され、競合していることがわかります。
こうなってしまった場合の解決はまぁ簡単で、npmでインストールしたものを削除すればいいです。

結局どっちを選ぶべきなの?

問題は、Native InstallしたClaude Codeを削除する方法がどこにも載ってないし、コマンドも用意されていないということです。

https://docs.anthropic.com/en/docs/claude-code/setup

ここにもインストール方法しか載ってないし、アンインストール方法がありません。

Claude Code Uninstallと調べるとこのサイトがヒットするんですが、ここにもnpmのアンインストール方法しか載ってません

https://claudelog.com/faqs/how-to-uninstall-claude-code/

これは流石に気持ちが悪いので、個人的にはnpmでインストールしておいて、Native Installにも変更しないことを強く推奨します。

npmのClaude Codeを取り戻そう

時間がない方は、Claude Code Native Installからnpmの戻すやり方まとめに飛んでください。
以下では解決までの道筋を書き記しています。

まずは単純に、バイナリファイルを消してみます

$ rm /home/minato86/.local/bin/claude

$ claude
-bash: /home/minato86/.local/bin/claude: No such file or directory

当然Claude Codeがねぇぞと言われますね。

$ source ~/.bashrc

$ claude

╭───────────────────────────────────────────────────╮
│ ✻ Welcome to Claude Code!                         │
│                                                   │
│   /help for help, /status for your current setup  │
│                                                   │
│   cwd: /home/minato86                             │
╰───────────────────────────────────────────────────╯

再読み込みさせると、Claude Codeが起動します。

これでアンインストール完了!と思いきや、そううまくはいきません。
一度Claudeを起動した後終了し、whichコマンドを実行してみると

$ which claude
/home/minato86/.local/bin/claude

なんと消したはずのファイルが復活しています。

環境変数を再読み込みさせてみます。

$ claude --version
1.0.33 (Claude Code)

$ source ~/.bashrc

$ claude --version
1.0.98 (Claude Code)

1.0.33は、npmでインストールしているバージョンです。しかし、一度Claude Codeを起動すると、最新バージョンがなぜか復活しています。

まず、/home/user/.local/bin/claude はシンボリックリンクです。なのでこれは実体ではないんですね。

$ readlink /home/minato86/.local/bin/claude
/home/minato86/.local/state/claude/launcher/claude-v0.0.8.sh

実体はlauncherなようです。

#!/bin/bash




printf '\033]0;claude\007'


VERSIONS_DIR="/home/minato86/.local/share/claude/versions"
LATEST_LINK="/home/minato86/.local/state/claude/latest"


if [[ -L "$LATEST_LINK" ]] && [[ -x "$LATEST_LINK" ]]; then
    exec "$LATEST_LINK" "$@"
fi


if [[ -d "$VERSIONS_DIR" ]]; then
    
    
    for VERSION_FILE in $(ls -t "$VERSIONS_DIR" 2>/dev/null); do
        FULL_PATH="$VERSIONS_DIR/$VERSION_FILE"
        if [[ -f "$FULL_PATH" ]] && [[ -x "$FULL_PATH" ]]; then
            exec "$FULL_PATH" "$@"
        fi
    done
fi


echo "Error: No Claude CLI binary found." >&2
echo "Looked for:" >&2
echo "  Latest symlink: $LATEST_LINK" >&2
echo "  Versions directory: $VERSIONS_DIR" >&2

.local/state/claude/latest もsymlinkだったので、実体は .local/share/claude/versions にあるようです。

npmで実行する際はいらなさそうなので全部消してしまいましょう。

$ rm -rf /home/minato86/.local/share/claude/
$ rm -rf /home/minato86/.local/state/claude/
$ rm /home/minato86/.local/bin/claude

消したら確認してみます。

$ source ~/.bashrc

$ claude --version
1.0.33 (Claude Code)

Claude Codeのバージョンがnpmのものになっていますね。

$ claude

(Claudeの画面略)

$ claude --version
1.0.33 (Claude Code)

$ which claude
/home/minato86/.local/bin/claude

$ claude doctor

 Claude CLI Diagnostic
 Currently running: native (1.0.33)
 Path: /home/minato86/.nvm/versions/node/v22.17.0/bin/node
 Invoked: /home/minato86/.nvm/versions/node/v22.17.0/bin/claude
 Auto-updates: Yes
 Config install method: native
 Config auto-updates: disabled
 Warning: Multiple installations found
 - npm-global at /home/minato86/.nvm/versions/node/v22.17.0/bin/claude
 - native at /home/minato86/.local/bin/claude
 Press Enter to continue…

なんと、また .local/bin/claude が復活しています。中身を確認してみましょう。

$ readlink /home/minato86/.local/bin/claude
/home/minato86/.local/state/claude/launcher/claude-v0.0.8.sh

またシンボリックリンクが作成されており、launcherも復活しています。

~/.local/share/claude/versions$ ls
1.0.98

バージョンも復活していますね。

~/.local/state$ ls
claude  gh  opencode  pnpm

stateも復活しています。
ここにきて、claude doctor の結果を思い出します。

$ claude doctor

 Claude CLI Diagnostic
 Currently running: native (1.0.33)
 Path: /home/minato86/.nvm/versions/node/v22.17.0/bin/node
 Invoked: /home/minato86/.nvm/versions/node/v22.17.0/bin/claude
 Auto-updates: Yes
 Config install method: native
 Config auto-updates: disabled
 Warning: Multiple installations found
 - npm-global at /home/minato86/.nvm/versions/node/v22.17.0/bin/claude
 - native at /home/minato86/.local/bin/claude
 Press Enter to continue…

まず、バージョンが1.0.33ということは、紛れもなくnpmのバージョンを実行しているはずですが、なぜかnativeと認識されているようです。

また、Config install method: native という部分。つまり、Claude自体がNative Installを行うようにConfigに書き込んでいるようです。

つまり

Claude CodeのNative Installの関連ファイルを消す

npmのClaude Codeが起動する

Claude CodeがConfigを読み取り「Native Installを構成されているからNative Installしなければ!」と認識する

バックグラウンドで処理が行われ、Native Installに変わる

ということが起こっていそうです。

ここで、Claude Codeにおいて重要なこと、自動的に作成される構成ファイル・ディレクトリを抑えておく必要があります。

先ほど削除したファイルたちは、Claude Code Native Installに関わるファイルたちでした。
そのほかに、Claude Codeは、npmでもNativeでも必ず作成される構成ファイルたちがあります。

この2つです。
~/.claudeには、主にキャッシュファイルやヒストリー、ステートを管理するための状態ファイルやクレデンシャルなどが保管されているようです。

詳しくは↓

https://tech-lab.sios.jp/archives/48303

そして重要なのが、~/.claude.jsonです。ここに claude config set -g で設定したグローバルセッティングが保存されています。

先ほど確認した通り、Native Installを行うと、その情報が ~/.claude.json にも保存されているようです。
つまり、Claude CodeがNative Install用に設定されているのにnpmでインストールしたClaude Codeを実行してもClaude CodeはNative Installをしようとしちゃうよね。ということみたいです。

確認してみます。

まずはconfigを変更します。
別のPCで確認したところ、npmでインストールした場合のinstallMethodはunknownになるようなので、それに合わせます

claude config set -g installMethod unknown

確認してみます

$ claude config ls -g
{
  "installMethod": "unknown",

正しく設定が変更できてるようです。

続いて、先ほどと同様に、Claude Code Native Installの関連ファイルをすべて削除し、~/.bashrc からClaude Codeが追加した環境変数も消しておきます。

.bashrc

- export PATH="/home/minato86/.local/bin:$PATH"

結果….

$ claude --version
1.0.33 (Claude Code)

$ claude doctor

 Claude CLI Diagnostic
 Currently running: npm-global (1.0.33)
 Path: /home/minato86/.nvm/versions/node/v22.17.0/bin/node
 Invoked: /home/minato86/.nvm/versions/node/v22.17.0/bin/claude
 Auto-updates: No
 Config install method: unknown
 Config auto-updates: disabled
 Update permissions: No (requires sudo)
 Recommendation: Run '/migrate-installer' to enable auto-updates
 This migrates to a local installation in ~/.claude/local
 Press Enter to continue…

無事Claude Codeをnpm版に戻すことができました 🎉
特にこの後、勝手にNative Installに戻ったりもありませんでした。

Claude Code Native Installからnpmの戻すやり方まとめ

以上を踏まえて、Claude CodeのNative Installをnpmに戻す方法をまとめました。

基本的に、Claude Codeの状態ファイルなどには手を加えないので、これまでの履歴やログイン情報は消えません。

1. Configを変更する

Configを変更して、Native Installを使用しないように設定します。

claude config set -g installMethod unknown

2. 環境変数を削除する

Claude Codeは自動的に環境変数を追加しているので、削除します。
下記はBash環境ですが、適宜読み替えてください。

.bashrc

- export PATH="/home/minato86/.local/bin:$PATH"

3. 関連ファイルを削除する

Claude Code Native Installの関連ファイルをすべて削除します。

rm ~/.local/bin/claude
rm -rf ~/.local/state/claude/
rm -rf ~/.local/share/claude/

4. 環境変数を再読み込みする

ターミナルを再起動するか

で環境変数を再読み込みします。

5. npmでClaude Codeを入れる

npm install -g @anthropic-ai/claude-code

バージョン指定したい方は指定して入れてください。

あとは通常通りClaude Codeを実行すればOKです。

おわりに

外出先でこの問題に遭遇し、Claude Code Native Installとnpmが競合してぐちゃぐちゃになってしまい、うまく動かない事態になってしまいました(結局家帰って詳細に調査するまでお仕事はCodexにやってもらった)

/doctorなんて便利なコマンドがあるなら削除もいい感じにやってほしいもんですが、とりあえず同様の問題が起きた場合への備忘録ができたということで。



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -