Node.jsのバージョン管理はfnmが便利
Node.js のバージョン管理は fnm が便利だったので紹介します。
node のバージョン管理に Volta を利用していたのですが、pnpm を利用する場合にいくつか制限があったりして、
他に良い node のバージョン管理ツールがないか調べてみたところ fnm が良さそうだったので移行してみました。
Volta のアンインストールを行う
Linux の場合(WSL)
Volta のディレクトリを削除します。
rm -rf ~/.voltaあと .bashrc や .profile などから Volta の設定を削除します。
Windows の場合
設定からアンインストール、または Scoop でインストールしている場合は以下のコマンドでアンインストールを行います。
scoop uninstall --purge voltafnm のインストールを行う
🚀 Fast and simple Node.js version manager, built in Rust - Schniz/fnm

Linux の場合(WSL)
curl -fsSL https://fnm.vercel.app/install | bashログアウトして再度ログインを行うと以下のエラーが表示されました。
error: Can’t create the symlink for multishells at “/run/user/1000/fnm_multishells/2418_1762986068457”. Maybe there are some issues with permissions for the directory? No such file or directory (os error 2)
以下のコマンドを実行することでエラーは解決しました。
sudo mkdir /run/user/1000
sudo chown user:user /run/user/1000以下を .bashrc に記載しました。
FNM_PATH="${HOME}/.local/share/fnm"
if [ -d "$FNM_PATH" ]; then
export PATH="$FNM_PATH:$PATH"
eval "$(fnm env --shell bash --use-on-cd --version-file-strategy=recursive --corepack-enabled --resolve-engines)"
fi--shell オプションに bash を指定し、--use-on-cd と --version-file-strategy と --corepack-enabled、
--resolve-engines オプションを追加しました。
指定したオプションの概要は以下の通りです。
| オプション | 概要 |
|---|---|
| --shell | シェルを指定する。bash, zsh, fish, powershell など |
| --version-file-strategy | recursive を指定すると上位のディレクトリの package.json を考慮してくれるようになります |
| --use-on-cd | ディレクトリを移動するときに node のバージョンを自動で切り替えてくれる |
| --corepack-enabled | node をインストールするときに corepack enable が自動で実行される。pnpm や yarn などを利用している場合とても便利です |
| --resolve-engines | package.json の engines に記載されている node のバージョンを考慮してくれます |
fnm/docs/configuration.md at master · Schniz/fnm
シェル上でのコマンドの補完機能は fnm completions で有効にすることができます。.bashrc に以下を追加しました。
if which fnm > /dev/null 2>&1; then
eval "$(fnm completions --shell bash)"
fiWindows の場合
私はツールのインストールに Scoop を利用しているので以下のコマンドでインストールしました。
scoop install fnmPowerShell の $PROFILE に以下を追加しました。
if (Get-Command fnm -ErrorAction SilentlyContinue) {
fnm env --shell powershell `
--use-on-cd `
--version-file-strategy=recursive `
--resolve-engines `
--corepack-enabled
| Out-String | Invoke-Expression
fnm completions --shell powershell | Out-String | Invoke-Expression
}fnm を使用する
node のインストール
以下のコマンドでバージョンを指定して node をインストールできます。
fnm install v24
fnm list
node -v
pnpm -vほかにもいくつかのバージョンの node をインストールして、ディレクトリを移動したときに node のバージョンが自動で切り替わることが確認できました。
まとめ
fnm は .node-version や .nvmrc、package.json に記載されている engines を考慮してくれるので、プロジェクトごとの Node.js バージョン管理がしやすくて良いです。
pnpm を使用する場合には、Volta のようにグローバルインストールや corepack 周りの制限がないのが良いと思います。