🐈

【WSL】nvm環境でnpm install -gしたコマンドが使えない?それ、bin-linksが原因かも

に公開

はじめまして。nemunekoです=^_^=

最近話題のClaude Codeやgemini-cliを使うために、WSL2とNode.jsの環境構築をしていたところ、ちょっとした落とし穴に遭遇しました。

npm install -gでグローバルインストールしたはずのコマンドが「command not found」になってしまった話と、その解決方法を共有します。
それではどうぞ。

この記事の対象読者

  • WSL2とNVMを使ってNode.js環境を構築している猫
  • npm install -g でツールをインストールしたのに、コマンドが見つからないエラーに遭遇した猫
  • 手動でシンボリックリンクを作るという応急処置に疲れた猫

問題の発生

Claude Codeを使おうと思って npm install -g @anthropic-ai/claude-code でインストールしました。しかし、claude コマンドを実行すると...

$ claude
claude: command not found

インストールは成功しているように見えるのに、コマンドが見つからない状態...
まず最初に PATH を確認しましたが、NVMのパスは正しく設定されていたんですよね。

原因の調査

npm root -g でグローバルパッケージの場所を確認し、bin ディレクトリの内容を調べました

# グローバルパッケージの場所を確認
$ npm root -g
/home/nemuneko/.nvm/versions/node/v22.16.0/lib/node_modules

# binディレクトリの中身を確認
$ ls -la /home/nemuneko/.nvm/versions/node/v22.16.0/bin/

調査の結果、claude コマンドへのシンボリックリンクが存在しないことが判明しました。
パッケージ本体は node_modules に存在するものの、実行可能なシンボリックリンクが作成されていない状態だったんですね。
通常であれば、インストール時に勝手にリンクが作成されるのですが、なぜか作成されていないと…。

応急処置:手動でシンボリックリンクを作成

「シンボリックリンクがないなら、作ってしまえばいいじゃない」ということで、自力でリンクを作ってみることに。

$ ln -s ~/.nvm/versions/node/v22.16.0/lib/node_modules/@anthropic-ai/claude-code/cli.js ~/.nvm/versions/node/v22.16.0/bin/claude
$ chmod +x ~/.nvm/versions/node/v22.16.0/lib/node_modules/@anthropic-ai/claude-code/cli.js

これでclaudeを実行すると、期待通りに動作してくれました!一安心=^_^=
とは言え、原因もわからずこの状況でもいいのかと若干悩みました。「まぁ動いているのだしいいか!」と数日は放置してました。
しかし、この現象は私を逃してはくれませんでした…。

追い打ち

claudeだけ特別おかしかった、と言う訳もなく、他のコマンドのインストールでも同様の現象が再発、、、
さらにさらに、PCを再起動したりすると、さっき作成したはずのclaudeのシンボリックリンクが消滅…=TェT=
さすがに原因を突き止めて直さないと…ということで原因究明を急ぎました。

根本原因の特定

npmの設定を確認したところ、問題の原因が判明しました

$ npm config get bin-links
false

bin-links 設定が false になっていました。(こいつが犯人か!!!)
この設定は、npm install 時に実行ファイルへのシンボリックリンクを作成するかどうかを制御します。通常はデフォルトで true になっているはずですが、何らかの理由で false に変更されていました。

解決方法

設定を修正し、パッケージを再インストールすることで問題を解決できます

# bin-links設定を有効にする
npm config set bin-links true

# 既存パッケージをアンインストール
npm uninstall -g @anthropic-ai/claude-code

# 再インストール
npm install -g @anthropic-ai/claude-code

確認:

$ which claude
/home/nemuneko/.nvm/versions/node/v22.16.0/bin/claude

無事にコマンドが使えるようになりました。やったね=^_^=

まとめ

WSL2 + NVM環境で npm install -g したパッケージのコマンドが使えない場合、bin-links 設定を確認することをお勧めします。

npm config get bin-links

もし false になっている場合は、npm config set bin-links true で修正後、パッケージを再インストールしてください。

この設定がなぜ false になっていたのかは謎ですが、同じ問題に遭遇した猫の参考になれば幸いです。

それでは、また次の記事で。nemunekoでした=^_^=

Discussion