« MySQLのsql-modeで一番厳しいやつはTRADITIONAL | メイン | CSRFDefender的なやつでコンテンツフィルタはしないほうがいいんじゃないかという話 »

2013年5月12日

最近のModule::InstallでTravisるときのポイント 2013年5月度版

tl;dr

  1. Module::Install::CPANfile を使う
  2. cpanfileのon ‘develop’セクションにModule::Install関連の依存を記述する
  3. .travis.ymlにinstall: cpanm --with-develop --installdeps --notest .を書く

あらすじ

最近のModule::InstallでTravisるときの注意ポイント ってのがあるが、折角DSLなのに、BEGINに色々書くのは悲しかったが、今はcpanfileがあるので、Module::Install::CPANfileで解決できるよって話。

Module::Install::CPANfile を使う

依存関係をcpanfileに記述します。Makefile.PLからそのままコピペしてきて良いでしょう。featureとかはちょっと書き方が違ったりします。そもそもfeatureとかの扱いがどうなってるのかちょっと良くわからなかった。

Makefile.PLからは依存関係の記述を削除して、その代わりに

cpanfile;

と書きます。

cpanfileのon ‘develop’セクションにModule::Install関連の依存を記述する

cpanfileに以下のような記述を追加します。

on 'develop' => sub {
    requires 'Module::Install';
    requires 'Module::Install::CPANfile';
    requires 'Module::Install::AuthorTests';
    requires 'Module::Install::Repository';
};

.travis.ymlにinstall: cpanm --with-develop --installdeps --notest .を書く

cpanmのオプションに—with-developを渡すと、cpanfileのon ‘develop’のモジュールもインストールしてくれます。travisのデフォルトだと—with-developはついていないので、.travis.ymlで設定を上書きしてやればok。

最小の.travis.ymlは以下の通り。

language: "perl"
install: cpanm --with-develop --installdeps --notest .

これでok。Happy travis life!

落穂拾い

なんでon configureじゃなくてon developなの?

M::Iはinc/に同梱するものなので、ユーザーにon configureでインストールさせるのはおかしいですねって話です。

あと、on configureだと—installdepsで入れてくれなかったりしたのと、—with-configureみたいなオプションも無いってのもある。(この辺深く追ってない)

元のハックと比べるとgit repoからモジュールをインストールしようとした時のエラーメッセージがわかりづらくなるんだけど?

仕方ないので諦めましょう。

Module::Install をつかっているモジュールを git からインストールできるようにするためのパッチ」、みたいな話もあったみたいですが、ちょっとその後どういう決着になったのかちょっとよくわかってない。

結論

cpanfile、cpanm周りはまだまだ流動的なのでベタープラクティスは変動していくと思うし、今回の記事も怪しい部分がある気がしているので、フィードバックあると嬉しいです。

投稿者 Songmu : 2013年5月12日 16:58