Dist::Maker覚書

h2xsからModule::Starter、Module::Setupといろいろなディストリ生成ツールを使ってきましたが、ここ半年ほどはDist::Makerという自作ツールを使っています。特にCPANにリリースするつもりはなかったのですが、Dist::Makerが良い。で紹介してもらったのでちょっと手を加えてリリース準備中です*1
基本的な使い方は上記エントリにあるので以下は捕捉です。

サブコマンド

新しいディストリはinitで作ります。最近はinitのあとで自動的に`perl Makefile.PL && make manifest`をしてくれるようになりました。この挙動は`dim config template.dist_init 0`で抑制できます。

また、newで新しいファイルを作ることができます。これは、作成しようとしているファイルの名前に近いものを基本テンプレートから探し出して使うというものになっています。設置場所も以下のようにある程度推測してくれます。

Dist-Maker$ dim new Foo.pm
>> Command::new: running with Foo.pm Default in Dist-Maker
>> Command::new: create lib/Dist/Maker/Foo.pm from lib/Dist/Maker.pm
>> Command::new: finished.

Dist-Maker$ dim new 002_foo.t
>> Command::new: running with 002_foo.t Default in Dist-Maker
>> Command::new: create t/002_foo.t from t/001_basic.t
>> Command::new: finished.

metaサブコマンドはちょっと特殊で、dimに何もサブコマンドが渡されないときはmetaに制御が渡ります。

$ dim --version # dim meta --versioとして処理される

テンプレート

Text::Xslateのテンプレートカスケーディングで実装されてます。テンプレートカスケーディングって雛形作成にぴったりなんじゃ?と思ったのがそもそものきっかけなので。

ファイルに分割せずにすべてを一つのテンプレートで表現しているため、テンプレートは若干書きにくいかもしれません。しかしその分、ファイル名が自由に設定できるようになっています。

TODO

  • サブコマンドのヘルプを書く機能
  • newで生成するテンプレートを選択するアルゴリズムの改良
  • C++/XSの検討

*1:現在は開発版としてリリース済み。なおテンプレートはutf8をデフォルトにしました。