今回は、業務でNode.jsのバージョン管理ツールである『Volta』を導入し、かなり良かったので備忘録としてまとめていきたいと思います。
「Volta」は、プロジェクトフォルダ単位でnode.jsのバージョンを切り替えることができ、構築作業の煩わしさもないので大変おすすめです。
この記事では、Voltaの導入手順と使い方について簡単にまとめていきますので、少しでも誰かの参考になれば幸いです。
Voltaについて
Voltaとは?
Voltaは、手間いらずのJavaScriptツールマネージャと公式では説明されており、
Node.jsのバージョン管理だけではなく、npm・yarn のバージョン管理も行うことが可能となっております。
他のバージョン管理ツールには、nvmやnodebrewなど色々とありますが、その中で2020年12月にv1.0.0をリリースしている比較的新しいバージョン管理ツールです。(現在はv1.1.1 Github – Volta)
Voltaの特徴
Voltaの代表的な3つの特徴については以下です。
⚡ Fast
あらゆるJSツールを迅速かつシームレスにインストールし、実行することができます。VoltaはRustで構築され、軽快な静的バイナリとして出荷されています。
⚡ Reliable
堅実プロジェクトに参加するすべての人が、ワークフローを妨げることなく、同じツールを使用できるようにします。
⚡ Universal
ユニバーサルパッケージマネージャ、Nodeランタイム、OSを問わず、volta installという1つのコマンドで済みます。
上記の特徴も兼ねて、実際に業務でVoltaを使ってみて良かった点としては以下です。
- プロジェクト単位でバージョンをシームレスに切り替え可能
楽になりました。結果、バージョン違いによるパッケージ依存関係のエラーもなくなった。 - 新規メンバーも含めて環境構築が効率化
- プロジェクト毎の使用バージョンが明示
導入手順
他のNode.jsバージョン管理ツールやそのツールでインストールされたNode.jsやnpmをアンインストール
インストールはコマンド1発でOK!….簡単。
installやfetchなど実際に必要なバージョンをインストール
プロジェクト間をシームレスに切り替えするための準備
Voltaのサブコマンドを一覧化
導入・構築手順
各種アンインストール
これまで使っていた他のNode.jsバージョン管理ツールや既にインストールされているNode.jsやnpmを削除してから、voltaのインストール作業を実施していきます。
アンインストールの手順としては、以下を参考に実施しました。
Node.js を完全にアンインストールする
諸々をアンインストール&削除して、以下の状態になれば準備完了です。
$ node -v
zsh: command not found: node
$ npm -v
env: node: No such file or directory
export PATH=$HOME/.nodebrew/current/bin:$PATH
Voltaのインストール
いよいよvoltaをインストールしてきます。
公式の通りに以下コマンドを実施します。
$ curl https://get.volta.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10930 100 10930 0 0 12348 0 --:--:-- --:--:-- --:--:-- 12665
Installing latest version of Volta (1.1.1)
Checking for existing Volta installation
Fetching archive for macOS, version 1.1.1
######################################################################## 100.0%
Creating directory layout
Extracting Volta binaries and launchers
Finished installation. Updating user profile settings.
Updating your Volta directory. This may take a few moments...
success: Setup complete. Open a new terminal to start using Volta!
上記コマンドを実行すると、.zshrc
のパスが自動的に追加されます。( zsh
の場合)
export VOLTA_HOME="$HOME/.volta"
export PATH="$VOLTA_HOME/bin:$PATH"
パスが追加されたら、ターミナルを再起動するか、source
コマンドを実行し、変更反映を忘れにように。
$ source ~/.zshrc
$ volta -v 07:31:04
1.1.1
volta -v
を実行し、バージョンが表示されれば無事にインストールは完了です。
Nodeのインストール
次にvoltaを使ってnodeをインストールしていきます。
インストールの指定方法はいくつかあり、代表的な方法をピックアップします。
volta install node
: latestやバージョン指定を省略することができ、その場合最新のLTSリリース版が選択されるvolta install node@16
: メジャーバージョンのみ指定し、その最新版が選択される(v16.19.1
がインストールされました)volta install node@16.18.1
: 正確なバージョンを指定する
実際にvolta install node
を実行すると、以下のバージョンがインストールされました。
$ volta install node
success: installed and set node@18.15.0 (with npm@9.5.0) as default
$ node -v
v18.15.0
$ npm -v
v9.5.0
install
コマンドを実行すると、デフォルトバージョンとして設定されます。
そのため、デフォルトバージョンとしては使用したくないけど、手元にはインストールしておきたい場合は、fetch
コマンドを使用します。(ダウンロードやgit pull
的なイメージ)
$ volta fetch node@14 22:54:12
success: fetched node@14.21.3 (with npm@6.14.18)
プロジェクトにバージョンを固定
次にプロジェクト毎にNode.jsのバージョンを固定していきます。
固定することによって、プロジェクト間でのシームレスなバージョン切り替えが可能となります。
固定方法としては、pin
コマンドを使って行います。
$ volta pin node@16.18.1
success: pinned node@16.18.1 (with npm@8.19.2) in package.json
$ volta pin npm@8.19.2 07:35:53
success: pinned npm@8.19.2 in package.json
pinコマンドを実行後、package.json
に以下の記述が追加されます。
"volta": {
"node": "16.18.1",
"npm": "8.19.2"
}
これでプロジェクト単位でNode.jsのバージョンが固定されました。
Voltaのコマンド
最後に、voltaで使用する各種コマンドについて簡単にまとめました。
fetch
: ローカルマシンにツールを取得する
使用例:volta fetch node
install
: nodeやnpmツールをインストールする
使用例:volta install node
詳細はコチラuninstall
: ツールをアンインストールする
使用例:volta uninstall node
pin
: プロジェクトのランタイムまたはパッケージマネージャーをピン留め。プロジェクトが依存するツールのバージョンが固定される
使用例:volta pin node@16.18.1
list
: 現在のツールチェーンを表示する。現在インストールされているツールのバージョンを確認できるcompletions
: Voltaの補完を生成します。コマンドラインでの入力を簡素化できるwhich
: 実際に呼び出されるバイナリを検索する
実行可能ファイルの場所を表示setup
: 現在のユーザー/シェルに対してVoltaを有効にする
実際、よく使うのは① 〜 ⑤ だけかと思いますが、他にも色んなことができるので詳しくは公式ドキュメントをご覧ください。
まとめ
以上、Voltaの導入手順と使い方について簡単ではありますがまとめました。実際、業務においても非常に使いやすいツールで、導入に手間がかからないので、ぜひ使ってみてほしいです。ちなみにチームメンバーからも大変好評でした。特に、プロジェクト単位でバージョンをシームレスに切り替えることができるので、パッケージ依存関係のエラーなども回避できます。
今回の記事が少しでも皆さんのお役に立てれば幸いです。ご覧いただきありがとうございました。