Node.jsのバージョン管理ツールVoltaをちょっと紹介するのだ

に公開

この記事について

この記事は、ツールのバージョン管理にまだ手を出せていないWebエンジニアになりたての方のために、Node.jsのバージョン管理ツールVoltaについて書いているのだ。
Node.jsをインストールしたはいいけど、バージョンが違うから動かないとか、Node.jsのバージョンを上げたら動かなくなったとか、開発してるうちにそういったことがあると思うのだ。
そこでVoltaでNode.jsのバージョンを管理して、開発環境を整えていきたいと思うのだ。

ちなみにずんだもん口調なのはVOICEVOXでずんだもんにしゃべらせて遊んでた痕跡で、直すのが面倒だったからそのままにしているのだ。許してほしいのだ(懇願)。

Voltaについて

VoltaはNodeだけでなくnpm, yarn, pnpmなどのjavascript関連のパッケージマネージャのバージョン管理を行ってくれるすごいやつなのだ。
もしプロジェクトごとに異なるバージョンのNode.jsを使いたい場合や、手軽に最新バージョンのNode.jsを試したいときに便利なのだ。

実際にVoltaを使うとNodeやNode関連のツールを簡単にインストールしたりバージョン切り替え時できたりするのだ。

プロジェクトごとにpackage.jsonに書かれているNodeのバージョンも異なることが多いから、手軽に切り替えできるて互換性問題に対処しやすいのが便利なのだ。

そして、Voltaは最近流行りのRustという高速で安定な言語を使って書かれているから、実行速度も最適化されて爆速なのだ。

インストール方法

Voltaは公式サイトからインストールできるけど、そんなことをするエンジニアはいないのだ!(諸説あり)
だからそれぞれのOSごとに合っていて、将来的に使いやすい環境を作れるインストール方法を試してみるのだ!
OSごとに用意されているインストール用のツールには、VoltaだけでなくMinicondaやDockerなどのツールだけでなくGoogle DriveやDiscordなどの普段使いするアプリのバージョン管理もしてくれるものがあって、アプリ全てを一気にアップデートできたりもするから便利なのだ。

Windows

curlよりもwingetを使って将来的に様々なツールのバージョン管理をしやすくするのだ。Windows11なら標準で搭載されているからターミナルを開いて以下のコマンドを打ち込むのだ。

winget install -id Volta.Volta

これをターミナルで実行すれば一発でインストールできるだけでなく、wingetでインストールしたものは手軽にバージョンアップできるから便利なのだ。

Wingetでインストールしたものについては、

winget list

で確認できるし、

winget upgrade

でバージョンアップできるものの一覧を確認して、オプションでidを指定してアップデートするも良し、

winget upgrade --all

で全部一気にアップデートするも良しの優れものなのだ。

ツールを導入する際に面倒な依存関係の解消も勝手にやってくれるはずなのだ。

Mac

Macは使ったこと無いから分からないのだ…
ひとまずなんとなく分かるものについて書いておくのだ。

Homebrew

まだHomebrewをインストールしてなかったら以下をターミナルで実行するのだ。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

これでHomebrewのコマンドbrewが使えるようになるのだ。

Voltaを実際にインストール

brew install volta

これを実行してVoltaがインストールされるのだ。

こちらもbrewでインストールしたものを確認したいなら

brew list

で確認できるし、インストールされているものを全てアップデートしたいなら

brew update && brew outdated && brew upgrade && brew cleanup

で一発アップデートなのだ。

依存関係の解消もしっかりやってくれるシゴデキなやつなのだ。

Linux

Linuxならそれぞれのディストリビューションに合ったインストール方法を試してみてくれなのだ。

Ubuntu

curl https://get.volta.sh | bash

これを実行してあげたらインストールはできるのだ。

Arch

packmanを使う方法は見当たらなかったからyayを使うのだ。

yay -S  volta-bin

yayならpackman同様に面倒な依存関係解消を勝手にやってくれるから便利なのだ。

Voltaの使い方

ここまででOSごとにインストールしたVoltaをPCが実際に認識してくれるかは、

