複数バージョンの LL を入れる話を集めてみた

理由はいろいろあると思いますが、ある言語の複数のバージョンを一つのシステム上で使い分けたい場合があります。そのためのツールと記事をただただ並べてみました。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 権限が必要なく、アプリとライブラリをセットにして配布するといった用途にも使えるみたいです。

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 を使うとよい、という感じのようです。

pip も試してみないといけないなぁ。

homebrew

これも完全に脱線。MacOSX の比較的コンパクトで最近評判のいいパッケージングシステム。Ruby製。ややこしい。

  1. 頑張って調べたんだけど、半年以上前に miyagawa がサラッと tweet しててちょっと凹んだ。まぁ間違ってないっぽいのでよかった。 

  2. それ以前はローカルで好きな場所にインストールするには Perl Makefile.PL が主流。 

More

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Develop Document Jekyll