CPAN::Packgerと設定ファイル

CPAN::Packagerの設定ファイルの前提として、

  • なるべくなら設定しなくてよいのがベター(CPAN最新が依存関係が適切に設定されているならそれが一番望ましく、問題を見つけた場合はなるべくチケットを出すなりした方がよいかなと。)
  • 独自パッチを当てる場合でも本体のソースをいじらずにモンキーパッチ的な方法が可能であればそういう方法を採用した方が管理のことを考えるとベター。
  • 基本的にはモジュールごとに設定をする。適切に動いているのであれば、全体に適用しなければいけない設定はそれほどはないはず。

といったことがあるかなと思います。

ただ現実には結構うまくビルドできないパッケージがあって(依存関係に漏れがあるとか、基本的なテストは通ってはいるけどmysqldを立ちあげたりしないとテストがこけるのでtestをskipしたいとか)、そういうときには設定ファイルに記述していくわけですが、
今のYAMLの設定ファイルだと、同じモジュールの設定を複数書いてしまったりしそうなのでちょっと実験的にdirconfigブランチでフォーマットの変えてみました。

conf/
     global.yaml
     modules/
             Module::Name/config.yaml

あるディレクトリ以下に設定ファイルをまとめるようにして、コマンドラインのオプションからそのディレクトリを指定するようにします。

global.yamlには今のYAMLファイルでglobalの部分を書くことができます。

モジュールの設定はmodulesディレクトリ以下にパッケージ名でディレクトリを切ってからその下にあるconfig.yamlに設定を書きます。

パッケージ名.yamlではなくてパッケージ名/config.yamlなのは独自パッケージの管理とかしたりするとすると、そういうディレクトリ構成だとそのままそこに独自のソースを置いたりしやすいかなと思ったからです。

http://github.com/walf443/p5-cpan-packager/commits/dirconfig

間違えて同じモジュールの設定を複数作ってしまったりはしにくくなるかなと思いつつ、全体は若干把握しにくくなるのと、新しく設定作るのがめんどくさい、設定方式をユーザーに理解してもらうためにもっと詳しいドキュメントが必要など、デメリットもありますが、もうちょいよい方法はないかなぁ。

できれば設定したときよりもCPANのバージョンが上がっていた場合、その設定が効かなくなるのが理想的ではあるのかなぁと思ったりもする。それはそれで、もういらない設定を簡単に消したりしたくなりそうだけど。

他の懸念点としては、今のCPAN::Packagerはdist名を間違って設定ファイルに設定してしまうことがあったりしますが(例えば、List::UtilはList::Scalar::Utilsとかは間違えやすそう)、まぁこれは設定してみて効かないのがわかって修正するしかないかなぁという気はします。