Macの言語バージョンマネージャをbrew installからanyenv installに変更した


## はじめに

週末プログラミングのために、自宅のMacの開発環境を整備しました。

今までhomebrewで「nodenv」「pyenv」「rbenv」「phpenv」をインストールして各言語のバージョンを変更して使用していましたが、「anyenv」で一元管理するように変更しました。

今後の自環境再セットアップの際に参考となるように、手順をメモとして残します。

## 「anyenv」とは？

[Githubリポジトリ](https://github.com/riywo/anyenv) を見ると

「**anyenv - all in one for *env**」と記載されており、説明は以下のようになっています。

```
【Google翻訳】
 これは、rbenvスタイルの環境マネージャ用の単純なラッパーです。 
 anyenvをインストールした場合は、クローンをgitしたり、
 envごとにシェルプロファイルを変更したりする必要はありません。
```

homebrewを使って「rbenv」をインストールする場合、まずgit cloneでリポジトリをコピーし、bash_profileにrbenvの処理を追記する必要があります。

１種類のみの「*env」をインストールするだけの場合はこれでも問題ないのですが、他の言語の「pyenv」や「nodenv」など複数のものをインストールする場合は手順が面倒ですし、bash_profileも汚れます。。。



* anyenvを使って「rbenv」をインストールする場合は「anyenv  install rbenv」の１行で終わりです。
もちろん、bash_profileの変更は必要ありません。



- もう一つ便利なのが、「*anyenv version*」コマンドで各言語のバージョンに何が使われているかを、以下のように**一覧で確認**することが可能な点です。

```bash
$ anyenv version
nodenv: 8.11.2 (set by /Users/XXXXX/.anyenv/envs/nodenv/version)
pyenv: 3.6.5 (set by /Users/XXXXX/.anyenv/envs/pyenv/version)
rbenv: 2.5.1 (set by /Users/XXXXX/.anyenv/envs/rbenv/version)
```



* 現時点でanyenvで管理可能な「*env」の種類*

  「*anyenv install —list*」コマンドで確認可能です。

  R、Crystal、D、Erlang、Elixir、Golang、Haskell、Java、Lua、Node.js、PHP、Perl、Python、Ruby、SBT(Scala用ビルドツール)、Scala、Swift が対象です。

```bash
$ anyenv install --list
Available **envs:
  Renv
  crenv
  denv
  erlenv
  exenv
  goenv
  hsenv
  jenv
  luaenv
  ndenv
  nenv
  nodenv
  phpenv
  plenv
  pyenv
  rbenv
  sbtenv
  scalaenv
  swiftenv

```



## homebrewでインストールした「*env」などの削除

「anyenv」をインストールする前に、homebrewでインストールした「rbenv」「pyenv」「nodenv」などがあれば、アンインストールしましょう。

```bash
$ brew list
[現在brew経由でインストールされているパッケージの一覧を確認する]

$ brew uninstall rbenv
$ brew uninstall pyenv
$ brew uninstall nodenv
$ brew uninstall phpenv
```

bash_profileに記載している各envの設定の削除も忘れないようにしてください。

bash_profileに記載が残っていると「anyenv」を動かした際にエラーが発生し、ハマります。





## 「anyenv」のセットアップ

1. 「anyenv」をGit クローンする。
2. bash_profileに「anyenv」のパスを通す。
3. bash_profileにanyenvの初期化コマンドを追記する。
4. シェルの再読み込み。

```bash
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
```

※ 以降の「**env」をインストールする際に、bash_profileを変更する必要はありません。



## 「pyenv」のインストール

- pythonのvirtualenvプラグインは以下の手順でインストール可能です。

```bash
git clone https://github.com/yyuu/pyenv-virtualenv ~/.anyenv/envs/pyenv/plugins/pyenv-virtualenv
```

１. anyenv経由で「pyenv」をインストールする。

```bash
$ anyenv install peen
```

２. [pythonの公式サイト](https://www.python.org)を確認し、安定版のバージョンを確認する。

   - 2018/05/26時点で、version2系が「2.7.15」version3系が「3.6.5」でした。

３. pyenvでインストール可能なバージョンを確認する。

```bash
$ pyenv install --list
```

４. pyenvで対象バージョンのpythonをインストールする。

```bash
$ pyenv install 2.7.15
$ pyenv install 3.6.5
```

５. 使用するバージョンを指定する。(下記は3系を使う場合)

```bash
$ pyenv global 3.6.5
```

６. 適用されているバージョンを確認する。

```bash
$ python --version
Python 3.6.5
```

７. 使用するバージョンを２系に変更する。

```bash
$ pyenv global 2.7.15
```

８. 適用されているバージョンを確認する。

```bash
$ python --version
python 2.7.15
```

※ 「*pyenv local 2.7.15*」でカレントディレクトリのバージョンを設定することも可能です。



## 「nodenv」のインストール

anyenvではNode.jsのバージョン管理として「nodenv」「ndenv」「nenv」の３種類のバージョンマネージャが存在しています。

[anyenvのissue](https://github.com/riywo/anyenv/issues/38#ref-pullrequest-294223843)を確認すると、「ndenv」「nenv」については現時点でアップデートされておらず「nodeenv」の使用を推奨しているようです。
将来的に「ndenv」「nenv」は対象外となる可能性がありますので「nodenv」の使用をオススメします。



１. anyenv経由で「nodenv」をインストールする。

```bash
$ anyenv install nodenv
```

２. [Node.jsの公式サイト](https://nodejs.org/en/)を確認し、安定版のバージョンを確認する。

   - 2018/05/26時点で、TLSが「8.11.2」Latestが「10.2.1」でした。

３. nodenvでインストール可能なバージョンを確認する。

```bash
$ nodenv install --list
```

４. nodenvで対象バージョンのNode.jsをインストールする。

```bash
$ nodenv install 8.11.2
```

５. 使用するバージョンを指定する。(下記は3系を使う場合)

```bash
$ nodenv global 8.11.2
```

６. 適用されているバージョンを確認する。

```bash
$ node -v
v8.11.2
```



## 他の言語バージョンマネージャの場合

「pyenv」「nodenv」と同じですので手順は省略させていただきます。



## 最後に

「anyenv」を使うことで、ローカル環境の言語バージョンを簡単に切り替えることができ、現在使用中のバージョンも一目で分かり、開発環境がすっきりすると思います。

複数の言語を使って開発している方には非常に便利なパッケージだと思いますので、良ければ使ってみてください。