asdf 環境で npm install --global したパッケージが command not found になる時の解決方法

Tadashi Shigeoka ·  Sat, March 22, 2025

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 の shim が更新されていない

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のシムが更新されていない。
  • 解決策: asdf reshim <target> を実行する。(例:asdf reshim nodejs

もし同様の現象に遭遇したらぜひ試してみてください。

以上、asdf環境で command not found エラーが発生したら asdf reshim していきたい、現場からお送りしました。