anyenvで開発環境を整える


![87063.png](https://qiita-image-store.s3.amazonaws.com/0/17133/22f01d3c-71ca-0f18-07b1-e76f07b975c5.png)


私の場合、開発環境では複数の言語のコードを書いたり実行したりします。
例えば perl, ruby, nodejs, python など。
これらを利用するために、plenv, rbenv, nodebrew, pyenv などを利用していました。

しかし、遅ればせながら [anyenv](https://github.com/riywo/anyenv) というものがあると聞いたので、こっちに乗り換えました。

**envを2つ以上使ってる人はこれ使うのが良いと思います。おすすめ。


- http://blog.riywo.com/2013/06/22/155804
- https://github.com/riywo/anyenv


### インストールは簡単
[README.md](https://github.com/riywo/anyenv/blob/master/README.md) のとおりにやればOK

```bash
$ git clone https://github.com/riywo/anyenv ~/.anyenv
```

### PATHの設定

zshrc がシンプルになりました！ 

- https://github.com/luckypool/dotfiles/compare/501474e2411dd1cdbf8cc60e9a34165f7160ad75...master


```diff
 # ------------------------------------------------------------------------
-# plenv
+# anyenv
 # ------------------------------------------------------------------------
-if [ -d ${HOME}/.plenv  ] ; then
-    export PATH=${HOME}/.plenv/bin:${HOME}/.plenv/shims:${PATH}
-    eval "$(plenv init -)"
-fi
-
-# ------------------------------------------------------------------------
-# rbenv
-# ------------------------------------------------------------------------
-if [ -d ${HOME}/.rbenv  ] ; then
-    export PATH=$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH
-    #export PATH="$HOME/.rbenv/bin:$PATH"
-    eval "$(rbenv init -)"
-fi
-
-# ------------------------------------------------------------------------
-# nodebrew
-# ------------------------------------------------------------------------
-if [ -d ${HOME}/.nodebrew  ] ; then
-    export PATH=${HOME}/.nodebrew/current/bin:${PATH}
-fi
-
-# ------------------------------------------------------------------------
-# pyenv
-# ------------------------------------------------------------------------
-# git://github.com/yyuu/pyenv.git
-if [ -d ${HOME}/.pyenv ] ; then
-    export PATH="$HOME/.pyenv/bin:$PATH"
-    eval "$(pyenv init -)"
+if [ -d $HOME/.anyenv ] ; then
+    export PATH="$HOME/.anyenv/bin:$PATH"
+    eval "$(anyenv init -)"
 fi
```

もっと早く知っていればよかった・・・。

#### tmux を使っている場合（追記）

- shims へのPATHを通さないと tmux 起動した後だと system の方をみちゃうようです
- そこで下記のような差分が必要そうです
- https://github.com/luckypool/dotfiles/commit/08e5af8b145e183a41fec5c9b3ecbe6e923f5d01
- 追記
  - find より ls の方が良いよと[コメント](http://qiita.com/luckypool/items/f1e756e9d3e9786ad9ea#comment-5df6f301c3ad08cf749b)がありました！（Thanks, @labocho さん）
  - https://github.com/luckypool/dotfiles/commit/c603e436cf4fea93ccee478eda994109a05eddca
  - https://github.com/luckypool/dotfiles/commit/89e38defd63098cca2b3d0fc28fed751a1f9d5dc

```diff
 if [ -d ${HOME}/.anyenv ] ; then
     export PATH="$HOME/.anyenv/bin:$PATH"
     eval "$(anyenv init -)"
+    for D in `ls $HOME/.anyenv/envs`
+    do
+        export PATH="$HOME/.anyenv/envs/$D/shims:$PATH"
+    done
+
 fi
```

参考

- [tmuxでanyenv(*env)で*env/shimsがsystemのPATHより前に読まれてsystemが使われてしまう対処](http://monmon.hateblo.jp/entry/2013/12/13/233242)


### anyenv install

以下はインストールした時のメモです。

ruby, perl, python, node.js に相応する **env をインストールします。

```
$ anyenv install rbenv
$ anyenv install plenv
$ anyenv install pyenv
$ anyenv install ndenv
```

初期状態は下記のようにsystemのものを指していると思います。

```bash
$ anyenv versions
ndenv:
* system (set by /Users/luckypool/.anyenv/envs/ndenv/version)
plenv:
* system (set by /Users/luckypool/.anyenv/envs/plenv/version)
pyenv:
* system (set by /Users/luckypool/.anyenv/envs/pyenv/version)
rbenv:
* system (set by /Users/luckypool/.anyenv/envs/rbenv/version)
```

ということで、おなじみ **env からインストールします。


```bash
$ rbenv install 2.1.0
$ plenv install 5.16.3
$ ndenv install v0.10.25
$ pyenv install 2.7.6
$ pyenv install 3.3.3
```

それぞれ時間かかかりますが、ちゃんとインストールされると下記のようになります。

```bash
$ anyenv versions                                                                                     
ndenv:
  system
* v0.10.25 (set by /Users/luckypool/.anyenv/envs/ndenv/version)
plenv:
* system (set by /Users/luckypool/.anyenv/envs/plenv/version)
  5.16.3
pyenv:
* system (set by /Users/luckypool/.anyenv/envs/pyenv/version)
  2.7.6
  3.3.3
rbenv:
* system (set by /Users/luckypool/.anyenv/envs/rbenv/version)
  2.1.0
```

ということで、インストールしたversionを指すようにglobalを設定します。

```
rbenv global 2.1.0
plenv global 5.16.3
ndenv global v0.10.25
pyenv global 3.3.3
```

変更されましたね！


```bash
$ anyenv versions                                                                                     
ndenv:
  system
* v0.10.25 (set by /Users/luckypool/.anyenv/envs/ndenv/version)
plenv:
  system
* 5.16.3 (set by /Users/luckypool/.anyenv/envs/plenv/version)
pyenv:
  system
  2.7.6
* 3.3.3 (set by /Users/luckypool/.anyenv/envs/pyenv/version)
rbenv:
  system
* 2.1.0 (set by /Users/luckypool/.anyenv/envs/rbenv/version)
```

### 転ばぬ先の杖

必要に応じて確認すればいいですが、忘れがちなので、下記の確認もしておきます。

rubyのコードのためにbundlerをいれときます。

```bash
$ which gem
/Users/luckypool/.anyenv/envs/rbenv/shims/gem
$ gem install bundler
$ which bundle
/Users/luckypool/.anyenv/envs/rbenv/shims/bundle
```

perlのコードのためにcpanmとcartonをいれときます。

```bash
$ plenv install-cpanm
$ cpanm Carton
$ which carton
$ /Users/luckypool/.anyenv/envs/plenv/shims/carton
```

一応 pip と npm もPATHが通っているか確認します。

```bash
$ which pip
/Users/luckypool/.anyenv/envs/pyenv/shims/pip
$ which npm
/Users/luckypool/.anyenv/envs/ndenv/shims/npm
```

----

以上！