npm install -g したコマンドが command not found で実行できない
グローバルインストール先の bin ディレクトリが PATH に入っていないのが典型原因。
npm prefix -g で実際のインストール先を確認し、PATH に追加するか nvm 経由の構成に揃えると解決する。
公開: 更新:
要約
npm install -g some-cli は成功するのに some-cli の実行が command not found になるのは、ほとんどの場合グローバルインストール先(prefix)の bin ディレクトリが PATH に入っていないため。
まず npm prefix -g でインストール先を確認し、PATH と突き合わせるのが最短の切り分け。
実行例
インストール自体は added 1 package で成功しているのに、続けて json --version を叩くと exit 127 の command not found になる。npm prefix -g が指すディレクトリの bin/ には実体が置かれており、そこを PATH に足すと同じコマンドがそのまま通る。
$ npm install -g json
added 1 package in 451ms
終了コード: 0$ json --version
bash: line 1: json: command not found
終了コード: 127$ npm prefix -g
/tmp/tmp.5oPwpQmlSY/npm-global$ ls /tmp/tmp.5oPwpQmlSY/npm-global/bin
json$ export PATH="$(npm prefix -g)/bin:$PATH"$ json --version
json 11.0.0
written by Trent Mick
https://github.com/trentm/json
終了コード: 0$ which json
/tmp/tmp.5oPwpQmlSY/npm-global/bin/json— 2026-08-29 時点の出力
検証環境
- 検証日
- 実行環境
node:20Debian GNU/Linux 12 (bookworm)- バージョン
- Node.js 20.20.2
- npm 10.8.2
- Python 3.11.2
- Git 2.39.5
この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。
よくある原因
- bin ディレクトリが PATH に無い: Linux / macOS では
$(npm prefix -g)/bin、Windows では prefix 直下に実行ファイルが置かれるが、そこが PATH に含まれていない。 - nvm のバージョン違い: nvm は Node のバージョンごとに独立したグローバル領域を持つため、
nvm useで切り替えた先にはコマンドが存在しない。 - prefix 変更後の PATH 未更新: EACCES 対策で
npm config set prefix ~/.npm-globalと変更したのに、PATH への追記やシェル再起動をしていない。 - Windows の PATH 設定漏れ: 環境変数の編集ミスなどで npm のグローバルディレクトリが PATH から消えている。
解決策
1. インストール先を確認して PATH に追加する
npm prefix -g
# 例: /home/user/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc返ってきたディレクトリの bin(Windows は prefix 直下)が PATH に入っているかを確認する。
2. nvm のバージョンを揃える
nvm current
npm install -g some-clinpm 公式ドキュメント(新しいタブで開く)も nvm などのバージョンマネージャ利用を推奨している。
nvm 環境では PATH は自動で切り替わるため、「使うバージョンで入れる」ことだけ守ればよい。
3. シェルのキャッシュをクリアする
hash -rPATH を直した直後は bash / zsh がコマンドの場所をキャッシュしたままのことがある。
新しいターミナルを開くのでもよい。
4. npx で代替する
npx some-cli --versionたまにしか使わないツールなら npx で都度実行すれば PATH の問題自体が起きない。