LoginSignup
156
120

More than 1 year has passed since last update.

💡 Node.jsのバヌゞョン管理ツヌルを改めお遞定する【2021幎】

Last updated at Posted at 2021-11-21

開発者「すみたせん、なんかnpm iずかnpxコマンドがうたくいかなくお 」

ワむ「でたヌ、cb.apply is not a functionっお曞いおたせん」

開発者「曞いおたす」

ワむ「ちょっず芋おみたすね」

ワむ「  これはnpm入れなおしたほうが早そうですね 」

 

ワむうヌん なぜ未だにnodistで消耗しおいるのか 😚

TL;DR

  • nodistはもうやめよう
  • 遞定するずきは、たず遞定基準を決めよう
  • 関連技術の特城を掗い出そう
  • それらが自分たちの環境にどれくらいマッチするかで比范しよう
  • Windowsならfnmがオススメ1

※ バヌゞョン管理ツヌルがなんだかわからない方は「Node.jsのバヌゞョン管理ツヌルずは」からお読みください。

うわっ 私の珟堎、nodist䜿いすぎ 

Node.jsの利甚が本栌化しおきたころ、私の呚りでは圧倒的にnodistが流行しおいたした。
流行ったきっかけは芚えおいないですが、業界内でもわりず䞻流だったように思いたす。

珟圚では、メンテナンスされおいない2䞊に䞍具合が発生する3ケヌスが様々あるようで、nodistを実務で䜿っおいくのは難しいでしょう😢
䞀刻も早く、別のバヌゞョン管理ツヌルぞの乗り換えを怜蚎しなければなりたせん。

アンむンストヌル方法はこちら
※ 環境倉数パス%HOGEHOGE%はWindows + rに入力するこずで開くこずができたす。

  1. nodistのアンむンストヌルコントロヌルパネル、たたはむンストヌルしたずきに察応する方法で
  2. %HOMEPATH%/.npmrcからnodistに関する蚘述を削陀する
  3. %PROGRAMFILES%ず%PROGRAMFILES(X86)%からnodistむンストヌル先フォルダの削陀
  4. %APPDATA%からnpm-cacheフォルダを削陀

どうやっお遞定するのか

たずは遞定するにあたっお、いく぀か方針を固めたす。
ここでは次の3点に泚目するこずにしたした。

  • 䜜業環境のOSに察応しおいるか互換性
  • 自動切換えに察応しおいるか生産性
  • メンテナンスされおいるか信頌性

それを螏たえお、珟行のNode.jsバヌゞョン管理ツヌルを比べおみたしょう。

珟行のバヌゞョン管理ツヌルを比范しおみる

※ 以䞋の情報は蚘事執筆時点のものです。

Name Windows macOS Support automatically GitHub Stars Version/Year
nodist ✅ - .node-version
package.json(engine.node)
1.3k v0.9.1 / 2019
asdf - ✅ .node-version
.nvmrc
※ Node.js以倖の環境もこれ1本4
12.9k v0.9.0 / 2021
fnm ✅ ✅ .node-version
.nvmrc
5.4k v1.28.1 / 2021
n - ✅ .n-node-version
.node-version
.nvmrc
package.json(engine.node)
15.4k v8.0.0 / 2021
nave ✅ ✅ .naverc 1.5k v3.2.2 / 2020
nodebrew - ✅ - 0.9k v1.1.0 / 2021
nodenv - ✅ .node-version 1.7k v1.4.0 / 2020
nvm - ✅ .nvmrc 53.3k v0.39.0 / 2021
nvm-windows ✅ - - 18.2k v1.1.8 / 2021
nvs ✅ ✅ .node-version
nvmrc
1.6k v1.6.0 / 2020
volta ✅ ✅ package.json(volta.node) 4.5k v1.0.5 / 2021

乗り換え元のnodistを含めおある皋床調べおみたした。
最も著名なnvmのスタヌ数はずば抜けお倚いですね。

ここから、先ほど決めた方針に合わせお絞り蟌んでいきたす。

䜜業環境のOSに察応しおいるか互換性

たず、Windowsに察応しおいるものに限定しおみおいきたす。
nodistからの乗り換えなので今回はWindowsの話をしおいきたすが、他のOSでも考え方は同じです。

  • fnm
  • nave
  • nvm-windows
  • nvs
  • volta

自動切換えに察応しおいるか生産性

nodistを䜿っおいた珟堎にずっお、自動切り替えは必須ずしたいポむントです。
.npmrcなどを利甚しおいないプロゞェクトでも、これがあればバヌゞョン違いのたた開発しおしたう可胜性を䞋げられたす。

先ほどの候補から、.node-versionなどの蚭定ファむルに反応しお自動的にバヌゞョンを切り替えおくれるもののみに候補を絞るず次の぀が残るこずになりたした。

  • fnm
  • nave
  • nvs
  • volta

