App::ExtractUsed というものを書いている話

CPAN形式で開発していると避けて通れないのが依存モジュールの炙り出しと Makefile.PL へ requires を書き出す作業。これは意外と面倒なのでもっと怠惰に楽をしたいところ。

たとえモジュールが要求するperlのバージョンを決めていたとしても「どれがコアモジュールでどれが違うのか」「parent.pm は 5.10.1 からコアモジュールになった」など、漏れなく抽出しないと新しい環境でインストールする時に悲しいことになってしまう。

こんな面倒事はコマンド叩くだけで済ませてしまいたい、というわけで GitHub - punytan/p5-App-ExtractUsed をでっち上げた。

使い方

extractused コマンドがインストールされるので、基本的にはこれを叩くだけで lib/ と t/ を走査して requires, test_requires が出力される感じ。

$ extractused 
requires 'WWW::NicoVideo::Download';
requires 'WWW::YouTube::Download';
test_requires 'Coro';

"t::" のようなテストディレクトリにある名前空間は強制的に取り除かれるので、心置きなく use t::Util; できてホクホクです。

オプション

--dir

指定したディレクトリのみを走査したい場合に。デフォルトは lib と t ディレクトリ。

$ extractused --dir bin --skip YourProject
--file

任意のファイルのみから抽出したいときはこのオプションでパスを指定。

$ extractused --file lib/YourProject.pm --skip YourProject
--skip

プロジェクトのnamesapaceを無視したいときに。
ここの挙動は自動的に判定するように変えたい(けれどロジック書くのがちょっと厄介)。
前方一致で判定するのでこの場合、YourProject::Web もスキップされる。

$ extractused --skip YourProject
--perl

最低限サポートしたい perl のバージョン。perlのバージョンによってコアモジュールが変わってくる(5.10.1あたりだと parent.pm, それ以前だと version.pm 等)ので、ちょっと古めの環境でも使うなら指定しておいたほうが無難。デフォルトは現在走ってるバージョン。

$ extractused --perl 5.10.1

まだまだ alpha-quality

使ってみて気になる所があればぜひ GitHub - punytan/p5-App-ExtractUsed に pull-req を。
ある程度インターフェースが固まってきたらCPANize予定。それまでは互換性考慮せず変えていきたいと思ってます。