はじめに
Node.js を使った開発を始める際、Node.js本体だけでなく、pnpmのようなパッケージマネージャーのバージョン管理も必要になります。プロジェクトごとに必要なバージョンが異なると、環境差分によるエラーに悩まされることもあります。
本記事では、ランタイムや開発ツールのバージョン管理ツールである mise を導入し、Node.js と pnpm を使える開発環境を構築する手順をまとめます。mise の基本的な使い方にも触れながら、プロジェクト単位で環境をそろえるところまで試してみます。
目次
1. miseとは
2. miseのインストール
3. miseを使ってNode.jsとpnpmをインストール
3. プロジェクト内でバージョンを共有
まとめ
1. miseとは
mise は、Node.js だけではなく Python・Ruby などのランタイムや、pnpm・npm・Terraform といった開発ツールのバージョンをまとめて管理できるツールです。
もし mise を使わなかったとすると、Node.js では nvm を使い、Python では pyenv を使い、、、といった感じで、それぞれ別々のバージョン管理ツールを使うこととなり、「あれ、これのバージョン管理ってどれ使ってたんだっけ?」みたいなことになる可能性が高いです。
mise だけで色々なパッケージのバージョン管理が完結するし、環境構築もめちゃくちゃ簡単という便利なツールになっています。
また、かなり多くのパッケージに対応しているというのも魅力の1つです。(公式Registryにて確認できます。)
2. miseのインストール
今回は Windows + winget にて導入する方法を解説します。
PowerShell を起動し、次のコマンドを実行します。
winget install jdx.mise
インストール後は、PowerShell を一度閉じて開き直し、mise が利用できることを確認します。
mise --version
次に、PowerShell を起動したときに mise が自動で有効になるよう、PowerShell プロファイルへ設定を追加します。
'(&mise activate pwsh) | Out-String | Invoke-Expression' | Add-Content -Path $PROFILE
$PROFILE の保存先フォルダがまだ存在しない場合は、先に次のコマンドを実行してください。
New-Item -ItemType Directory -Force -Path (Split-Path -Parent $PROFILE)
設定を反映するため、PowerShell を再起動します。
最後に診断コマンドを実行し、問題がないか確認します。
mise doctor
これで完了です。導入方法の詳細はmise公式ドキュメントのインストール手順も参照してください。
3. miseを使ってNode.jsとpnpmをインストール
今回はプロジェクトで使う場合を想定して解説をします。
以下のコマンドをプロジェクトのルートで使うことで、インストールとプロジェクトで使うバージョンとしての設定が可能です。
mise use node@24.18.0
mise use pnpm@11.17.0
@ の後ろは latest なども使えます。
上記コマンドを実行すると、自動で mise.toml というファイルが追加されます。ここに設定したバージョン情報が記されています。
[tools]
node = "24.18.0"
pnpm = "11.17.0"
設定されたバージョンが使用できることを確認します。
node --version
pnpm --version
4. プロジェクト内でバージョンを共有
mise.tomlが置いてある場所で以下のコマンドを叩くことで、記されているパッケージのバージョンがインストールされます。
mise install
mise.tomlに書かれているバージョンがmiseでインストールされ利用可能な状態であれば、自動でそのバージョンを使うように動いてくれます。ですので、プロジェクトを移動するごとに上記コマンドを叩く必要はありません。
実運用としては、プロジェクトルート上にmise.tomlを置いておき(mise useを使えば自動で追加される)、Gitで共有してクローンしてきたときにmise installをしてもらうという運用になるかと思います。そうすれば、チーム内でそれぞれが使っているバージョンが違うといった問題を防ぐことができます。
まとめ
miseを使ってみたら環境構築やバージョン管理をかなり楽にすることができました!プロジェクト内の設定ファイルの数も1つで済むため、すっきりしていて個人的に好きです。