pmsetupをモジュール化したModule::Flavorというモジュールを作ってみた
これと同じことをするモジュールにModule::Setupがあるのですが、使いたいと思う機会は多いものの、依存が多いので既存のフレームワークなどに組み込んだりがしにくかったたため、作ってみました。
https://github.com/dann/p5-module-flavor
基本的には、Module::Flavorは、Module::Setupの機能のミニマムセットを切り出したような形になっています。具体的には、
- Module::Setupのflavorからの展開の機能だけを抽出
- 依存をなるべく少なくした
- TemplateをText::Xslate(TT2 syntax)に変更した
ということをしています。
# モジュールを指定する場合 module-flavor MyApp::Simple # pluginを指定する場合 module-flavor --plugins=Git,TestMakefile MyApp::Simple # 独自flavorを指定する場合 module-flavor --flavor=+MyFlavor MyApp::Simple
フレームワークなどでモジュールとして使いたいというケースもあると思うので、モジュールを使ったmy pmsetupの例も書いてみました。
https://github.com/dann/p5-module-flavor/tree/master/eg/
#!/usr/bin/perl use strict; use warnings;use Module::Flavor; use File::Spec; use FindBin; use lib File::Spec->catfile($FindBin::Bin, '..', 'eg', 'lib'); main(); exit; sub main { my $options = { 'flavor' => '+MyFlavor', 'plugins' => ['TestMakefile', 'Git'], }; my $module_flavor = Module::Flavor->new( options => $options ); my $module = $ARGV[0]; $module_flavor->generate($module); } __END__
今後
オプションやconfigurationなど含めて、まだ検討不足なところもあるので、今後もう少し検討してからCPANにはあげようかなと思ってます。
- Module::Setupのpackの機構などを、モジュールの内側の機能にするか、外側の機能にするかの検討
- Configの設定ファイルのフォーマットの検討
- テンプレートの追加だけの組み込み方の検討
# 自分のpmsetupをText::Xslateを使うように変えていたら、何故か途中からModule::Flavorを作ってました。激しく脱線しました。