npm -g で作られる環境は単一のため、更新や切り戻しが困難になりがちです。Docker や Nix で環境分離できますが、そこまでではないことや、Nix に該当パッケージが存在しない場合もあります。
2026/5/15 更新
npm: プレフィックスを付ければ mise 管理下の中に npm パッケージが入ります。
mise use -g npm:<npm_package_name>
npm バックエンドと言うそうです。他には aqua:があります。
バックエンド一覧は https://mise.jdx.dev/dev-tools/backends/ で確認できます。
例 (envinfo のインストール):
$ mise use -g npm:envinfo
Reshimming mise latest...
npm:envinfo@7.21.0 added 1 package in 365ms
mise ~/.config/mise/config.toml tools: npm:envinfo@7.21.0
$ which envinfo
/home/YOU/.local/share/mise/installs/npm-envinfo/latest/bin/envinfo
$ mise rm -g -y npm:envinfo
mise removed: envinfo from ~/.config/mise/config.toml
$ which envinfo || echo "not found"
not found
ちなみに -g を付けない場合は mise を実行したカレントディレクトリに mise.toml が作成されて、そのディレクトリ配下での実行のみになります。
以前の記事
npm: を付ける方法(npm バックエンド)は 2024年ころから存在していました。
以下の記事はなんと無知な、、、申し訳ない。まあ、そういう方法もあるんだなということで残しておきます。
実は npm -g でのインストール先は環境変数 npm_config_prefix と npm_config_cache で指定でき、環境分離が可能です。
ここでは mise を使って npm -g の環境を分離・並行運用の手順を解説します。
- 前提(事前準備):
- mise はインストール済みであること
- Node.js が
mise use node@24としてインストール済みであること
- 手順:
- mise のローカル設定が有効になる、分離用ディレクトリを作成する
- 分離用ディレクトリ内で
mise.tomlを作成する -
./mise.tomlに環境変数を設定する
こうしてできたディレクトリ内での npm -g は、環境変数で指定されたディレクトリにインストールされます。
実際の手順
コンピュータ環境を表示する envinfo を対象にやってみます。
分離用ディレクトリ名は ~/npm-root-a とします。
mise version
mise exec node@24 -- node -v
~ $ mise version
_ __
____ ___ (_)_______ ___ ____ ____ / /___ _________
/ __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \
/ / / / / / (__ ) __/_____/ __/ / / /_____/ /_/ / / /_/ / /__/ __/
/_/ /_/ /_/_/____/\___/ \___/_/ /_/ / .___/_/\__,_/\___/\___/
/_/ by @jdx
2026.2.11 linux-arm64 (2026-02-12)
~ $ mise exec node@24 -- node -v
v24.13.1
mkdir npm-root-a
cd npm-root-a/
mise use node@24
mise config set env.npm_config_prefix '{{config_root}}/.npm-global'
mise config set env.npm_config_cache '{{config_root}}/.npm-cache'
mise config set env._.path '{{config_root}}/.npm-global/bin'
exec $SHELL
~ $ mkdir npm-root-a
~ $ cd npm-root-a/
~/npm-root-a $ mise use node@24
node@24.13.1
mise ~/npm-root-a/mise.toml tools: node@24.13.1
~/npm-root-a $ ls mise.toml
mise.toml
~/npm-root-a $ mise config set env.npm_config_prefix '{{config_root}}/.npm-global'
~/npm-root-a $ mise config set env.npm_config_cache '{{config_root}}/.npm-cache'
~/npm-root-a $ mise config set env._.path '{{config_root}}/.npm-global/bin'
~/npm-root-a $ exec $SHELL
~/npm-root-a $ printenv | grep npm_
npm_config_cache=/home/piuser/npm-root-a/.npm-cache
npm_config_prefix=/home/piuser/npm-root-a/.npm-global
~/npm-root-a $ printenv | grep PATH | cut -c 1-100
__MISE_ORIG_PATH=/home/piuser/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bi
PATH=/home/piuser/.npm-global/bin:/home/piuser/npm-root-a/.npm-global/bin:/home/piuser/.local/s
- 実行例では
lsやprintenvで、実際に設定されてるかを確認しています。 -
mise config set env._.pathはnpm -gでインストールされる実行ファイル(CLI等)$npm_config_prefix/bin/を環境変数PATHに加える mise の設定です。これを忘れると、毎度./.npm-global/bin/CLI_COMMANDをやる羽目になります。詳細は env._.path をご覧ください。 -
exec $SHELLはmise.toml読み込み直しのためにやってます。ディレクトリに入りなおす(例:cd ../ ; cd npm-root-a/) しても同じ効果です。
確認
分離環境内で envinfo をインストール・実行してみます。
~/npm-root-a $ npm -g install envinfo
added 1 package in 475ms
Reshimming mise 24.13.1...
~/npm-root-a $ ls .npm-global/lib/node_modules/
envinfo
~/npm-root-a $ which envinfo
/home/piuser/npm-root-a/.npm-global/bin/envinfo
~/npm-root-a $ envinfo | head -5
System:
OS: Linux 6.12 Debian GNU/Linux 13 (trixie) 13 (trixie)
CPU: (4) arm64 Cortex-A76
Memory: 6.48 GB / 7.87 GB
分離用ディレクトリ内の .npm-global/ にインストールされおり、実行ファイルへも PATH が通っています。
環境の削除方法
すべて分離用ディレクトリ内にあるため、今回の例でいえば npm-root-a/ ディレクトリを削除するだけです。
あとがき
今回は npm -g install で検証しましたが、例えば curl + bash で動くようなインストールスクリプト(例: OpenClaw のインストーラー)でも、内部的に npm -g を使っていれば適用されます。
実は同じ効果を持つものとしては direnv もあります。mise はラインタイムも管理できる面があるので、mise を紹介しました。ランタイム管理が不要であれば direnv でもよいでしょう。ただ、mise と direnv は混ぜると不具合が出がち なので、どちらか1つにしたほうが良さそうです。
EoT