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