volta --version

を実行することで確認できるのだ。
できなかったらターミナルを一度落として再起動するのだ。

そうしたら実際にNode.jsをインストールしてみたいのだ。

念のため、もしすでにNode.jsがインストールされていてもVoltaでインストールしたNodeが優先されるので安心はしてほしいのだ。

どうしても気になるなら元々のものはアンインストールするのだ。

まず、単純に最新バージョンをインストールするなら、

volta install node

を実行するのだ。

もしプロジェクトごとにバージョンが指定されているなら、

volta install node@22.15.0(指定したいバージョンに適宜変更)

で簡単にインストールできるし、バージョンを固定したいなら

volta pin node@22

といった感じで固定できるのだ。

破壊方法も簡単で、もし環境構築をやり直したいとかでも

volta uninstall node

で気軽に破壊活動をできるのだ。

これで将来に渡りずっと安心してNodeを使い続けることができるようになれたのだ。

パッケージマネージャの違いについて

ここまででVoltaを使ってNode.jsをインストールしてきたけど、VoltaはNode.jsのバージョン管理だけでなくnpmやyarn, pnpmなどのパッケージマネージャのバージョン管理もできるのだ。

が、ここで待ってほしいのだ。

npmやyarn, pnpmなどのパッケージマネージャはそれぞれに特徴があって、どれを使うかはプロジェクトごとに異なるのだ。

ここではそれぞれのパッケージマネージャの特徴を簡単に説明するのだ。

npm

npmはNode.jsに標準で付属しているパッケージマネージャなのだ。

標準なだけあって文献も多く、Node.jsを使うならまずはnpmを使ってみるのが良いのだ。

注意点としてはNode.jsをインストールしたら自動的にインストールされるけど、Node.jsのバージョンを上げてもnpmのバージョンは上がらないから、Node.jsのバージョンを上げたらnpmも上げてあげる必要があるのだ。

さらにnode_modulesの中にインストールしたパッケージが全て入り、パッケージのバージョンの差によりnode_modulesディレクトリがネストし始めるから、node_modulesディレクトリのブラックホールが出来上がりプロジェクトの容量が大きくなってしまうのだ。

そこさえ気をつければ、npmはNode.jsを使う上でのデファクトスタンダードなパッケージマネージャなのだ。

yarn

yarnはFacebookが開発したパッケージマネージャなのだ。

npmの欠点を解消するために開発されたパッケージマネージャで、npmよりもパッケージを高速にインストールできるのが特徴なのだ。

ただし、npmと同じくnode_modulesの中にインストールしたパッケージが全て入るから、node_modulesディレクトリのブラックホールは解消されないのだ。

それに加えて、npmとyarnの両方を使うとnode_modulesディレクトリの中に同じパッケージが2つ入ってしまうことがあるから、npmとyarnの両方を使うのは気を付けないといけないのだ。

pnpm

pnpmはnpmのnode_modulesブラックホールを解決するために開発されたパッケージマネージャなのだ。

node_modulesディレクトリの中にインストールしたパッケージが全て入るのではなく、pnpmのキャッシュディレクトリにインストールしたパッケージが全て入るから、node_modulesディレクトリの中にはシンボリックリンクが作成されるのだ。

シンボリックリンクを作成するため管理者権限が必要になる場合もあるけど、プロジェクトの容量を大きくすることなくnode_modulesディレクトリのブラックホールを解消できるのが特徴なのだ。

おまけ: パッケージマネージャいっぱいありすぎ問題

とはいってもパッケージマネージャ初心者にはこれだけ種類があると分かりづらいと思うのだ。

そこでコマンド一つで自動でどのパッケージマネージャを使うか判別してコマンドを実行するすごいパッケージ、niというものがあったりするのだ。

niはlockファイルやpackage.jsonを見て、どのパッケージマネージャを使うか判別してくれるのだ。

詳しく書いてくれている記事もあるので、良ければそちらも参考にするのだ。

https://zenn.dev/yodaka/articles/fbf7c76cee7f8e

Discussion