scan-prereqs-cpanfile now support --scan-test-requires option which cares the modules specified by Test::Requires
TL;DR
以下のコマンドを打てば、Test::Requiresに指定したモジュールをdevelop requiresに含めてくれます。便利。
% scan-prereqs-cpanfile --scan-test-requires
本題
Test::Requiresという大変便利なモジュールがあります。モジュールがインストールされているか否かをチェックして、モジュールがない場合はテストをスキップしてくれると言うものです。
これはモジュールをインストールする側からすると大変ありがたい機能で、例えば、DB関連のモジュールであればPostgreSQLを使っている人は、DBD::Pgに関するテストは回して欲しいけど、DBD::mysqlに関しては適切にテストをスキップして欲しいとかそういうのがあるわけです。
ただ、モジュールを作る側や、パッチを送る側からすると時々困ることがあります。テストが通ってたつもりだったけど、実はskipされてただけだったんやー、実は盛大にこけてたわーみたいなことがあるわけです。
それを解決するために、Test::Requires::Scannerという、Test::Requiresに指定されているモジュールを抜き出すモジュールを書いたのですが、この機能を、App::scan_prereqs_cpanfileに取り込んでもらいました。
App::scan_prereqs_cpanfileはこれまた非常に便利なモジュールであり、インストールするとscan-prereqs-cpanfile
というコマンドがインストールされるのですが、これを実行するとプロジェクトで利用されているモジュールをスキャンして、cpanfile形式で出力してくれるのです。
この、scan-prereqs-cpanfile
に--scan-test-requires
オプションを加えてもらいました。
% scan-prereqs-cpanfile --scan-test-requires
上記のコマンドを打てば、Test::Requiresに指定したモジュールをdevelop requiresに含めてくれます。便利。
ちなみに、
% cpanm --with-recommends App::scan_prereqs_cpanfile
か、
% cpanm Test::Requires::Scanner
とかしないと入らないと思います。あとは、モジュールのメンテナンスするときや、パッチを送る時なんかに
% cpanm --installdeps --with-develop .
とかやれば適切にモジュールがインストールされ、
% prove -lr t/ xt/
とかテストを回せばskipされることなくテストが回ってくれるので安心ですね。
この辺もろもろCONTRIBUTING.mdとかに書いておいたほうがいいのかもですね。