Help us understand the problem. What is going on with this article?

cpm - a fast CPAN module installer

More than 3 years have passed since last update.

この記事はPerl 5 Advent Calendar 2016の9日目です。

昨日はnqounetさんによる、「遅延実行と仮実行(dry_run)について考えてみた」でした。

今日は僕が開発しているCPANモジュールインストーラcpmを紹介したいと思います。

cpmとは

CPANモジュールインストーラといえば、cpanmが世界的に有名でたくさんの方が使っていると思います。

僕自身もcpanmを本当によく使っていますが、大量の依存があるアプリケーションを開発しているときなどcpanmだとCPANモジュールインストールにかなりの時間がかかり、もう少し早くならないかと思っていました。

そこでcpmを作りました。cpmは内部でcpanmを並列に使ってCPANモジュールインストールを高速に行います。

cpm-Plack.gif

さて、速さを求めて作ったcpmですが、最近いくつか他の機能も追加したので
今日はその紹介したいと思います。

darkpanとの連携

darkpanとはCPANの全部、もしくは一部分のミラーを指します。OrePAN2, CPAN::Miniなどを使うと比較的簡単に作ることができます。

このdarkpanからのモジュールインストールにcpmは対応しています。

例えば/opt/darkpanにdarkpanがあるとき

> cpm install --resolver 02packages,/opt/darkpan Your::Module

とすれば/opt/darkpanからYour::Moduleをインストールします。

なお、この書き方だと/opt/darkpan のみ からYour::Moduleをインストールしようとします。もし/opt/darkpanは一部分のミラーであるため、存在しないモジュールはMetaDBにfallbackして探して欲しい場合は、

> cpm install --resolver 02package,/opt/darkpan --resolver metadb Your::Module

としてください。

依存モジュールをgitからインストール

上記darkpanを使えば、社内専用モジュールも管理できるようになるでしょう。ただモジュールをgithubで管理してある場合は、そこから直接インストールできるとさらに便利かもしれません。

そのような場合は

requires "Your::WebApp", git => "git://github.com/you/Your-WebApp.git", ref => "develop";
requires "Plack", ">= 1.000, < 2.000";

というcpanfileを準備して

> cpm install

とすればgithubから直接インストールできます。

なお、この機能はcapnm/Cartonにも一時あったのですが、現在は削除されています。ほかのtoolchainとの連携を考えるとき、この「CPAN以外のディストリビューション保存場所」をどう扱っていくかは、議論があります。

resolverが柔軟

さて上記2つの特徴に代表されるように、cpmはresolver =「モジュール名からディストリビューション保存場所を取得」のところが柔軟にできています。
実際、それらはApp::cpm::Resolver::*の名前空間の下にまとまっており、
容易に変更可能にしてあります。

今後、これをユーザが簡単に変更できるインタフェースを用意したいと思っています。

今後

以上cpmの特徴について説明してきました。

さてすでにいくつかのCPANモジュールインストーラが存在するとき、cpmの存在意義はなんでしょうか。

前述したとおりcpanmは安定したCPANモジュールインストーラであり世界中で使われています。したがって大幅な内部変更、新規機能の追加にはすこし慎重にならざるを得ません。
そこでcpmです。すなわちcpmをsandboxとしてとらえ、何の機能は役に立ち、何の機能は意味がないのかを見極めたいと思っています。

実際、まだまだ試したいことがたくさんあります。もしもみなさんの中にCPANモジュールインストーラに不満を持っている方、新たな機能の提案を持っている方がいましたら、ぜひ議論したいなと思います。

さて明日はytnobodyさんでAzure + Perl でサーバレスなジョブシステムを作るです!

skaji
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away