asdf 環境で npm install --global したパッケージが command not found になる時の解決方法
asdfを使ってNode.jsのバージョンを管理している環境で npm を使ってグローバルにコマンドラインツールをインストール後、いざ使おうとすると command not found エラーが出て、解決した話をご紹介します。
npm install --global (npm install -g) したのにコマンドが見つからない例えば、AnthropicのClaudeコマンドラインツールをインストールするために、以下のコマンドを実行しました。
npm install -g @anthropic-ai/claude-codeインストールは正常に完了したように見えます。しかし、実際にclaudeコマンドを実行してみると、
claude
zsh: command not found: claudeこのようにシェルがコマンドを見つけられず、エラーになってしまいます。
asdf環境で npm install -g を実行した後に command not found と表示される場合、その原因はasdfがコマンドを管理する仕組みにあります。
asdfは、インストールされた各言語の実行ファイルへのパスを直接通すのではなく、shimと呼ばれるラッパースクリプトを介してコマンドを実行します。これにより、プロジェクトごとに適切なバージョンのコマンドを自動で切り替えることを可能にしています。
npm install -g で新しいコマンド(今回の例では claude )をインストールしても、asdfは自動でその存在を認識しません。そのため、asdfが管理しているshimのリストに新しいコマンドが追加されず、結果としてパスが通っていない状態になってしまうのです。
asdf reshim を実行する結論として、asdf reshim を実行することで解決します。
reshim は、asdfに対して、インストール済みのパッケージを再スキャンし、shimを再生成するように指示するコマンドです。
今回のケースでは、Node.jsのパッケージをインストールしたので、以下のコマンドを実行します。
asdf reshim nodejsこのコマンドを実行することで、asdfは新しくインストールされた claude コマンドを認識し、適切なシムを作成してくれます。
コマンド実行後、再度 claude コマンドを試してみてください。今度は正常に実行されるはずです。
asdf環境でグローバルにパッケージをインストール後は、対応する言語のasdf reshimを実行する習慣をつけると、このような command not found エラーを未然に防ぐことができます。
npm install -g 後にコマンドが見つからない。asdf reshim <target> を実行する。(例:asdf reshim nodejs)もし同様の現象に遭遇したらぜひ試してみてください。
以上、asdf環境で command not found エラーが発生したら asdf reshim していきたい、現場からお送りしました。