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
していきたい、現場からお送りしました。