anyenv + macOS環境構築

フルスタックで複数開発しているとruby、python、node.js、reactなど様々なプログラム言語を使用する機会が増えてきます。特に異なったプロジェクトを同一マシンで行おうとすると各プログラム言語のバージョンなどが競合して上手く開発が行えなくなります。

そこでanyenvの登場です。anyenvをインストールすることでメジャーどこの**env系を一括して管理できるようになりとても開発が楽になります。

https://github.com/anyenv/anyenv

かなりの**env系をサポートされています。「こんなに使わないからanyenv使うまでもないな」と思ってしまいがちですが、今後異なった言語を使う可能性がある場合はanyenvを導入するのをお勧めします。

というのもanyenvを導入する利点として、bashやzshなどにanyenvのパスを通すのみでその他は基本的にanyenv下で行ってくれるのでbash_profileなどがとてもきれいに保たれます。更にrbenv系を直接入れていたりするとndenvなど他のenv系をインストールしてbashなどにパスを通したところで上手くパスが通らないということが起こったりします。前置きが長くなりましたが早速anyenvのインストールについて書いていきます。

anyenvのインストール

インストール

シェルはbashを使用する前提のコードです。

Homebrewでインストール

新たにmacOSユーザーはHomebrewからインストールできるようになっています。

$ brew install anyenv
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
$ echo $SHELL -l

githubのソースからインストール

Homebrewを使わず、従来どおりgithubのソースをダウンロードしてインストールも可能です。

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

たった四行でanyenvをインストールすることができました。
一応解説すると以下のようなことを行っています。

  • 1: ユーザーディレクトリ以下に.anyenvという名前でanyenvをgithubからクローン(ダウンロード)
  • 2: クローンした.anyenvにbashのパスを通す1:.bash_profileexport PATH="$HOME/.anyenv/bin:$PATH"を追加記述
  • 3: anyenvのパスをbashに通す2:.bash_profileeval "$(anyenv init -)"を追加記述
  • 4: .bash_profileの変更を有効にするためにSHELLを再起動

一応.bash_profileを確認してみましょう。

$ cd ~
$ cat .bash_profile

以下のようにanyenvのパスが.bash_profileに記述されています。

export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

$ anyenv versions
ndenv:
  v10.10.0
  v6.10.0
  v6.14.4
  v6.2.2
  v7.10.0
  v7.2.0
  v7.9.0
  v8.10.0
* v8.11.1 (set by /Users/[your_account]/.anyenv/envs/ndenv/version)
  v8.11.3
  v8.12.0
  v9.9.0

anyenvのPluginのインストール

上記でanyenvを利用して**env系のインストール準備はできていますが、anyenvで入れた**env系のアップデートなどを一括でアップデートしてくれるなど、後々便利になってくるプラグインを初回からインストールしておきます。

追記:znz/anyenv-updateznz/anyenv-gitのプラグインのgithubページをみると、anyenvのリンク先が一見、旧anyenv(riywo/anyenv)のリンクのようですが、新anyenv(anyenv/anyenv)のページにリダイレクトされているかつ、anyenvの公式ページのPluginsでリンクが貼られているので互換性があるようです。なので、Pluginをインストールしていきます。

anyenvのプラグインをインストールする「plugins」ディレクトリの作成

今回はanyenv-updateプラグインとanyenv-gitプラグインの2つをインストールするので、先にそれらのプラグインをインストールする「plugins」ディレクトリを.anyenv以下に作成しておきます。

$ mkdir -p ~/.anyenv/plugins

anyenv-updateプラグインのインストール

anyenv updateコマンドでanyenvで入れた**env系の全てをアップデートしてくれるプラグインです。

$ git clone https://github.com/znz/anyenv-update.git ~/.anyenv/plugins/anyenv-update

anyenv-gitプラグインのインストール

anyenv gitコマンドでanyenvで入れた**env系の全てのgitコマンドを実行するプラグインです。

$ git clone https://github.com/znz/anyenv-git.git ~/.anyenv/plugins/anyenv-git

anyenv-gitの使い方

