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; できてホクホクです。
オプション
--file
任意のファイルのみから抽出したいときはこのオプションでパスを指定。
$ extractused --file lib/YourProject.pm --skip YourProject
--skip
プロジェクトのnamesapaceを無視したいときに。
ここの挙動は自動的に判定するように変えたい(けれどロジック書くのがちょっと厄介)。
前方一致で判定するのでこの場合、YourProject::Web もスキップされる。
$ extractused --skip YourProject
まだまだ alpha-quality
使ってみて気になる所があればぜひ GitHub - punytan/p5-App-ExtractUsed に pull-req を。
ある程度インターフェースが固まってきたらCPANize予定。それまでは互換性考慮せず変えていきたいと思ってます。