Ikkyu's Tech Blog

技術系に関するブログです。

nvmを使用してNode.jsのversionを管理する

New PCにしたので、前から気になっていた nvm を使用してNode.jsのversionを管理できるようにしました。

ググればいっぱいよさげな記事が出てきますが、せっかく調べたりしたので...まとめます!!

※ 「Docker使えばversion管理ツールなんていらないじゃん?🔪」っということを思われるかもしれませんが、Docker使った開発の方法は、別でまとめようと思っています。

間違いなどありましたら、ご指摘いただけると嬉しいです。よろしくお願いします🙇‍♂️

前提条件

bashを使用した説明のみとします。
※ 既にbashrcが作成されているとします。ない場合は、ターミナル上でtouch ~/.bashrcを実行して作成してください。 ※ .bashrcの変更ができる人を対象としています。

環境

なぜnvm?

Node.jsのversionを管理する方法は他にもいくつかあります。

以前はnodebrewを使っていました。とても使いやすかったです。

では今回なぜnvmにしたかと言いますと、

  • プロジェクト毎にversion管理したい
  • みんな使っている

というのが理由です。

例えば、

AWSのLambdaではNode.jsは8.10使いたいけど、こっちのプロジェクトはサーバとして使いたいから、最新版を使いたい!」

というようなケースが出てきたからです。😇

nvm導入

それではインストールしていきます。

なお作業ディレクトリは、ホームディレクトリ(~/)で行います。

install

ターミナルを起動して、以下をコピペしてEnterキーを押してください。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

そうするとダウンロードがはじまり、以下のように出力されます。※ユーザ名はユーザ名に変えています。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 13226  100 13226    0     0  43993      0 --:--:-- --:--:-- --:--:-- 44086
=> Downloading nvm from git to '/Users/ユーザ名/.nvm'
=> Cloning into '/Users/ユーザ名/.nvm'...
remote: Enumerating objects: 278, done.
remote: Counting objects: 100% (278/278), done.
remote: Compressing objects: 100% (249/249), done.
remote: Total 278 (delta 33), reused 88 (delta 16), pack-reused 0
Receiving objects: 100% (278/278), 142.36 KiB | 1.48 MiB/s, done.
Resolving deltas: 100% (33/33), done.
=> Compressing and cleaning up git repository

=> Appending nvm source string to /Users/ユーザ名/.bashrc
=> Appending bash_completion source string to /Users/ユーザ名/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

/Users/ユーザ名/.nvmに保存されました✌️

~/.bashrcを編集

~/.bashrcに追加します。

# nvmの設定
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

.bashrcを読み込み

変更を反映させます。

source .bashrc

nvmコマンドが使用できるか確認します。

nvm --version

以下のようにnvmのバージョンが出力さればOKです👌

0.34.0

Node.jsをinstall

1. 利用可能なversionを確認してみる

それではv8.10.0と最新版をinstallします。まずは、利用できるversionを確認します。

nvm ls-remote

v8.10.0と最新版(2019/5/2現在はv12.1.0)が利用できることがわかります。

2. installしてみる

最新版

nvm install node

version指定

nvm install 8.10.0

※ 最初にinstallされたversionがdefaultとなります。あとでdefaultは変更できます。

3. installしたversion一覧を確認してみる

~$ nvm ls

->      v8.10.0
        v12.1.0
default -> node (-> v12.1.0)
node -> stable (-> v12.1.0) (default)
stable -> 12.1 (-> v12.1.0) (default)
iojs -> N/A (default)
unstable -> N/A (default)
lts/* -> lts/dubnium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.16.0 (-> N/A)
lts/dubnium -> v10.15.3 (-> N/A)

現在はv8.10.0を使用しています。

4. versionを変更してみる

versionを変更してみます。コマンドは以下の通りです。

nvm use <version>

それではv12.1.0に変更してみます。

~$ nvm use 12.1.0
Now using node v12.1.0 (npm v6.9.0)

~$ node -v
v12.1.0

変更できました!😀

5. .nvmrcを使用してみる

プロジェクトのルートディレクトリに.nvmrcを作成することで、Node.jsのversionを固定することが可能です。

例えば、
lambda-sampleというプロジェクトを作成し、そのプロジェクトではversionを8.10.0で固定化したい場合は、

~$ node -v # 12.1.0がデフォルトのversionとなっています。
v12.1.0

~$ mkdir lambda-sample

~$ cd lambda-sample

lambda-sample$ echo "8.10.0" > .nvmrc # version指定(nvmが理解できる文字列でも可能 ex. lts/*)

lambda-sample$ nvm use
Found '/Users/ユーザ名/lambda-sample/.nvmrc' with version <8.10.0>
Now using node v8.10.0 (npm v5.6.0)

lambda-sample$ node -v
v8.10.0

切り替わりました! 😊

6. 自動で切り替えてみる

.nvmrcで設定したversionに切り替えるにはnvm useを実行する必要があります。

そうです。

自動で切り替えしたい!😇

エンジニアなら誰もがそう思うと思います。私もそう思います。

自動で切り分ける方法として、公式のREADMEには2つの方法が載っています。

  • avnを使用する
  • ~/.bashrcにREADMEに載っているレシピを追加する

今回は、.bashrcにレシピを追加する方法にします。軽量という言葉に弱い...

※ READMEに書いてありますが、この追加するレシピはnvmの開発チームはサポートしていません。nvmのユーザから提供されたものです。(素晴らしい🎉)

レシピをコピーします

公式のREADMEから追加する内容をコピーしてきます。(レシピが長いのでリンクで対応しました。)

~/.bashrcを編集します

lambda-sample$ cd # ホームディレクトリに移動します。
~$

~/.bashrcにコピーしたレシピを追加します。

## nvm use を自動で呼ぶ設定
find-up() {
  ...

.bashrcを再読み込みします

変更を反映させます。

source .bashrc

確認します

現在のNode.jsのversionを確認します。

~$ node -v
v8.10.0

5. .nvmrcを使用してみるで切り替えたNode.jsのversionのままです。

では自動的に変更されるか確認してみます。

~$ cd
Now using node v12.1.0 (npm v6.9.0)

.nvmrcがないのでデフォルトのv12.1.0に切り替わりました🎉

defaultを変更してみる

一番最初にinstallされたversionがデフォルトになってしまうので、defaultを変更します。

~$ nvm alias default 8.10.0
default -> 8.10.0 (-> v8.10.0)

OK👌

以上でNode.jsのversionをnvmで管理できるようにしました。

より知りたいという方は、公式のREADMEを見たり、nvm --helpを見てください。