Salesforceコンサルティングパートナーに認定されました
2024.10.17
目次
こんにちは、s-hayaです。
前回の投稿からなんと、3年以上も間が空いてしまいました。
うわっ…私のブログ更新頻度、低すぎ…?
今回は重い腰を上げて、Node.jsのバージョン管理ツールについてブログに綴りたいと思います。
これまでオークンでは、Node.jsのバージョン管理にnodebrewを採用していました。
1ヶ月ほど前、自分の開発機をM1 MaxのMacBook Proに移行することになり、この機会に使用するアプリやツールを精査することにしました。
nodebrewについても精査対象となり、色々と調査した結果Voltaを試してみることにしました。
そこで今回は、Voltaを選定した理由と使用感についてご紹介しようと思います。
オークンでは2018年に初めてNode.jsを採用しました。
その際、macOS上での実行環境をどのように構築するか調査を行いました。
複数のプロジェクトを並行で開発することがあるので、それぞれで固有のNode.jsのバージョンを使用できないかと考えていました。
色々と調べる中で、Node.jsのバージョン管理ツールなるものが存在することを知りました。
いくつかの選択肢がある中で、nodebrewを会社標準として採用することになりました。
それから約3年間、特に違和感なく使用していましたが、新しいマシンのセットアップ時にふと思いました。
「nodebrewにこだわる必要なくね?」
そこで改めてnodebrewの現状について調査してみました。
公式のGitHubリポジトリを見たところ、現行バージョンのリリースが今年の4月。
その前のバージョンは2018年の9月。
なんと、nodebrewを採用した頃からほぼ更新がなかったのです。
メンテナンスの頻度が低いことになんとなく不安を覚え、のりかえを決意しました。
nodebrewの利用をやめるとして、次はどのツールにするのか。
のりかえ先を考える上で、他のバージョン管理ツールについて調査してみました。
いろいろ見てみましたが、個人的にはVoltaに好印象を受けたので、こちらを採用することにしました。
良さそうと感じたところを以下にまとめてみます。
公式ドキュメントに、Voltaの特徴について以下のように書かれていました。
Features
- Speed ⚡
- Seamless, per-project version switching
- Cross-platform support, including Windows and all Unix shells
- Support for multiple package managers
- Stable tool installation—no reinstalling on every Node upgrade!
- Extensibility hooks for site-specific customization
この中でも特に、プロジェクトごとにシームレスにバージョンを切り替えることができ、複数のパッケージマネージャをサポートしている点に魅力を感じました。
プロジェクトごとにどのバージョン・パッケージマネージャを使うかが変わってくるので、ここを強みとして謳っているのは心強いです。
本当にドキュメント通りなのか疑うわけではありませんが、自分の手で動かして使用感を確かめました。
ドキュメントには、以下のインストールコマンドをUnix向けとして記載されています。
$ curl https://get.volta.sh | bash
ですが、Voltaを調べる中でHomebrewをサポートしているとの記述を目にしたので、私はそちらでインストールしました。
$ brew install volta $ volta -v 1.0.5
volta install node@16.13.1
のようにバージョンを明示的に指定することもできれば、 volta install node@16
と書くと適切なマイナーバージョンを自動でインストールしてくれます。
何も指定しない場合は最新のLTSバージョンをインストールしてくれるとのことなので、私はこちらでインストールしました。
$ volta install node success: installed and set node@16.13.1 (with npm@8.1.2) as default $ node -v v16.13.1
…早い!
まず、このインストールが高速!
え、もう終わったの!?って感覚でした。
2つのディレクトリを用意し、それぞれをプロジェクトと見立てます。
$ mkdir project1 $ mkdir project2
作成したそれぞれのディレクトリで npm init
を実行します。package.json
が生成されるので、 volta pin
コマンドでバージョンを固定します。
$ cd project1 $ npm init $ volta pin node@16.13.1 success: pinned node@16.13.1 (with npm@8.1.2) in package.json $ volta pin yarn@1.22.1 success: pinned yarn@1.22.1 in package.json $ cat package.json { "name": "project1", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "volta": { "node": "16.13.1", "yarn": "1.22.1" } }
$ cd project2 $ npm init $ volta pin node@14 success: pinned node@14.18.2 (with npm@6.14.15) in package.json $ volta pin yarn@1.22.17 success: pinned yarn@1.22.17 in package.json $ cat package.json { "name": "project2", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "volta": { "node": "14.18.2", "yarn": "1.22.17" } }
package.json
にVoltaによって各バージョンが固定された旨の記載が追加されます。
Voltaがインストールされた環境で package.json
にこの記載があれば、 node
コマンドや npm install
を実行することで、自動的に指定のNode.js・パッケージマネージャがインストールされます。
この package.json
をGitHubなどのVCSで管理することにより、同じプロジェクトのメンバーはNode.jsのバージョンを意識することなく開発することができます。
これがVoltaの誇る利点であり、それ以外のバージョン管理ツールと大きく異なる点だと感じました。
以上でそれぞれのプロジェクトにおいてNode.jsとパッケージマネージャのバージョンが固定できたので、ディレクトリを移動して各バージョンを確認してみます。
$ cd project1 $ node -v v16.13.1 $ npm -v 8.1.2 $ yarn -v 1.22.1
$ cd project2 $ node -v v14.18.2 $ npm -v 6.14.15 $ yarn -v 1.22.17
Voltaによってバージョンが固定されているので、ディレクトリを移動するだけで指定のバージョンに自動で切り替えられます。
いい感じですね!
今回Voltaを試してみて、導入が容易かつ想像以上に使いやすいと感じました。
このまま会社標準として採用して良いのではないかと思っています。
既存のプロジェクトについては移行作業の手間もあるので、まずは新規プロジェクトから導入していきたいですね。
それではまた。
Salesforceコンサルティングパートナーに認定されました
2024.10.17
入社して3ヶ月が経ちました🌼
2024.10.5
東京オフィスに入社して2ヶ月が経ちました!
2024.10.1
オークンの成長を支える新たな仲間たちが来てくれました!
2024.8.30
Apple Vision Proを購入して40時間くらい使いまくった結果
2024.7.12