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_profile
にexport PATH="$HOME/.anyenv/bin:$PATH"
を追加記述 - 3: anyenvのパスをbashに通す2:
.bash_profile
にeval "$(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-update
とznz/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.0
と8.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に挑戦すると面白いかもしれないです。