anyenvでプログラミング言語のバージョンの管理を楽にしよう

pythonやnode.jsやRubyなどは、比較的にバージョンのアップデートが多く、バージョンの違いによって動かなくなったりするため、複数のバージョンを切り替える必要があります。
この切り替えのために、現在インストールされているバージョンをアンインストールして、別のバージョンをインストールするというのはかなり手間がかかります。
その言語のバージョンの切り替えを簡単にするツールとして、 *env 系のツールがあります。
PythonのpyenvやRubyのrbenvなど使ったことがない方でも、なんとなく見たことがある方も多いのではないでしょうか。
ただ *env 系を使って管理している方も多いと思いますが、バージョンを管理したい言語が複数になってくると、何をどれでインストールしてどこにあるのかなどが分からなくなり、管理が大変になっていきます。
そのバージョン管理を一元管理できる anyenv を今回は紹介します。
anyenvを使うことによって、他の言語の **env 系の導入が楽になったり、一元管理しているため、どの言語をどの*env系を管理しているかを確認するのが楽になります。
anyenvのインストール
anyenvのインストールはgitを用いて行います。
リポジトリは以下のリンクにあります。
GitHub – riywo/anyenv: all in one for **env
anyenv本体のインストール
git clone https://github.com/riywo/anyenv ~/.anyenv
パスを通す
シェルの設定ファイルに以下の2行を追加してパスを通します。
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
bashを利用している場合は、以下のコマンドでパスの追加が行えます。
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
シェルを再起動
exec $SHELL -l
これで、インストールが終了です。
以下のコマンドで、anyenvで導入できるenv系を確認できます。
anyenv install -l
2018/06/07現在では以下のenv系に対応しています。
anyenv install -l
Available **envs:
Renv
crenv
denv
erlenv
exenv
goenv
hsenv
jenv
luaenv
ndenv
nenv
nodenv
phpenv
plenv
pyenv
rbenv
sbtenv
scalaenv
swiftenv
anyenvで管理しているenv系のアップデートを簡単に行えるようにする
anyenvで管理しているenv系のアップデートを簡単に行えるようにするプラグインを導入しておきます。
これを入れることによりanyenv update
を実行するとenv系のアップデートを一括で行ってくれるようになります。
anyenv-update
anyenv-updateのリポジトリ
anyenv-updateのインストール
mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
各言語をanyenvでインストール
node.js
node.jsはndenvを使います。
ndenvのインストール
anyenv install ndenv
シェルの再起動
exec $SHELL -l
ここからは、ndenvのコマンドです。
インストール可能なバージョン一覧を確認
ndenv install -l
現在LTSであるv8.11.2をインストール
ndenv install v8.11.2
バージョンの切り替え
ndenv global v8.11.2
これで設定は完了しました。
python
pythonはpyenvを使います。
pyenvのインストール
anyenv install pyenv
シェルの再起動
exec $SHELL -l
インストール可能なバージョン一覧を確認
pyenv install -l
ここでは v3.6.5をインストール。
(データ解析や機械学習などでよく用いられるannacondaやminicondaもpyenvでインストールできます。)
pyenv install 3.6.5
バージョンの切り替え
pyenv global 3.6.5
確認
以下のコマンドでanyenvで設定している言語のバージョンを確認できます。
anyenv versions
実行結果
ndenv:
system
* v8.11.2
pyenv:
system
* 3.6.5
元に戻す場合は、以下のコマンドで切り替えが行えます。
pyenv global system
確認
$ anyenv versions
ndenv:
system
* v8.11.2
pyenv:
* system
3.6.5
元に戻っていることが確認できました。
env系の移行
anyenvに必要性を感じる方の中には、もともとenv系を利用している方も多いと思います。
既にenv系を使っていた場合は、設定ファイルからパスを削除、またはコメントアウトしないと、anyenvではなく、もともと指定してあった、パスを参照する可能性があるため、その移行方法について説明します。
*env系でインストールされていたディレクトリをそのまま移動させて使うことができます。
env系 一覧表示
$ ls -d ~/.*env
/Users/matsumoto/.anyenv
/Users/matsumoto/.pyenv
そのまま .*env を移動させます。
ここでは、pyenvを移行します。
mv .pyenv ~/.anyenv/envs/pyenv
うまく移動しているかを確認して、できていなかったら、sudoをつけてみるなどしてみてください。
nodebrewの削除
nodebrewを使っていたため、bash_profileに以下の2行を消す。
(bash_profileをバージョン管理していなくて、元に戻す戻したくなる可能性がある場合はコメントアウトで大丈夫です)
export PATH=$HOME/.nodebrew/current/bin:$PATH
export PATH=$HOME/.nodebrew/current/bin/npm:$PATH
nodebrewのアンインストールは以下のように行いますが、残っていても多少容量が使われるだけであるため、残しておいても問題はないです。
アンインストール
brew uninstall nodebrew
そして、nodebrewでインストールしたものが含まれる~/.nodebrew
ディレクトリを削除すれば、nodebrewでインストールされたものが削除されます。
おわりに
ここまでanyenvの説明をしましたが、env系を使わなくても言語のバージョン管理は様々な管理方法があるため、必須なものではないため必要性を感じたら最適化するくらいでいいと思います。
env系で、管理が大変になってきている方はこの機会にanyenvを導入してみてはいかがでしょうか。
お読みいただきありがとうございました。