Node.jsバージョン管理ツールについて調べてみる

はじめに

書籍「りあクト!」シリーズを読んでいると Node.js のバージョン管理ツールについて紹介されていました。 書籍では mise を採用していますが、その他の選択肢として nvm・fnm・Volta が紹介されていたため、それぞれの違いについて調べてみようと思います。

Node.js のバージョン管理ツールとは

Node.js のバージョン管理ツールとは、異なる Node.js のバージョンを簡単に切り替えられるツールです。

導入することで以下のような問題を解決することができます。

  • プロジェクトAでは Node.js v18 を、プロジェクトBでは Node.js v20 を使用したい
  • 開発チーム内で Node.js のバージョンを自動で揃えられるようにしたい
  • 古いコードをテストするために特定のバージョンを残しておきたい

結論

先に結論からまとめると、Ruby や Python などのラインタイムをまとめて管理したい場合は mise を、それ以外の場合は Volta を使うのが良いと思いました。

それでは、それぞれのツールについてみていきましょう。

nvm

nvm(Node Version Manager)は2014年から存在し、Node.js バージョン管理ツールの代表とも言えます。

GitHub – nvm-sh/nvm: Node Version Manager – POSIX-compliant bash script to manage multiple active node.js versions

特徴

  • 古くから存在するため情報量が多い
  • できることがシンプル、学習コストが低い
  • Mac や Linux 向けに開発されており、Windows で使用するなら nvm-windows という別実装が必要

基本コマンド

nvm install 18          # Node.js のインストール
nvm use 16              # バージョン切り替え
nvm alias default 18    # ターミナルで使用するデフォルトバージョン設定
nvm ls                  # インストール済みの一覧を表示
nvm use                 # .nvmrc などの設定ファイルを読み込んで自動切り替え

他のツールと比較して起動がやや遅いという欠点はありますが、とりあえず Node.js のバージョン管理をしておきたいだけなら nvm から触ってみるのが良いと思います。

fnm

fnm(Fast Node Manager)は Bash で実装されている nvm を Rust で書き直し高速化したツールです。

GitHub – Schniz/fnm: 🚀 Fast and simple Node.js version manager, built in Rust

特徴

  • nvm と同じくできることがシンプルで学習コストが低い
  • Windows / Mac / Linux に対応
  • .nvmrc などの設定ファイルは nvm と同様

基本コマンド

fnm install 18          # Node.js のインストール
fnm use 18              # バージョン切り替え
fnm default 20          # ターミナルで使用するデフォルトバージョン設定
fnm list                # インストール済みの一覧を表示
fnm use                 # .nvmrc などの設定ファイルを読み込んで自動切り替え

nvm を使用していて速度が気になる人は fnm に移行しましょう。 クロスプラットフォームに対応しているので、複数の OS で開発ツールを統一したい人にもおすすめです。

Volta

「The Hassle-Free JavaScript Tool Manager」をコンセプトに開発されたツールで、Node.js 以外の JavaScript 関連ツールも管理することができます。

Volta – The Hassle-Free JavaScript Tool Manager

特徴

  • pacage.json 内のvolta フィールドでバージョン情報を管理するため、個別の設定ファイルが不要
  • プロジェクトを開くだけで自動的にバージョンが切り替わる
  • Node.js の PATH を切り替えることなくバージョンを切り替えるため動作が高速

基本コマンド

volta --version             # Volta のバージョン確認
volta list                  # 現在有効なツールの一覧を表示
volta list all              # インストール済みのすべてのバージョンを表示
volta install node          # 最新の Node.js をインストール
volta uninstall node@18     # 特定バージョンの Node.js をアンインストール
volta pin node@20           # プロジェクトで使用する Node.js バージョンを固定
volta setup                 # PATH 設定などを自動修復

Volta のルールに従う必要がありますが、JavaScript や TypeScript をメイン言語として扱う方や、関連ツールのバージョンをプロジェクトで固定したい場合は Volta を選ぶのがベストです。

mise

Node.js に限らず Python・Ruby・Goなども同時に管理できる Rust 製の開発環境セットアップツールです。

Home | mise-en-place

特徴

  • コミュニティのプラグインが豊富で700以上のツールやランタイムに対応
  • .nvmrc.tool-versions など既存設定の流用が可能
  • 環境変数やタスクランナーの機能もあり、バージョン管理以外にも広く対応
  • asdf と互換性を持ちつつ、Rust で再設計された次世代ツールとして開発されている

基本コマンド

mise install node@20          # Node.js 20 をインストール
mise use node@18              # 現在のシェルセッションで特定バージョンを有効化
mise default node@20          # ターミナルで使用するデフォルトバージョン設定
mise list                     # インストール済みバージョン一覧を表示

大量のコマンドが用意されているため、Node.js 関連のコマンドのみ紹介しましたが、プラグインの管理コマンドや npm run のように定義したスクリプトを実行することもできます。

多機能で学習コストが少し高いのですが、開発に関係する機能が網羅されていることや多数のツールやランタイムに対応していることから「1つのツールですべて管理したい」という人にはおすすめのツールです。

さいごに

バージョン管理ツールは頻繁に意識するものではありませんが、何を選ぶかで開発体験が大きく変わります。

書籍「りあクト!」シリーズを読み進める際には「mise 使ってるけどいつも通り Volta でいいや」などと思っていましたが、調べてみると dotenv や Makefile などの分散しているツールを mise でまとめることができそうなので少しずつできることを増やしながら mise を使いこんでみようと思います。

投稿者プロフィール

HirayamaMotoki

関連記事

  1. 【新米エンジニア学習記録②】TypeScriptの導入

  2. Node.js

    【NodeJS】TypeScriptでCSVを読み込んで処理する

  3. Node.js

    【NodeJS】PrismaやTypeScriptを使ってデータを操作…

  4. Node.js

    【NodeJS】Gemini APIを使ってみる

  5. Node.js

    【NodeJS】Crawleeを使ってみる(Scraping with…

  6. Node.js

    【NodeJS】自作MCPサーバー with Gemini CLI

最近の記事

  1. AWS
  2. AWS

制作実績一覧

  1. Checkeys