2013年6月 5日
cpanfileのrequiresにURLを直接指定するのは好ましくない
cpanfileでは、requires "git:...";
のように、gitやtarballのURL等を指定すれば
cpanm --installdeps .
でモジュールがインストールできる「裏ワザ」があることが
結構知られているようです。しかし、これは好ましくありません。そもそも
CPAN::Meta::Spec準拠ではありません。
これはあくまでcpanm側が第1引数にgitやtarballのURLなどを指定すればよしなに インストールしてくれるから現状は「偶然」そういう動きになっているだけです。
(cpanm git:...
でインストールできるので、requires "git:...";
って書いてあれば
入れてくれてしまうってことです。)
あくまでインストールにcpanmを使った場合に動くってだけの限定的な話で、しかも今後は 動かなくなる可能性が高いです。
実際問題、requires $any_url;
としてしまうと、モジュールのバージョン比較とか
ができずに、毎回愚直にdownloadしてきてインストールし直すようになってしまうの
で、これは色々嬉しくない。
じゃあどうするのか
現状、requires "Module::Name", "1.01", git => "git:...";
などと書けるように
する仕様が話しあわれています。
なので、そのあたりの仕様が固まるまで待ちましょう。
待ってられないなら、OrePAN2とかでcpan mirrorを立てよう
とは言えそんなに悠長に待ってられないって話もあるでしょう。実際問題、CPANに上がって ないけど、gitから入れたいってことはままあるかとおもいます。
その場合は、CPANに上がっていないモジュールをOrePAN2でcpan mirror運用しましょう。 OrePAN2の使い方はググって下さい。
OrePAN2を使うと、git URLから簡単にcpan mirror形式のディレクトリを作れるので、 それをそのままローカルで使ってもいいし、どっかで静的ファイル配信してもいい。 gitで共有してもいい。楽チンです。
cpan mirrorを使ってモジュールをインストールする方法はcpanmとcartonでそれぞれ 以下の様な感じです。なんかmirrorのみ指定だと依存モジュールとかが上手く入らない ようです。
% cpanm --mirror=http://cpan.metacpan.org/ --mirror=http://oreore/orepan/ --installdeps .
% PERL_CARTON_MIRROR=http://cpan.metacpan.org/,http://oreore/orepan/ carton install
今の職場だと、Arkをそういう感じで運用していたりします。OrePANで今年運用 始めたんだけどそしたらいきなりOrePAN2が出てきてだいぶタイミング悪かった感ある。
Arkのrepoの.travis.yml を見るとそのへん色々頑張ってるな!っていうのが伺えます。
そういや、Arkのリポジトリをいつの間にか移動させてました。しかしそろそろCPANにあげたいですね。クリスマス辺りには上がるんじゃないですかね。