はじめに

この記事ではNodeのバージョン管理にVoltaをお勧めする記事です。

私は普段フロントエンド開発が多く、特にNuxtを業務で扱うことが多いです。
Nuxt2系プロジェクトや古いプロジェクトを触るときに、「何も触ってないのに急にアプリが立ち上がらなくなった!」ということがよくあります。また、Github Actions上でCIでも急にエラーになるということもたまにあります。
この原因で一番多いのがNodeのバージョン違いによるビルドエラーで、ここのマネジメントを行なってビルドエラーによるロスタイムを減らそうという記事です。

具体的に何が問題なのか

執筆現在、Node.jsのLTSは18.17.1です。対して最新版は20.6.1です。
リリース状況をみると、メジャーアップデートが半年に一度あり、メジャーバージョンが偶数のものがLTSとなっています。LTSの期間は約2年で、バージョン18のLTSは2025-04-30となっています。

基本的にLTSバージョンを採用することが多いので、プロジェクトによってはNode.jsを14や16、18を使っているということはよくあると思います。

そんな時に、古いバージョンで14までしか対応していないパッケージが含まれていると、16,18のバージョンで動かそうとするとビルドなどでエラーが起きてしまいます。

これを自動的に解決していく方法を今回は2つ考えてみます。

解決方法

今回は、以下2つの解消法を紹介します。

  • .node-versionファイルの作成
  • Voltaの導入

.node-versionファイルの作成

.node-versionファイルはNode.js のプロジェクトで使用する Node.js のバージョンを指定するためのファイルです。

node --version > .node-version

例えば、プロジェクトが Node.js のバージョン 14.15.1 を必要とする場合、.node-version ファイルに以下のように記述します。

14.15.1

対応状況が広く、他のNode.js のバージョン管理ツール(nvm, nodeenv, n)でも使用できます。

image.png

ただし、適用タイミングが自動的なものもあれば手動のものもあり、余分にファイルが増えてしまうというのがちょっと微妙です。

そこで自動的に適用かつファイルも増やさずに対応できる次の方法をお勧めします。

Voltaの導入

image.png

Voltaとは

Voltaは、Rust製のNode.js のバージョン管理ツールです。
https://volta.sh/

おすすめポイント

  • nodeのバージョン固定がコマンド1つでできる
  • package.jsonに記載されるため余計なファイルを増やさない
  • インストールが簡単
  • MacでもWindowsでも利用可能
  • 早い!

nodeのバージョン固定がコマンド1つでできる

プロジェクトのディレクトリでお使いのパッケージマネージャーに合わせてvolta pinコマンドを打つだけで設定完了です。
これで、該当プロジェクトに移動すると自動的にバージョンが切り替わってくれます!

volta pin node@12.20
volta pin yarn@1.19

package.jsonに記載されるため余計なファイルを増やさない

pinコマンドを打つと、package.jsonに以下のセクションが追記されます。
.node-versionのように新規で作成する必要はありません。

"volta": {
"node": "12.20.2",
"yarn": "1.19.2"
}

インストールが簡単

Macの方はhomebrewなら以下コマンド叩くだけです。パスも自動的に通してくれます。

brew install volta

Windowsの方も以下リンクからインストーラーをダウンロードします。
https://docs.volta.sh/guide/getting-started

減点ポイント

パッケージマネージャーのpnpmの対応状況がまだ実験的であるところです。
以下、公式です。一応使えるっぽいです。
https://docs.volta.sh/advanced/pnpm

最後に

Voltaのススメでした。
使い方もシンプルで、公式ドキュメントもさっと読める文量なのでぜひ使ってみてください!