※情報が古い場合はanyenv-gitの本家を確認して見てください。

  • $ anyenv git pull: anyenvでインストールした全ての**env系とインストールされているプラグインのアップデート
  • $ anyenv git gc: ガーベージコレクション(お掃除)
  • $ anyenv git remote -v: 全てのリモートリポジトリを表示
  • $ anyenv git status: gitのステータス表示

以上でanyenvのインストールおよびanyenvを快適に使用するプラグインのインストールは完了です。

anyenvの使い方

anyenvでインストールできる**env系のリストを表示

anyenvでは**env系のサポートが増えることが有るので以下のコマンドでインストールできる**env系のリストを表示して確認することができます。

$ anyenv install -l

**env系のインストール

今回はnodeのバージョン管理を行うnodenvをインストールしてみます。
コマンドは以下

$ anyenv install nodenv

anyenvでインストールしたnodenvを有効にするため、シェルの再起動をします。

$ exec $SHELL -l

インストールした**env系のバージョンの確認

以下のコマンドでanyenvでインストールした**env系のバージョンを確認することができます。

$ anyenv versions
nodenv:
Warning: no Node detected on the system

anyenvでnodenv自体をインストールしましたが、nodenvで管理するnodeをインストールしていないので上記のようにエラーが出力されます。
なので次にnodenvを使ってnodeをインストールしていきます。

**env系にインストールできるバージョンの確認

anyenvで**env系をインストールした時点では上記のようにsystemに準拠したバージョンが指定されているので**env系に新たにインストールできるバージョンの確認を以下のコマンドで表示できます。

$ nodenv install -l
..中略..
8.10.0
8.11.0
8.11.1
8.11.2
8.11.3
8.11.4
8.12.0
8.13.0
8.14.0

**env系に異なるバージョンのインストール

上記でインストールできるバージョンを確認できたら、インストールしたいバージョンを以下のコマンドで指定してインストールすることができます。

※nodenvの例で6.10.08.10.0の2つをインストールしてみます。8系はlambda、firebase functionsなどで対応されたためasync/awaitが使えて便利です。

$ nodenv install 6.10.0
$ nodenv install 8.10.0

新しい**env系をインストールをした後はbash(shell)の再起動を忘れずに行っておきましょう

$ exec $SHELL -l

ここで一旦**env系がインストールされているか確認してみましょう。以下のように指定したバージョンが表示されていれば無事成功です。

$ anyenv versions
nodenv:
  6.10.0
  8.10.0

各バージョンのnodeがnodenvによってインストールできていますが、nodenv globalを設定していないので*マークが付いていません。この状態でnodeコマンドを実行しても、どのバージョンのnodeを使用するのかシステム側は不明なのでエラーとなります。
では次にglobalを設定してシステムのデフォルトのバージョンを指定していきます。

インストールされている**env系のバージョンを変更

では実際に**envのバージョンを変更してみます。グローバルに変更すればシステムの全てのバージョンが指定したものに切り替わります。またグローバルは変更せずに特定のプロジェクト(ディレクトリ以下)で指定のバージョンを使用したいときにはローカルでバージョンを変更することも可能です。

グローバルの設定・変更

$ nodenv global 8.10.0

くどいですが、変更されているか確認してみます。

$ anyenv versions
nodenv: 
  6.10.0
* 8.10.0 (set by /Users/xxxx/.anyenv/envs/nodenv/version)

8.10.0の先頭にアスタリスクがついて無事globalとして設定・変更されています。

ローカルで変更

ではローカルで異なるバージョンを使えるようにしてみましょう。ここでは仮にtestdirを制作して、そこに上記で設定した6.10.0の環境を有効にしてみます。

$ mkdir testdir
$ cd testdir
$ nodenv local 6.10.0

ここでも確認してみます。

$ anyenv versions
nodenv:
* 6.10.0 (set by /Users/xxxx/Desktop/testdir/.node-version)
  8.10.0

無事設定されています。グローバルは変更されていませんので、指定のローカルディレクトリ下以外ではグローバルで設定した8.10.0が有効になっています。またset byの後のパスがローカルで指定したディレクトリに制作された.node-versionになっています。

anyenvを使うと複数の開発環境構築が楽になります。

さらに慣れてきたらDockerに挑戦すると面白いかもしれないです。