こんにちは。
サーバーサイドでJavaScriptを実行できるNode.jsですが、複数のプロジェクトを同時に開発するにはバージョン管理が必須です。Macではnodebrewやnodenvなどのバージョン管理ツールを使って管理することが多いですが、最近よく聞くVoltaというバージョン管理ツールを使ってみたところなかなか良かったので紹介します。
こんにちは。
サーバーサイドでJavaScriptを実行できるNode.jsですが、複数のプロジェクトを同時に開発するにはバージョン管理が必須です。Macではnodebrewやnodenvなどのバージョン管理ツールを使って管理することが多いですが、最近よく聞くVoltaというバージョン管理ツールを使ってみたところなかなか良かったので紹介します。
Node.jsに限らずランタイムで複数の安定バージョンが公開されている場合、複数のプロジェクトそれぞれで使用するランタイムバージョンが異なる場合があります。もちろん基本的に上位バージョンは後方互換性(上位互換性)があるため一番上のバージョンに合わせておけばいいですが、製品レベルの開発だと実際の実行環境のバージョンに合わせて開発するべきです。
そんなときに役に立つのがバージョン管理ツールです。複数のバージョンのランタイムをインストールし、必要なときにバージョンを切り替えて実行することができるようにするものです。Windowsだとnodist、Macだとnodebrewやnodenvなどをよく見ます。ちなみにこのブログもNode.jsで開発していますが、個人開発なのと特にバージョンにこだわりがないのでバージョン管理ツールは使っていません。また今回は、仕事で使っているMacでの環境がメインの話になります。
今回おすすめするバージョン管理ツールがVoltaです。Voltaは2020年12月に正式版が公開された比較的新しいバージョン管理ツールで、公式には「簡単なJavaScriptツールマネージャー」と紹介されています。
公式は以下3つを特徴として挙げています。
VoltaはWindowsでもUNIX系OSでも動きます。また後述しますが、プロジェクトごとのNode.jsバージョンの固定と、その設定の他の開発者との共有が簡単にできます。コマンドも実にシンプルで分かりやすいです。
VoltaはUNIX系OSでは以下のコマンドで簡単にインストールすることができます。
curl https://get.volta.sh | bash
macOSのデフォルトのシェルはbashからzshに切り替わっていますが、コマンドはbash
のままでOKです。Windowsの場合はインストーラーでのインストールになりますが、シンボリックリンクを利用するためOSの開発者モードを有効にする必要があります。少し扱いづらいところがあるため、Windowsの場合はWSL(Windows Subsystem for Linux)で開発するのがいいかもしれません(その場合上のコマンドでインストールできます)。
ちなみにHomebrewでのインストールも可能ですが、公式がcurlでのインストールを勧めているのでおとなしく従いましょう。パッケージ管理ツールでバージョン管理ツールを管理するのもややこしいですしね。
VoltaでのNode.jsのインストールは非常に簡単です。以下のコマンドを入力するだけです。
volta install node
この場合、Node.jsの長期サポート版がインストールされます。パッケージ管理ツールのnpmも同時にインストールされます。最新バージョンや、バージョンを具体的に指定したい場合は以下のようにします。
volta install node@latest
volta install node@16.13.2
install
というコマンドではありますが、実際には指定されたバージョンのツールをダウンロード(ローカルに無い場合のみ)し、デフォルトバージョンを設定するというコマンドです。つまり、後述するプロジェクトごとのバージョンの固定がされていないプロジェクトであれば、このコマンドで指定されたバージョンのNode.jsが使われることになります。一度ダウンロードしてしまえば同じinstall
コマンドでデフォルトバージョンの切り替えのみが行われるようになります。また、fetch
コマンドを使えばデフォルトバージョンの切り替えは行わずダウンロードのみをすることができます。
Voltaでは、Node.jsやパッケージ管理ツールのnpm、yarnなどのバージョンをプロジェクトごとに固定できます。また、その設定はプロジェクトのpackage.json
に保存されるため、Voltaを利用している他の開発者とバージョン固定の設定を共有することができます。.nvmrc
のようなそれ専用の設定ファイルが作られるのではなく、Node.jsプロジェクトでは必ず存在するpackage.json
に追記する形で保存されるのも、余計なファイルを作らず済んで嬉しいポイントです。
バージョンを固定するにはプロジェクトのディレクトリで以下のコマンドを実行します。
volta pin node@16.13.2
volta pin npm@8.1.2
これを実行すると、プロジェクトのNode.jsのバージョンが16.13.2に、npmのバージョンが8.1.2に固定されます。固定していない他のプロジェクトではデフォルトバージョンが利用されますが、このディレクトリに戻ってくると自動的に固定されたバージョンに変更されます。プロジェクトのpackage.json
には次のように追記されます。
{
...,
"volta": {
"node": "16.13.2",
"npm": "8.1.2"
},
...
}
分かりやすいですね。
Voltaは個人開発の範囲でも十分威力を発揮しますが、やはりチーム開発でバージョンを統一できるという点が大きなメリットでしょう。逆に言えば、そのメリットを最大限に発揮するにはチームみんなでVoltaを使う必要があるということです。例えばPythonプロジェクトでも仮想環境で実行するのか、仮想環境ならどの仮想環境ツールを使うのか、Pythonバージョンはどうするのかなどが結局一番最初にそのプロジェクトを作成した人の選択に依存してしまい、ローカルにあらゆるバージョン管理ツール、パッケージ管理ツールを入れるはめになります。Node.jsではメンバーの環境が異なることによる弊害はそこまで無いかもしれませんが、こうした環境は揃えるに越したことはありません。Voltaは新しめのツールですが、高速で動作しシンプルで分かりやすいので他のメンバーにもおすすめしたいところです。
ということで今回は、MacでもWindowsでも利用できるNode.jsのバージョン管理ツール、Voltaの紹介でした。みんなが円滑に開発できる環境を整えていきましょう。
それではまた。