@tokuhiromさんがplenvという, Perl 5のインストール管理ツールを開発されたそうです.
ブログ記事やREADMEをまとめてみると, plenvの特徴は...
- Rubyのrbenvから影響を受けている.
- perlbrewと違って, プロダクトごとにperlのバージョンを指定することができる.
- とても高速で, インストールも簡単.
- perlbrewのような機能を持つが, 完全な上位互換ではない.
...という感じっぽい.
こういう時はグダグダ言わずに入れて試してみるに限る, というわけでさっそく導入してみましょうー!
インストール
plenvを導入する為にはCPAN/homebrew/gitを使う方法がありますが, 今回はgitを使って入れてみます.
ただ特徴にも書いてあるとおり, どの方法を使うにせよインストールはとても簡単です.
$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv $ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.zshrc
githubから落としてきて, パスを通す.
これでOKです. とっても簡単ですね!
あとは初期設定さえしてしまえば, plenvを使うことができます.
$ echo 'eval "$(plenv init -)"' >> ~/.zshrc
plenvは'~/.plenv/shims/'にパスを通す必要があるので, 上記コマンドでパスを通します.
このコマンドは, 下記のコマンドとほぼ等価です
$ echo 'PATH=~/.plenv/shims:$PATH' >> ~/.zshrc
...注意事項としては, これを手動で.zshrcに書き込むときには, 必ず'~/.plenv/shims'を'$PATH'の前に書くようにしましょう.
最初, '$HOME'を一番最初に書いたので, しばらく詰まって*1ました...
使い方
perlのインストール
$ plenv available perl-5.17.8 perl-5.16.2 perl-5.14.3 perl-5.12.5 perl-5.10.1 perl-5.8.9 perl-5.6.2 perl5.005_04 perl5.004_05 perl5.003_07
今使える(インストール可能な)perlのバージョンを表示します.
ちなみにperlbrewのように, インストール済みのバージョンはマークされないようです.
$ plenv install 5.16.2
perl-5.16.2をインストールします.
ちなみに, 'perl-5.16.2'と書いても同じように動くようです.
デフォルトのperl, ローカルのperl
最初, 特徴で「(plenvは)perlbrewと違って, プロダクトごとにperlのバージョンを指定することができる.」と書きました.
plenvは, 以下の順番で使用するperlを決定します.
- 環境変数'PLENV_VERSION'
- 今のディレクトリか, 上位ディレクトリのローカル設定('.perl-version')
- グローバル設定('~/.plenv/version')
- システムのperl
次のコマンドで, 3.の「グローバル設定」を変更することができます.
この場合, perl-5.16.2をデフォルトで使用するperlに設定します.
$ plenv global 5.16.2
一方, 2.の「ローカル設定」は, 次のコマンドで設定できます.
$ plenv local 5.10.1
このコマンドを実行することで, カレントディレクトリに'.perl-version'という名前のファイルが生成されます.
ちなみに'.perl-version'も'~/.plenv/version'もテキストファイルで, 中身はコマンドで指定したperlのバージョン('5.16.2'とか'5.10.1'とか...)が書かれているだけなので, 多分手動で書き換えることもできます.
それでは, 'グローバル設定'と'ローカル設定'を使って, perlのバージョンを使い分けてみましょう.
いつもは最新のperl-5.16.2で作業しているが, 開発している一部のプロダクトはperl-5.10.1上で動かしているので, これらを使い分ける... という例を考えてみます.
perlbrewの場合, switchコマンドでいちいち切り替える必要がありました.
しかしplenvでは, perl-5.10.1で動かす必要があるプロダクトのディレクトリ内でローカル設定を行なってしまえば, これらの切り替えを自動的に行うことができます.
グローバル設定がperl-5.16.2になっている状態で, perl-5.10.1で動かしたいプロダクトがあるdev/hogeディレクトリでローカル設定を行うと...
$ cd ~/dev/hoge
$ plenv local 5.10.1
$ perl -v
This is perl, v5.10.1 (*) built for i686-linux
....このように, 自動的にperl-5.10.1が呼び出されます.
一方, ホームディレクトリに戻ってperlを実行すると, グローバル設定をもとにperl-5.16.2が呼び出されます.
$ cd ~
$ perl -v
This is perl, v5.16.2 (*) built for i686-linux
....perlbrewと違って, 使用するperlのバージョンを設定ファイルで決定できるというのは, plenvの一つの強みと言えるのではないでしょうか.
導入済みのperl一覧(2013/01/23 追記)
"list"で導入済みのperlを確認することができます.
$ plenv list 5.10.1 * 5.16.2 system
現在有効なバージョンの前には"*"が付くようです.
この辺は, perlbrewと同じですね.
別名でのインストール(2013/01/25 追記)
インストール時に'as'オプションを付けることで, バージョンの代わりに任意の名前を与えることができます.
$ plenv install 5.16.2 --as=app
この場合, perl-5.16.2をappという名前でインストールすることになります.
同じバージョンのperlを複数インストールしたい場合*2に使えそうです.
インストール時に与えられた名前は, バージョンの代わりに使用することができます.
listで導入済みのバージョンを表示すると, 次のように表示されます.
$ plenv list 5.10.1 * 5.16.2 app system
また, 与えられた名前はグローバル設定やローカル設定の為に使うこともできます.
$ plenv global app $ plenv local app
cpanm
perlbrewと同じく, cpanmを導入することもできます.
$ plenv install-cpanm
現在使われているperlにcpanmをインストールします.
モジュールの移動
plenvを使えば, 異なるバージョンのperl間でモジュールを移動することができるようです.
例えば, あるプロダクトの開発環境をperl-5.10.1から新しくインストールしたperl-5.12.5に変更するような場合, perlbrewならば必要なモジュールをperl-5.12.5に入れなおす必要があります.
しかし, plenvの場合, migrate-modulesを使うことであるバージョンにインストールされているモジュールを別のバージョンに移動することができます.
$ plenv migrate-modules 5.10.1 5.12.5
まとめ
簡単ではありますが, plenvを紹介してみました.
@tokuhiromさんも仰っている通り, plenvはperlbrewの完全な上位互換ではありません.
ただ, perlbrewでできる事はほとんどplenvでできますし, 実行するperlのバージョンをファイルで設定できる点や,バージョン間のモジュール移動が簡単な点などは, お仕事(実務)でperlを使う上で便利な機能だと思います.
というわけで, しばらくplenvを使ってみようと思います!