nodenvの環境構築

この記事では個人的にお勧めなnodenvのインストール方法と使い方について簡単に紹介していきたいと思います。

[anyenvを使ったインストール方法](https://qiita.com/282Haniwa/items/71a48a10952413416d18)も別の記事で紹介していますので、こちらも参考にしていただければと思います。

## nodenvのダウンロード

まず、nodenvのソースをGitHubからcloneしてきます。

```sh
git clone https://github.com/nodenv/nodenv.git ~/.nodenv
```


## nodenvのビルド

ダウンロードしてきたソースからnodenvをビルドして実行可能な状態にしましょう。

```sh
cd ~/.nodenv && src/configure && make -C src
```


## pathを通す

コマンドを叩けるようにパスを通しましょう。

- bashの場合

```sh
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(nodenv init -)"' >> ~/.bash_profile
```

- Ubuntu DesktopやWindows Subsystem for Linuxの場合

```sh
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(nodenv init -)"' >> ~/.bashrc
```

- zshの場合

```sh
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(nodenv init -)"' >> ~/.zshrc
```

- Fish shellの場合

```sh
set -Ux fish_user_paths $HOME/.nodenv/bin $fish_user_paths
echo 'eval (nodenv init - | source)' >> ~/.config/fish/config.fish
```

上記を参考に自分の環境に合ったコマンドを実行することでパスを通すことができます。

個人的にお勧めするパスの通し方はコンフィグファイルに以下のように記述する方法です。

`bash`と`zsh`で機能することを確認しています。

```sh:.zshrc
if [ -e "$HOME/.nodenv" ]
then
    export NODENV_ROOT="$HOME/.nodenv"
    export PATH="$NODENV_ROOT/bin:$PATH"
    if command -v nodenv 1>/dev/null 2>&1
    then
        eval "$(nodenv init -)"
    fi
fi
```

このように記述してパスを通しておくことで、nodenvを入れる予定のない環境へ`.zshrc`ファイルなどをコピーしたとしても、エラーを吐きません。

## シェルを再起動する

pathを通したらログインシェルを再起動して新しい設定ファイルを読ませましょう。

```sh
exec $SHELL -l
```

コマンドが正しくインストールされているかも確認しましょう。

```sh
nodenv --version
```

## プラグインをインストールする

nodenvはnodeのバージョンを管理するためのコマンドですが、プラグインを入れることで、nodeのインストールも行うことができます。

まず、プラグイン用のディレクトリを作ります。

```sh
mkdir -p "$(nodenv root)"/plugins
```

次に、`nodenv-build`をGitHubからcloneします。

```sh
git clone https://github.com/nodenv/node-build.git "$(nodenv root)"/plugins/node-build
```

これで`nodenv-build`のインストールは完了です。

あとは、nodenvのアップデートなどをプラグインまで含めて自動で行ってくれるプラグイン`nodenv-update`を入れておくのをお勧めします。

```sh
git clone https://github.com/nodenv/nodenv-update.git "$(nodenv root)"/plugins/nodenv-update
```

これで、`nodenv update`とコマンドを叩くことで、nodenvとそのプラグインを自動的にアップデートすることが可能です。


# nodenvの使い方

ここまでの準備ができていれば、nodenvは以下のようにして使うことができます。

## nodeのインストール

```sh
# インストールできるnodeのバージョンの確認
nodenv install --list

# nodeのインストール(12.16.3は本記事執筆時点でのLTSバージョン)
nodenv install 12.16.3

# nodenvからnodeやグローバルなnpmパッケージを見えるようにするためにrehashを行う
# 新しいnodeのバージョンを入れたり、npm install -gなどを行ったときに実行する必要がある
nodenv rehash
```

`npm install -g`のたびにrehashを行うのが面倒であれば
[nodenv-package-rehash](https://github.com/nodenv/nodenv-package-rehash)
のパッケージを入れることでそれを省略できます。


## インストールしているnodeのバージョンの確認

```sh
nodenv versions
```


## nodeのバージョンの指定

```sh
# グローバルで使うnodeのバージョンを指定する
nodenv global 12.16.3

# あるプロジェクトのディレクトリでのみ使うnodeのバージョンを指定する
nodenv local 12.16.3
```

`nodenv local`を実行することで、`.node-version`という名前の不可視ファイルが生成され、その中にそのディレクトリで使うnodeのバージョンが記述されます。

gitなどで`.node-version`を共有することで、プロジェクトのメンバーで使うnodeのバージョンを統一することもできます。


## nodeのアンインストール

特定のnodeを消したい場合はuninstallコマンドを使います。

```sh
nodenv uninstall 12.16.3
```

## nodenvのアップデート

```sh
# nodenv-updateをインストールしているとき
nodenv update

# nodenv-updateをインストールしていないとき
(cd "$(nodenv root)"; git pull)
(cd "$(nodenv root)"/plugins/node-build &amp;&amp; git pull)
```

## nodenvのアンインストール

`~/.nodenv`のディレクトリを消すだけです。

```sh
rm -rf $(nodenv root)
```

# まとめ

最後まで読んでいただきありがとうございました。
以上でnodenvのインストール・使い方は一通り終了です。
他にもいろいろな機能がありますので、公式のドキュメントを参考にして使っていってください。


# 参考

- https://github.com/nodenv/nodenv
- https://github.com/nodenv/node-build
- https://github.com/nodenv/nodenv-update
- https://github.com/nodenv/nodenv-package-rehash
- https://nodejs.org/ja/