MacにNode.jsをインストール（anyenv + nodenv編）

nodenvコマンド早見表は[こちら](https://qiita.com/kyosuke5_20/items/220d62e7007ae51dbb52)

# プロジェクトごとにNode.jsのバージョンを管理できる
nodebrewだと`nodebrew use [バージョン番号]`みたいに切り替えるのが大変ですが、nodenvだと簡単にできるっぽいのでこっちを使ってみます。
いろいろなプロジェクトに関わってくるとこういうのがすごくありがたい。
開発者の方に感謝です。

# インストールの流れ
1. Homebrewのインストール
1. anyenvのインストール
1. nodenvのインストール
1. Node.jsのインストール

### ・Homebrew
HomebrewはMac用のパッケージマネージャ。
ツールのインストールとか諸々を管理してくれます。
http://brew.sh/index_ja.html
nodebrewをインストールするためにHomebrewを使います。

### ・nodenv
順番前後しますが、これがメイン。Node.jsのバージョン管理ツール。
https://github.com/nodenv/nodenv

### ・anyenv
様々なenv系ツールをまとめてくれるらしい。
https://github.com/anyenv/anyenv
他のenv系ツールも含めてインストールを管理してくれるので便利です。
ということでanyenvを使ってみます。

# Homebrewインストール
まずはHomebrewから。
Mac使ってるとこれはまあ外せない。
もうインストール済みって人はスキップで。

http://brew.sh/index_ja.html にあるスクリプトを実行する。

```shell
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

※ 2019/12/23現在は上記

インストール後は以下コマンドでHomebrewのバージョンが確認できます。

```shell:コマンド
brew -v
```

私の場合は以下でした。

```shell:結果
Homebrew 2.1.11
Homebrew/homebrew-core (git revision be0385; last commit 2019-09-12)
Homebrew/homebrew-cask (git revision d34609; last commit 2019-09-12)
```

# nodebrew使っている場合

現在nodebrewを使っている場合、nodebrew用に設定していた環境変数をコメントアウトします。
nodebrewを使っていた人はこちらをやっておいたほうがベター。
使ったことないって人はスキップでOKです。
私の場合、nodebrewが優先になるように記述していたのでコメントアウトしました。

```shell:コマンド
vi ~/.zprofile
```

```shell:~/.zprofile
# export PATH=$HOME/.nodebrew/current/bin:$PATH
# ↑この部分をコメントアウト

```
viを使ってコメントアウトしました。
まあ、テキストエディタならなんでも良いと思うので適宜使いやすいやつを使ってください。

# anyenvインストール

### Homebrewを使ってanyenvインストール
さっそくインストールしていきましょう。

```shell:anyenvのインストール
brew install anyenv
```

### そして初期化

```shell:初期化コマンド
anyenv init
```

```shell:結果
# Load anyenv automatically by adding
# the following to ~/.zshrc:

eval "$(anyenv init -)"
```

指示通りに`~/.zshrc`に追記

```shell:コマンド
echo 'eval "$(anyenv init -)"' >> ~/.zshrc
```

ターミナルをリロードしてみます。

```sh:コマンド
exec $SHELL -l
```

```shell:結果
ANYENV_DEFINITION_ROOT(/Users/whoami/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by:
> anyenv install --init
```

>You'll see a warning if you don't have manifest directory.

ディレクトリが無いと怒られているので、マニフェストディレクトリ作ります。

### マニュフェストディレクトリを作る

指示に通り`anyenv install --init`と打ってみます。

```shell:コマンド
anyenv install --init
```

```shell:結果
Manifest directory doesn't exist: /Users/whoami/.config/anyenv/anyenv-install
Do you want to checkout ? [y/N]: y
Cloning https://github.com/anyenv/anyenv-install.git master to /Users/whoami/.config/anyenv/anyenv-install...
Cloning into '/Users/whoami/.config/anyenv/anyenv-install'...
remote: Enumerating objects: 48, done.
remote: Total 48 (delta 0), reused 0 (delta 0), pack-reused 48
Unpacking objects: 100% (48/48), done.
```

途中check outするかってきたので「y」で承諾します。
再度ターミナルのリロード`exec $SHELL -l`するとエラーが解消されていることがわかります。


※以下のようなエラーが出る場合があるようです。

```sh:エラー
Cloning https://github.com/anyenv/anyenv-install.git master to /Users/xxxxxx/.config/anyenv/anyenv-install...
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
```

CommandLineToolsがインストールされていないようなので以下のコマンドを実行してインストールしてから再度、`anyenv install --init`を実行してください。

```shell:コマンド
% xcode-select --install
```

# nodenvをインストール

さっそくanyenvでやってみましょう！
`anyenv install nodenv`を実行すればnodenvがインストールできます。

```shell:コマンド
anyenv install nodenv
```

```shell:結果
/var/folders/sn/v1hx7kls3t3f2d9s2r40krns6qc63m/T/nodenv.20191223143232.16265 ~
Cloning https://github.com/nodenv/nodenv.git master to nodenv...
Cloning into 'nodenv'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 3915 (delta 4), reused 13 (delta 2), pack-reused 3897
Receiving objects: 100% (3915/3915), 696.59 KiB | 1.04 MiB/s, done.
Resolving deltas: 100% (2579/2579), done.
~
~/.anyenv/envs/nodenv/plugins ~
Cloning https://github.com/nodenv/node-build.git master to node-build...
Cloning into 'node-build'...
remote: Enumerating objects: 77, done.
remote: Counting objects: 100% (77/77), done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 18197 (delta 33), reused 42 (delta 11), pack-reused 18120
Receiving objects: 100% (18197/18197), 3.19 MiB | 2.46 MiB/s, done.
Resolving deltas: 100% (11638/11638), done.
~
~/.anyenv/envs/nodenv/plugins ~
Cloning https://github.com/nodenv/nodenv-default-packages.git master to nodenv-default-packages...
Cloning into 'nodenv-default-packages'...
remote: Enumerating objects: 267, done.
remote: Counting objects: 100% (267/267), done.
remote: Compressing objects: 100% (151/151), done.
remote: Total 531 (delta 151), reused 202 (delta 105), pack-reused 264
Receiving objects: 100% (531/531), 113.88 KiB | 291.00 KiB/s, done.
Resolving deltas: 100% (272/272), done.
~
~/.anyenv/envs/nodenv/plugins ~
Cloning https://github.com/nodenv/nodenv-vars.git master to nodenv-vars...
Cloning into 'nodenv-vars'...
remote: Enumerating objects: 211, done.
remote: Total 211 (delta 0), reused 0 (delta 0), pack-reused 211
Receiving objects: 100% (211/211), 31.82 KiB | 264.00 KiB/s, done.
Resolving deltas: 100% (76/76), done.
~

Install nodenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.
```

インストール成功です！
最後にプロファイルのリロードして使用できるようにします。

```shell:コマンド
exec $SHELL -l
```

`env`で環境変数がどうなったかみてみます。

```shell:コマンド
env   
```

```shell:結果  
PATH=/Users/whoami/.anyenv/envs/nodenv/shims:/Users/whoami/.anyenv/envs/nodenv/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/sbin:/Users/k
akai/.nodebrew/current/bin
NODENV_ROOT=/Users/whoami/.anyenv/envs/nodenv
NODENV_SHELL=zsh

(他省略)
```

nodenvやらanyenvのパスがPATHに追加されてますね。
NODENV_ROOTとかNODENV_SHELLみたいなのも追加されてます。
これで下準備は整いました。

# Node.jsのインストール
### インストール可能なバージョンを見る

```shell:コマンド
nodenv install -l
```

### Nodeの最新バージョンを取得するためにanyenv-updateプラグインをインストール

`nodenv install -l`を実行しても使いたい最新のNodeバージョンが一覧に表示されないことがあります。
最新のNodeバージョン使えるようにするためにanyenv-updateプラグインをインストールします。

```shell:コマンド
mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
```

プラグインのインストールは上記で完了です。
以下を実行すればNodeバージョンの一覧を更新することができます。

```shell:コマンド
anyenv update
```

### Node.jsをインストール
以下を実行すれば指定したバージョンをインストールできます。

```shell:コマンド
nodenv install {バージョン番号}
```

ちなみにアンインストールは`~/.anyenv/envs/nodenv/versions`あるディレクトリを削除すれば良いようです。
以下のコマンドでインストール済みのバージョンを確認できます。

```shell:コマンド
nodenv whence npm
```

### nodenv globalでコンピュータのデフォルトに指定
`nodenv global`でコンピュータのデフォルトを指定してみます。
指定できるのはインストールしたバージョンです。

```shell
nodenv global {バージョン番号}
```

僕は10.0.0にしてみました。
確認してみましょう。

```shell:コマンド
node -v
```

```shell:結果
v10.0.0
```

10.0.0になってることが確認できます。

### nodenv localでプロジェクト指定
`nodenv local`を使えばプロジェクト指定できるみたいです。
早速使ってみます。

```shell:コマンド
# プロジェクトのパスに移動し
cd {プロジェクトのパス}
# 配下で実行
nodenv local {バージョン番号}
```

実行するとプロジェクト配下に.node-versionっていうファイルができました。
中をみるとバージョン番号が記述されてます。

```:.node-version
{バージョン番号}
```

8.8.0を指定してみたので確認してみましょう。

```shell:コマンド
node -v
```

```shell:結果
v8.8.0
```

これでNodeの切り替えが楽になりました。

ちなみに`nodenv shell`コマンドだとシェルごとに変えられるっぽいです。
是非みなさんも使ってみてください。


# 参考
nodenv
https://github.com/nodenv/nodenv

anyenv
https://github.com/anyenv/anyenv

anyenv-update
https://github.com/znz/anyenv-update