Node.jsのバージョン管理にtj/nを使ってみた話(vs nvm, nodenv)


まえがき

この記事はmacユーザー向けです。

筆者はNode.jsを取り入れた・取り入れる予定のプロジェクトに4つほど携わってきて、それぞれ新規・運用と状況は違って、一番困るのが新規と運用両方のプロジェクトに携わる時で、使っているNode.jsのメジャーバージョンが違ったりします。こういう経験をしたことがある方も少なくないでしょう。

こういう時にNode.jsのバージョン管理をするための方法が必要になります。

どういうときですか

例えばプロジェクトAとBがあって、Aのプロジェクトではv6.14.4、Bのプロジェクトではv8.11.4使ってるとします。あなたはAのプロジェクトをメインで開発していましたが同じノートPCでBのプロジェクトの手伝いをすることになりました。仮想マシンなどを使って開発とかはしてません。そのままプロジェクトBにやってきましたがどうやらv6.14.4だと動かない機能がありました。さあどうしますか?

-> プロジェクトAではv6.14.4, プロジェクトBではv8.11.4を使いましょう。これをNode.jsのバージョン管理と呼びました。

Node.jsのバージョン管理

Node.jsのバージョン管理が行えるライブラリは、有名どころだと以下の3つだと思ってます。

Macを使っていたらどれもhomebrewからインストールすることができるので、 $ brew install$ brew uninstall コマンドと~/.bash_profile, $PATH環境変数だけ頭にたたきこんだら実際使ってみるのが早いと思います。

結論

nおすすめです。

比較

項目\ライブラリ nvm nodenv n
Latest version 0.33.11 1.1.2 2.1.11
Contributors 223 85 63
Commit activity ×

(2018/09/10時点)

リリースバージョンに関する話をすると、nvmはメジャーバージョンが0なのでその辺気にする人はnodenvかnでしょうか。ただ一番メンテナンスされてないのはnodenvみたいです。

nvmとnはコマンドでバージョンを指定してnodeを実行することができます。nodenvは.node-versionというファイルにバージョン情報を書き込み参照するような方式なのですが文化の違いといった感じで出来ること自体はおそらく同じです。

tj/n便利

nは任意のNode.jsのバージョンを、例えば$ n v6.9.1 でインストールできて、 $ n でインストール済みのものから選択できる画面になります。

なのでいちいち$ nodenv versionsして$ nodenv install v6.9.1とか$ nodenv global v6.9.1とかやらなくても済むので考えることが減ってよさそうです。

上に挙げたプロジェクトごとにバージョンが違う場合ですけど、実際のところ例えば作ったプログラムとかサーバー動かす時ってyarnとかnpm使って$ yarn startとか$ npm startってやるためにpackage.json書くと思うので、みんながtj/n入れることを前提にできるならscripts"start": "n use v6.9.1 index.js"みたいに書いておけばよさそうな気がします。ちなみにフラグも使えるみたいです。

あとがき

…Qiita書いてて毎回思うんですが、別inputでタイトル入力させるのに記事内でh1相当のタグ#が使えるんだなあと。

なので#に何を書けばいいか迷います(というか、普通##で書くところをQiitaだと#で書かないといけないんだろうけどうーんって感じです)

マークアップ確認してみたんですが、どうやら予想通りタイトルはh1, ## はh2として扱われているのであえて#を使うとページ内にh1が重複してしまう始末になりそうです。でも、sectionが分かれていて(?)厳密に言うとh1を1つ追加しないといけないです。
なのでタイトルを2つ書けと…そういうことなんでしょうか…