【JS】Node.jsのバージョン管理をnodenvからvoltaに変更した理由と感想
こんにちは!ゴールデンウィークはCIに費やしました。Mizutani(@sirycity)です。CIいじるの楽しいね。
今日はNode.jsのバージョン管理ツールをnodenvからvoltaに変更した理由と、実際に変更してみた感想についてです。
Node.jsのバージョン管理ツールとは
Node.jsはいろんなバージョンがあるんだけど(超当たり前)、プロジェクトごとにバラバラのやつ使ってたりすると管理がめんどいのでバージョンを簡単に変えられるツールがよく使われます。それがバージョン管理。
有名なやつだと一昔前ならnodebrew。最近だとnodenvを使ってる人が多いんじゃないでしょうか。僕もずっとnodenvだった。でも今回voltaに変えた。
nodenvでちょっと不満だったところ
そんなに不満があったわけじゃないけどね。
M1Macでの挙動が微妙
これが最大の理由ですが、nodenvはM1Macの環境ではv15以下のバージョンをターミナルからインストールできないです。まあrosetta2でターミナル立ち上げれば問題ないけども、そこでひと手間あるのがちょっと嫌だった。
mac専用
windowsだとnodistってのを使わんといかんらしい(あんまりよく知らない)。でもmacでしか使えないってのがちょっと忌避感。いまどきクロスプラットフォームだよね!じゃあskecth使うな
バージョンの記述方法が独特
nodenvは.node-version
ってファイルにバージョンが記述されてそれでバージョンが管理できるんだけど、ちょっと記述方法が独特。jsonとかyamlにしてくれないと他ツールと連携しづらい。
nodeのバージョンしか管理できない
そらnodeの管理ツールだからな。
voltaについて
voltaはNode.jsのバージョン管理ツールです。すごい新しめのやつ。Rust製。最近フロントエンド系のツールでRust製多いよね。普通にhomebrewで落とせるよ。
voltaで良かったところ
npmとかも固定できる
nodenvはnodeのバージョンは固定できるけど、nodeの中に入ってるnpmとかは管轄外。yarn使ってる場合はyarnが入ってることも明示できない。 一方voltaはnodeはこのバージョンでnpmはこのバージョンみたいにどっちも指定できる。もちろんyarnも。
どんなプラットフォームでも使える
M1対応かんぺき。windowsでも使えるよ。Linuxも大丈夫!
速い
一応CIで測ってみたら4秒くらい速くなってた。nodenvも全然速かったけどね。Rustって付いたら全部速い。
jsonで管理できる
普通にpackage.jsonで管理できる。ちょっとめんどいけどeslintとかみたいに専用の設定ファイルも作れる。もちろんこっちもjson。 んでjsonだから他ツールと連携できたりする。nodeのバージョンを参照できたり。
voltaであんまり良くなかったところ
資料が少ない
nodenvに比べて資料は少ないです。新しいツールだからしょうがないね。例えば現在インストールしているバージョン一覧とかはnodenvだとnodenv versions
、voltaはvolta list all
なんだけどこのコマンドですらvoltaは調べるのに一苦労。
使えない機能がある
例えば配信されてるnodeのバージョン一覧とかはnodenvだとnodenv install --list
で確認できるけど、voltaにはそんな機能ない。あとnodeのバージョンをアンインストールする時もvoltaはディレクトリまで消しに行かなきゃいかん。nodenvは普通にnodenv uninstall 16.0.0
でできる。まあこの辺はnode専用のnodenvと汎用的なvoltaの違いかな?
(今の所は)あんまりメリットを感じない
npmとかyarnのバージョン固定できるのは嬉しいんだけど、パッケージ管理ツールのバージョンを固定する必要が果たしてあるのかはあんまり分かってないです。特にnpmはnodeに同梱されてるしね。…勿論、固定した方が良いに決まってるんだけどね。
新しいバージョン管理ツールのサポートがいまいち
具体的にはYarn2とpnpmのサポートがいまいちです。特に前者。もっとも、これらのツールが今後どうなっていくかがまだ不透明な部分もあるので現状しょうがない気もしますね。あとdenoは全くサポートなし。
さいごに
volta、まだまだ使い始めて1週間程度ですが今の所問題なく使えています。また本格的に3ヶ月くらい使ったら記事書こうかな?以上!