cpan module を並列でインストールする
先日行われた Gotanda.pm #5 でも発表させていただいたが、まさしく experimental な cpan client cpm を作った。
Why new?
cpan module の install にはいつも cpanm を使っており そのシンプルさと安定性には感心するばかりである。
が、cpanmにも不満がないわけではない。 perlである程度のことをやろうとすればすぐにcpan moduleの依存は 100を超える。 そういった場合、cpanmは直列でcpan moduleをインストールしていくため かなりの時間がかかる。
これをなんとかしたい。
Features of cpm
cpm は如何に速くcpan module をインストールするか、しか考えていない。速くするために以下のようにしている。
- cpanm を並列に使って cpan module をインストールする。
- distributionのprovidesはAPIから取得する。cf: https://cpanmetadb-provides.herokuapp.com/
How to install
cpanm 2.0 (Menlo) に依存しているので以下のようにしてインストール。
> cpanm -nq git://github.com/miyagawa/cpanminus.git@menlo > cpanm -nq git://github.com/shoichikaji/cpm.git
本当に速くなるのか
実際速くなった。
例えば Plack の場合、
> time cpanm -nq -L cpanm-local Plack ... Successfully installed Plack-1.0037 25 distributions installed real 0m47.705s > time cpm install -L cpm-local Plack ... 13613 DONE install Plack-1.0037 real 0m16.629s
47sec -> 16secになった。
また他の例として依存が190個(!)ぐらいある Dist::Milla は 7min14sec -> 1min54sec になった。 https://gist.github.com/shoichikaji/65816150effb9ea45dfe
Let's try cpm with your module!
misc
cpm install -v Plack
とすると途中経過も表示するようになる。- API server を heroku で立ててるのをなんとかしたい。
- gotanda.pm の発表から下記を変えた。
結論
perl があつい!