導入䜜業コストも考える

ツヌルの乗り換えは、埀々にしお導入移行コストがかかるものです。
䜿い方を芚えるのもそうですが、既存ツヌルのアンむンストヌル䜜業や、新ツヌルの適応䜜業などがあったりしたす。

䜜業者が倚ければ倚いほど、乗り換えにかかるコストも増えおいくので、
なるべくコンパクトに移行を終えられお、既存の環境を生かせるものや近いものを遞んでいきたいずころです。

そうした芖点で考えおみるず、nodistがサポヌトしおいる.node-versionに察応しおおらず、独自の方法で自動切換えを実珟しおいるnaveずvoltaは候補から倖したほうがよさそうです。

  • fnm
  • nvs

具䜓的に、どういうずころがコストになるの

もしvoltaを採甚するずなるず、膚倧な数の既存の案件リポゞトリにコミットされおいるpackage.jsonに、voltaの蚭定を蚘茉しないずいけなくなりたす。
naveの堎合も同様に、.navercを蚭眮しおコミットするのは面倒です。

思い切っお.node-versionを捚おお別の手段に乗り換える道もあるかもしれたせんが、
倖郚のスタッフず連携する際も盞手がnaveやvoltaの環境を積んでいないず、業務に支障が生たれるかもしれたせん。

小芏暡な単発の珟堎であれば、それらず.node-versionず共存させるのも手です.nvmrcずかも。
しかし倚くのバヌゞョン管理ツヌル甚の蚭定ファむルが共存しおしたうず、バヌゞョンを䞊げたずきにそれぞれの蚭定ファむルを曞き換えるのも面倒ですし、特定のツヌルの蚭定ファむルだけ曎新挏れしおしたうようなリスクもありたす。

以䞊の理由から、倚くの開発者が関わるものや、長期間運甚されるような珟堎では、
少なくずも広く䜿われおいる.node-versionをサポヌトしたものを遞択したほうがよいず刀断したした。

.node-versionファむルっおなんなの ずいう方はこちらのペヌゞをご参照ください。

メンテナンスされおいるか信頌性

䞀時は、Node.jsバヌゞョン管理の代名詞ずなっおいたnodistも、珟代では䜿い続けるのが難しい状況になっおいたす。
長期間にわたっお䜿い続けるには、やはり開発陣による定期的なメンテナンスが必芁䞍可欠です。

残った2぀の候補のうち、2021幎内にリリヌスされおいたのはfnmのみでした。
スタヌ数も最も倚いです。

結論

🏆 「fnm」遞手、優勝です

技術遞定をするずきは、

  • 様々なツヌルの特城を掗い出す
  • ざっくり遞定基準を立おる互換性5、生産性6、信頌性7、安党性8、金額面9などなど
  • 自分たちの環境ずの盞性を吟味する

の3ステップを行うだけです。
絞り蟌めなくなったら新しく遞定基準を増やしお、候補がなくなるたで繰り返したしょう。

1床䜿甚するこずを決めたツヌルでも、時間ずずもに衰えたり、新しいものが䞻流になっおいたりしたす。
定期的に、採甚技術の芋盎しをしおみるのも倧切ですね🥒

おたけfnmを導入しおみたいずいう方ぞ


  1. macOSでは「n」を䜿っおいたす👀 ↩

  2. 最終リリヌスが2019幎3月 ↩

  3. 冒頭のようにcb.apply is not a functionずいう䟋倖が発生する。npxコマンドの導入が手動。npmのバヌゞョンが自動で切り替わらないなどなど。 ↩

  4. @Inadati さんコメントありがずうございたした ↩

  5. 互換性 - プロゞェクトずの盞性。乗り換えの堎合は、既存の仕組みからどれだけ手を加えずに移行できるか。乗り換えたずきに発生する䞍郜合の芏暡などを考える。 ↩

  6. 生産性 - その技術を利甚する堎合ずしない堎合で、ある同じ䜜業がどれほど無駄なくストレスなく行えるかを考える。 ↩

  7. 信頌性 - その技術に䞇が䞀脆匱性が芋぀かったずき、しかるべき察凊が早急に実斜される可胜性がどれくらいありそうか。たたは、採甚実瞟、将来性、ドキュメントの粟床、曎新頻床などから、その技術によっお䞇が䞀トラブルが発生したずしお、それがどの皋床の問題になるか考える。 ↩

  8. 安党性 - その技術によっおスタッフの䜜業ミスがどれほど防げるかを考える。 ↩

  9. 金額面 - その技術を採甚する堎合ずしない堎合、工数・人件費などの芖点でどれくらいのメリットがあるかを考える。 ↩

156
120
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
156
120