理由はいろいろあると思いますが、ある言語の複数のバージョンを一つのシステム上で使い分けたい場合があります。そのためのツールと記事をただただ並べてみました。1
※ ところで小規模、中規模案件で人気のありそうな PHP こそこういうツールが必要な気がするのですが、そういう話は聞かないですね。mod_php は PHP 単体で環境が完結しないので難しいのかもしれません。
PHP については phpfarm を使うと複数のバージョンを同一マシンに簡単にインストールできます。
cf. phpfarmを使って複数バージョンのPHPをインストール
ただし 2010-10-31 現在ではインストールできるだけで動的な切り替えなど気の利いた機能はありません。
比較表
本体の切り替え | 要件 | ライブラリの切り替え | |
Ruby | rvm | bash | Bundler |
Perl | perlbrew | Perl | local::lib |
Python | pythonbrew | Python | virtualenv |
意外なことに Perl, Python は複数バージョン入れるツール自身が元の言語で書かれています。Perl はシステム標準に入っているディストリビューションが多いからまだ分かるけど、Python でこの戦略を採用するのはちょっと大胆な気がします。
※ Python は virtualenv だけでも複数バージョンを切り替えて使うことができます。ただし、インストールや動的な切り替えまでは面倒みてくれません。そんなときに pythonbrew が便利なようです。
rvm
rvm の記事はもう書いてあります。
rvmを使ってREEへの移行を考える - あーありがち(2010-07-17)
Bundler
Bundler の記事ももう書いてあります。
Bundler 0.9.26 を触ってみた - あーありがち(2010-07-19)
perlbrew
perlbrew があれば perlbrew で切り替えて使う Perl のための lib はシステム標準のものとは分離しているので、local::lib はなくても大丈夫ということのようです。複数の lib 環境を使いたければたぶん local::lib はあった方が便利だと思います。その辺も rvm + Bundler 環境に似ているんじゃないでしょうか。
local::lib
root 権限が必要なく、アプリとライブラリをセットにして配布するといった用途にも使えるみたいです。
- local::libを使った非rootでのCPAN環境構築 - hide-k.net#blog
- Mac OS Xでもlocal::libをつかってCPANモジュールを入れよう - JPerl Advent Calendar 2009
- git + local::lib で CPAN モジュールを管理してみる - TokuLog 改メ tokuhirom’s blog
- local::lib を切り替える - unknownplace.org
cpanminus
これは完全に脱線です。2010年に開発の始まった新しいパッケージ管理ツールで、基本的には従来からある cpan, cpanplus の代わりになります。よりコンパクトに、つまり快適に動いて嬉しいらしいです。cpan-outdated と組み合わせたり、cpan に上がっていないパッケージをインストールしたりできるとか。2
cpanminus は gihyo.jp のモダン Perl 連載で CPAN を取り上げた直後に開発が始まっていて、まだあまりまとまった日本語ドキュメントはないっぽいですね。
pythonbrew
perlbrew inspired.
virtualenv
ずっと勘違いしていました。virtualenv は rvm と同じレイヤーの仕事はしていないんですね。
- rvm や perlbrew のようには処理系のインストールはしない
- インストール済みの処理系のうち、何をどこで使います、という環境構築ができる
ツール、と考えるとよいようです。rvm で特定のディレクトリに .rvmrc を置いたときのようなイメージでしょうか。
Python はもともと複数バージョンをシステムにインストールすることが特に面倒じゃないのかも。だとしたら virtualenv のアプローチだけで確かに十分かもしれません。
ただし easy_install は virtualenv を考慮してくれないので pip を使うとよい、という感じのようです。
- Python Package Index : virtualenv
- virtualenv — virtualenv documentation
- virtualenv, virtualenvwrapper, pip を使う方法 - Ian Lewis
pip も試してみないといけないなぁ。
homebrew
これも完全に脱線。MacOSX の比較的コンパクトで最近評判のいいパッケージングシステム。Ruby製。ややこしい。