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

Blog Single

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を導入してみてはいかがでしょうか。

お読みいただきありがとうございました。

Posted by MatsumotoKazuki
PHPやJavaで開発を行っているエンジニア。 LOLというゲームの試合を観戦するのが好きです。

Other Posts: