1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mise で npm -g 環境を安全に環境分離・並行運用する

1
Last updated at Posted at 2026-02-14

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_prefixnpm_config_cache で指定でき、環境分離が可能です。

ここでは mise を使って npm -g の環境を分離・並行運用の手順を解説します。

  • 前提(事前準備):
  • 手順:
    • 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
分離用ディレクトリの作成、mise.tomlの作成、mise.tomlの設定
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
【実行例】分離用ディレクトリの作成、mise.tomlの作成、mise.tomlの設定
~ $ 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
  • 実行例では lsprintenv で、実際に設定されてるかを確認しています。
  • mise config set env._.pathnpm -g でインストールされる実行ファイル(CLI等) $npm_config_prefix/bin/ を環境変数 PATH に加える mise の設定です。これを忘れると、毎度 ./.npm-global/bin/CLI_COMMAND をやる羽目になります。詳細は env._.path をご覧ください。
  • exec $SHELLmise.toml 読み込み直しのためにやってます。ディレクトリに入りなおす(例: cd ../ ; cd npm-root-a/) しても同じ効果です。

確認

分離環境内で envinfo をインストール・実行してみます。

【実行例】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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?