node.jsをanyenvとndenvを使ってバージョン管理できるようにする

# アジェンダ

人から便利なものを教えてもらったのでメモ

- anyenvのインストール
- nodenvのインストール
- Node.jsのインストール

# anyenvのインストール

### anyenvをダンロードする

```shell-session
[vagrant@localhost ~]$ git clone https://github.com/riywo/anyenv ~/.anyenv
Cloning into '/home/vagrant/.anyenv'...
remote: Counting objects: 284, done.
remote: Total 284 (delta 0), reused 0 (delta 0), pack-reused 284
Receiving objects: 100% (284/284), 43.09 KiB | 0 bytes/s, done.
Resolving deltas: 100% (110/110), done.
[vagrant@localhost ~]$ ls -ltr .anyenv
total 8
drwxrwxr-x. 3 vagrant vagrant   28 Aug 15 08:26 share
-rw-rw-r--. 1 vagrant vagrant 3815 Aug 15 08:26 README.md
drwxrwxr-x. 2 vagrant vagrant 4096 Aug 15 08:26 libexec
drwxrwxr-x. 2 vagrant vagrant   62 Aug 15 08:26 completions
drwxrwxr-x. 2 vagrant vagrant   20 Aug 15 08:26 bin
```

### PATHの設定

`profile`ファイルに以下を追加
`anyenv`のパスを通すこと、`eval "$(anyenv init -)"`を追加する

```shell-session
[vagrant@localhost ~]$ cat .bash_profile
## 以下を追加 ###
ANYENV="$HOME/.anyenv/bin"
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ANYENV
export PATH

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

# ndenvのインストール

`ndenv`のversionが確認できればOK

```shell-session
[vagrant@localhost ~]$ anyenv install ndenv
/tmp/ndenv.20180815083714.30384 ~
Cloning https://github.com/riywo/ndenv.git...
Cloning into 'ndenv'...
remote: Counting objects: 63, done.
remote: Total 63 (delta 0), reused 0 (delta 0), pack-reused 63
Unpacking objects: 100% (63/63), done.
~
~/.anyenv/envs/ndenv/plugins ~
Cloning https://github.com/riywo/node-build.git...
Cloning into 'node-build'...
remote: Counting objects: 68, done.
remote: Total 68 (delta 0), reused 0 (delta 0), pack-reused 68
Unpacking objects: 100% (68/68), done.
~

Install ndenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.
[vagrant@localhost ~]$ anyenv version
ndenv: system (set by /home/vagrant/.anyenv/envs/ndenv/version)
```

# Node.jsのインストール

### Node.jsインストール

`ndenv install バージョン`でインストール可能。先にインストール可能バージョンをチェック

```shell-session
[vagrant@localhost ~]$ ndenv install -l
Available versions:
  v0.1.14
  v0.1.15
  v0.1.16
  v0.1.17
  v0.1.18
  v0.1.19
  v0.1.20
  v0.1.21
  v0.1.22
  v0.1.23
  v0.1.24
  v0.1.25
  v0.1.26
  v0.1.27
  v0.1.28
  v0.1.29

## 省略 ##
[vagrant@localhost ~]$ ndenv install v0.12.7
Downloading node-v0.12.7-linux-x64.tar.gz...
-> https://nodejs.org/dist/v0.12.7/node-v0.12.7-linux-x64.tar.gz
Installing node-v0.12.7-linux-x64...
Installed node-v0.12.7-linux-x64 to /home/vagrant/.anyenv/envs/ndenv/versions/v0.12.7
[vagrant@localhost ~]$ ndenv global v0.12.7
[vagrant@localhost ~]$ node -v
v0.12.7
```

### Node.jsのバージョンを切り替える

新たに`v0.12.18`をインストールし、ディレクトリ(プロジェクト)で切り替えられるようにする

```shell-session
[vagrant@localhost ~]$ ndenv install v0.12.18
Downloading node-v0.12.18-linux-x64.tar.gz...
-> https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.gz
Installing node-v0.12.18-linux-x64...
Installed node-v0.12.18-linux-x64 to /home/vagrant/.anyenv/envs/ndenv/versions/v0.12.18
[vagrant@localhost ~]$ mkdir hoge1
[vagrant@localhost ~]$ mkdir hoge2
[vagrant@localhost ~]$ cd hoge1
[vagrant@localhost hoge1]$ ndenv local v0.12.18
[vagrant@localhost hoge1]$ node -v
v0.12.18
[vagrant@localhost hoge1]$ cd ../hoge2/
[vagrant@localhost hoge2]$ node -v
v0.12.7
```

- `hoge1`では`v0.12.18`
- `hoge2`では`v0.12.7`

と切り替えが可能となった

# 追記

- v0.12.18はそれなりに古いversionらしいので、「v8.11.4」以降をオススメします
    - gulpを利用して開発している際に、npmが正しく動作しないパターンが何度かありました