Carmel 使ってみる

https://github.com/miyagawa/Carmel を使ってみる!

注:miyagawa さんに教えていただき cpanm インストール方法、例ともに修正しました https://gist.github.com/shoichikaji/5a951ab796ed0e596c47/revisions

まず copy-build-artifacts ブランチの cpanm をインストール

$ cpanm File::Copy::Recursive # 依存してるのではじめに入れておく
$ cpanm git://github.com/miyagawa/cpanminus.git@copy-build-artifacts

Carmel をインストール

$ cpanm git://github.com/miyagawa/Carmel.git

Plack のバージョン1.0033, 1.0030を切り替えてみる。

$ carmel install Plack@1.0033
$ carmel install Plack@1.0030

$ ls -F ~/.cpanm/builds/ | grep Plack
Plack-1.0030/
Plack-1.0033/

$ echo "requires 'Plack', '== 1.0033';" > cpanfile
$ carmel exec perl -MPlack -e 'printf "Plack %s in %s\n", Plack->VERSION, $INC{"Plack.pm"}'
Plack 1.0033 in /Users/skaji/.cpanm/builds/Plack-1.0033/blib/lib/Plack.pm

$ echo "requires 'Plack', '== 1.0030';" > cpanfile
$ carmel exec perl -MPlack -e 'printf "Plack %s in %s\n", Plack->VERSION, $INC{"Plack.pm"}'
Plack 1.0030 in /Users/skaji/.cpanm/builds/Plack-1.0030/blib/lib/Plack.pm

carmel exec は PERL5LIB にPlackが依存する ~/.cpanm/builds/*/blib/{arch,lib} を加えることでこれを実現している:

$ echo "requires 'Plack', '== 1.0030';" > cpanfile
$ carmel exec env | grep PERL5LIB
PERL5LIB=/Users/skaji/.cpanm/builds/Plack-1.0030/blib/arch:/Users/skaji/.cpanm/builds/Plack-1.0030/blib/lib:/Users/skaji/.cpanm/builds/Apache-LogFormat-Compiler-0.32/blib/arch:/Users/skaji/.cpanm/builds/Apache-LogFormat-Compiler-0.32/blib/lib:/Users/skaji/.cpanm/builds/Devel-StackTrace-2.00/blib/arch:/Users/skaji/.cpanm/builds/Devel-StackTrace-2.00/blib/lib ...

Note

  • bundler の挙動に近くなった。
  • 同一モジュールの異なるバージョンを保持できて、簡単にスイッチできるようになった。すばらしい!
  • ~/.cpanm/builds を共有するのでインストールの時間が節約されそう。
  • cpanfile.snapshot を使えば依存も含めてバージョン指定できる。
  • 環境変数 PATH, PERL5LIB が相当長くなりそう。cf: http://d.hatena.ne.jp/gfx/20130118/1358476166