きっかけ: Voltaがメンテされなくなった
プロジェクトで Volta を使おうとしていたところ、メンテされなくなったという issue が立っていることを教えていただきました。
移行先として mise が推奨されているのでお試しとして Node.js + npm を導入してみることにしました。
前提
- macOS Sequioa 15.7.2
- fish 4.2.1
- mise 2025.12.12
Volta, nvm などが導入されていた場合は削除しておきましょう。
mise のインストール
$ brew install mise
その後、シェルに応じて activate させます。fish の場合だけ方法が違うので注意。
# zsh の場合
$ eval "$(mise activate zsh)"
# bash の場合
$ eval "$(mise activate bash)"
# fish の場合
$ mise activate fish | source
activate 後は同一シェルセッションで mise が使えます。シェルを起動したときから使いたい場合は以下のように読み込まれるようにします。
# zsh の場合
$ echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
# bash の場合
$ echo 'eval "$(mise activate bash)"' >> ~/.bashrc
# fish の場合
$ echo 'mise activate fish | source' >> ~/.config/fish/config.fish
Node.js + npm の導入
チーム開発していると Node.js だけでなく npm のバージョンも揃えておかなければなりません(そうですよね?)。
プロジェクトのルートディレクトリに .mise.toml ファイルを作り、導入したいツールとバージョンを指定します。
[tools]
npm = "11.6.2"
node = "22.18.0"
その後 install を行うと Node.js + npm が使えるようになります。
$ mise install
# バージョンの確認
$ node --version
v22.18.0
$ npm --version
11.6.2
$ mise ls
Tool Version Source Requested
node 22.18.0 ~/path/to/project/.mise.toml 22.18.0
npm 11.6.2 ~/path/to/project/.mise.toml 11.6.2
利用できるバージョンの確認
ls-remote を使うと、インストールできるバージョンすべてを表示できます。
$ mise ls-remote node
上記では直接 .mise.toml を編集しましたが、use を使っても toml ファイルに追加できます。
$ mise use npm@11.6.2
$ mise use node@22.18.0
なお、引数をつけずに use を使うと mise で使えるツールの検索ができます。
$ mise use
Huskyなどでの対応
グローバルに Node.js がインストールされていない場合や、Husky などでプロジェクトと同じ npm バージョンを使いたい場合、exec を使うことで解決できます。
例えば pre-commit にもともと次のように書かれていたとき、
npm run lint:check &&
npm run test
次のようにすることで npm を解決できます。
mise exec -- npm run lint:check &&
mise exec -- npm run test
グローバルでの利用
プロジェクトごとではなくグローバルで使いたい場合は use --global を使います。
$ mise use --global node@24
ls をするとプロジェクトとグローバルとで別のバージョンで使われることがわかります。
# プロジェクトディレクトリ
$ cd path/to/project
$ mise ls
Tool Version Source Requested
node 22.18.0 ~/path/to/project/.mise.toml 22.18.0
node 24.12.0
npm 11.6.2 ~/path/to/project/.mise.toml 11.6.2
# ホームディレクトリ
$ cd
$ mise ls
Tool Version Source Requested
node 22.18.0
node 24.12.0 ~/.config/mise/config.toml 24
npm 11.6.2
.mise.toml の記述順
次のように .mise.toml を記述し、npm のバージョンを表示してみてください。
[tools]
node = "22.18.0"
npm = "11.6.2" # こちらを後にする
$ mise reshim
$ npm --version
10.9.3
$ which npm
/Users/[user]/.local/share/mise/installs/node/22.18.0/bin/npm
11.6.2 ではなく 10.9.3 が使用されました。
しかもパスを見ると Node.js に付属している npm が使われています。
実は .mise.toml の記述順には決まりがあり、優先したいものを先 に書く必要があります。今回の場合は node が上にあるので、Node.js 付属の npm が使われたということになります。
それでは本来の記述順に戻してみます。
[tools]
npm = "11.6.2" # こちらを先にする
node = "22.18.0"
$ mise reshim
$ npm --version
11.6.2
$ which npm
/Users/[user]/.local/share/mise/installs/npm/11.6.2/bin/npm
期待する npm のバージョンが利用されていることがわかります。
mise で管理しておくと .mise.toml を編集することになり、導入バージョンをソース管理・レビューできるようになります。npm や yarn なども mise で管理した方が良さそうです。
もちろん、mise では Node.js に限らずさまざまなツールやランタイムを扱えるので結構重宝しそうですね。使っていきましょう!