cpan module を並列でインストールする

先日行われた Gotanda.pm #5 でも発表させていただいたが、まさしく experimental な cpan client cpm を作った。

github.com

Why new?

cpan module の install にはいつも cpanm を使っており そのシンプルさと安定性には感心するばかりである。

が、cpanmにも不満がないわけではない。 perlである程度のことをやろうとすればすぐにcpan moduleの依存は 100を超える。 そういった場合、cpanmは直列でcpan moduleをインストールしていくため かなりの時間がかかる。

これをなんとかしたい。

Features of cpm

cpm は如何に速くcpan module をインストールするか、しか考えていない。速くするために以下のようにしている。

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 の発表から下記を変えた。
    • 名前。Drop Acme!
    • dinamic_config 0, reqs は static に決まる、という仮定の削除。
    • ただし provides は static に決まるとしAPIから取得。

結論

perl があつい!