Hatena::Groupdann

dann's blog このページをアンテナに追加 RSSフィード

Fork me on GitHub

2010-11-07

pmsetupをモジュール化したModule::Flavorというモジュールを作ってみた

pmsetupをモジュール化したModule::Flavorというモジュールを作ってみた - dann's blog を含むブックマーク はてなブックマーク - pmsetupをモジュール化したModule::Flavorというモジュールを作ってみた - dann's blog pmsetupをモジュール化したModule::Flavorというモジュールを作ってみた - dann's blog のブックマークコメント

これと同じことをするモジュールに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を作ってました。激しく脱線しました。