akishin999の日記

調べた事などを書いて行きます。

rbenv を anyenv で管理する

rbenv や plenv などをまとめて管理する anyenv を使ってみました。

riywo/anyenv
https://github.com/riywo/anyenv

anyenv を使う事で、新しい *env 系コマンドを導入する度に初期化処理を .bash_profile に書く、といった作業から解放されます。

現在は以下のコマンドがサポートされているようです。

  • rbenv
  • plenv
  • pyenv
  • phpenv
  • ndenv

rbenv は普段から使っていますが、同じ感覚で perlpython も複数バージョンを管理できるようになるのは便利ですね。

CentOS へのインストール

まずは CentOS 6.4(x86_64) + bash な環境に入れてみました。

$ cd $HOME
$ 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

これで anyenv コマンドが使用できるようになります。
引数無しで実行してみると以下のようにヘルプが表示されます。

$ anyenv
anyenv
Usage: anyenv <command> [<args>]

Some useful anyenv commands are:
   commands            List all available anyenv commands
   local               Show the local application-specific Any version
   global              Show the global Any version
   install             Install a **env
   version             Show the current Any version and its origin
   versions            List all Any versions available to **env

See `anyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/riywo/anyenv#readme

次に以下のようにして各言語用のコマンドをインストールします。

$ anyenv install rbenv
$ anyenv install plenv
$ anyenv install pyenv
$ anyenv install phpenv
$ anyenv install ndenv

インストールが完了したら、.bash_profile を再読み込みします。

$ source ~/.bash_profile

anyenv version を実行するとインストールしたコマンドが一覧できます。

$ anyenv version
ndenv: system (set by /home/akishin/.anyenv/envs/ndenv/version)
phpenv: system (set by /home/akishin/.anyenv/envs/phpenv/version)
plenv: system (set by /home/akishin/.anyenv/envs/plenv/version)
pyenv: system (set by /home/akishin/.anyenv/envs/pyenv/version)
rbenv: system (set by /home/akishin/.anyenv/envs/rbenv/version)

これで各コマンドには PATH が通っているので、以下のような感じで使う事が出来ます。

$ rbenv install -l
$ rbenv install 2.0.0-p195

コマンドを入れた後の ~/.anyenv は以下のようになっていました。

$home/.anyenv
        ├── README.md
        ├── bin
        │   └── anyenv -> ../libexec/anyenv
        ├── completions
        │   ├── anyenv.bash
        │   └── anyenv.zsh
        ├── envs
        │   ├── ndenv
        │   ├── phpenv
        │   ├── plenv
        │   ├── pyenv
        │   └── rbenv
        ├── libexec
        │   ├── anyenv
        │   ├── anyenv---version
        │   ├── anyenv-commands
        │   ├── anyenv-completions
        │   ├── anyenv-envs
        │   ├── anyenv-global
        │   ├── anyenv-help
        │   ├── anyenv-init
        │   ├── anyenv-install
        │   ├── anyenv-local
        │   ├── anyenv-root
        │   ├── anyenv-version
        │   └── anyenv-versions
        └── share
            └── anyenv-install

envs ディレクトリの下に各コマンドがインストールされているようです。

Ubuntu へのインストール

次は普段使っている Ubuntu 13.04(32bit) + zsh の環境にインストールしてみました。
この環境では既に rbenv を導入済みだったので、anyenv 導入後に管理化に追加してみます。

まずは anyenv のインストール。

% cd $HOME
% git clone https://github.com/riywo/anyenv ~/.anyenv

以下のような感じで ~/.zshenv に anyenv の初期化処理を追記します。

% cat >> ~/.zshenv <<'_EOF_'
# anyenv setup
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
_EOF_

また、既に導入済みだった rbenv の初期化処理の方は削除しておきました。

変更が完了したら .zshenv を再読み込み。

% source ~/.zshenv

これで anyenv コマンドが使えるようになります。

anyenv を使い始める前に、まずは既に導入済みの rbenv を anyenv 管理下に移したいところです。
~/.anyenv/envs 以下にディレクトリを置けばいいようだったので、試しに以下のようにシンボリックリンクを張ってみました。

% ln -s ~/.rbenv/ ~/.anyenv/envs/rbenv

anyenv がちゃんと rbenv を認識してくれるか確認してみます。

% anyenv version
rbenv: 1.9.3-p392 (set by /home/akishin/.rbenv/version)

どうやらちゃんと認識されているようです。
あとは普通にその他のコマンドをインストール。

$ anyenv install plenv
$ anyenv install pyenv
$ anyenv install phpenv
$ anyenv install ndenv

インストールが完了したら .zshenv を再読み込みします。

% source ~/.zshenv

確認してみます。

% anyenv version 
ndenv: system (set by /home/akishin/.anyenv/envs/ndenv/version)
phpenv: system (set by /home/akishin/.anyenv/envs/phpenv/version)
plenv: system (set by /home/akishin/.anyenv/envs/plenv/version)
pyenv: system (set by /home/akishin/.anyenv/envs/pyenv/version)
rbenv: 1.9.3-p392 (set by /home/akishin/.anyenv/envs/rbenv/version)

元から入っていた rbenv も問題なく共存できているようです。

これで Ruby 以外の言語でもいろいろなバージョンを気軽に試せる環境が手に入りました。
勉強もはかどる・・・といいなー。