Module-Starterのカスタマイズ
いずれ奇麗にまとめてやろうと思ってたんですが、いい機会なのでこの辺りでmodule-starterの詳細とカスタマイズについて書いてみます。
ところで以前Module::Starterのplugin機構が面白い件についてと言うエントリを書いた事があるのですが、こちらに関して頭に入っているとより理解しやすいかもしれません。
用途別のカスタマイズ
名前とメールアドレスの設定
毎回author, emailを指定するのも面倒なので下記のように設定してしまいましょう。 ~/.module-starter/configに記載します。
author: Toru Yamaguchi email: foo@example.com
これで次回からこのパラメータを指定する必要は無くなります。
新しいモジュールを追加する
デフォルトのmodule-starterコマンドでは新しいモジュールを追加する事が出来ません。
$ module-starter --module=Foo Created starter directories and files $ module-starter --module=Foo::Bar --distro=Foo Foo already exists. Use --force if you want to stomp on it.
無理にforceオプションをつけて実行しても追加にはならず、直前に作ったFoo.pmが消えてFoo/Bar.pmで作り直したと言う扱いになってしまいます。
これを解決するのがModule-Starter-Smartです。
このモジュールをインストールした後に ~/.module-starter/config ファイルに下記のように記述します。
plugins: Module::Starter::Simple Module::Starter::Smart
ちなみにModule::Starter::Smartのドキュメント中では説明が二カ所間違ってます。
- configの中でのプラグイン指定はpluginでは無くplugins
- 追加の際にはauthorの指定は必要なのでSYNOPSYSにあるadd a new moduleで書かれているサンプルはそのままじゃ動かない
これでとりあえずモジュールの追加は出来ました。
テンプレートを使う
Module-Starterには元々Module::Starter::Plugin::Templateモジュールが含まれていますが、これ自体はインターフェースに過ぎず、implementしたモジュールが無いと使えません。
が今の所の実装モジュールですが、皆使い慣れているであろうTT2の方を使ってみようと思います。
ところで先にModule::Starter::Plugin::Templateですが、二つのメソッドをimplementsする必要があります。
- templates()
- rederer()
でModule::Starter::Plugin::TT2, Module::Starter::Plugin::Template::TeTe共にrendererを提供しますが、templates()は提供しません。templete()はModule-Starter-Plugin-SimpleStoreにある、
- Module::Starter::Plugin::DirStore
- Module::Starter::Plugin::InlineStore
- Module::Starter::Plugin::ModuleStore
のいずれか一つの中から提供されます。
幸い、Module::Starter::Plugin::TT2の中でModule::Starter::Plugin::ModuleStoreに対応するフォーマットでテンプレートが記載されているので、まずはそれを利用しましょう。
configは下記のように記述します。
plugins: Module::Starter::Simple Module::Starter::Plugin::Template Module::Starter::Plugin::ModuleStore Module::Starter::Plugin::TT2 template_module: Module::Starter::Plugin::TT2
これでModule::Starter::Plugin::TT2で指定されたフォーマットでモジュールが生成されます。
ここのtemplate_moduleで指定したモジュールですが、MODULE_TEMPLATE_MODULE環境変数を優先的に適用するので、特定のプロジェクトなどでModuleStoreベースでモジュールの生成を行いたい時などはカスタムのModuleStoreクラスを作ると言うのも良いかもしれません。
InlineStoreはモジュールでは無く実ファイルに同等のシンタックスで記述します。
template_file, MODULE_TEMPLATE_FILE環境変数に実ファイルを指定します。
DirStoreだけやってみましょう。
親切な事にModule-Starter-Plugin-TT2の中にtemplatesとしてDirStore用のテンプレートも入ってます。
これを適当なディレクトリにコピーして実行します。
plugins: Module::Starter::Simple Module::Starter::Plugin::Template Module::Starter::Plugin::DirStore Module::Starter::Plugin::TT2 template_dir: /home/zigorou/.module-starter/test/
のようにconfigを書き換えます。template_dirがテンプレートを展開した物です。この状態で同様にテンプレートベースでモジュールが生成されます。
まとめ
他にもXS用の<Module-Starter-Plugin-XSimpleと言うのも存在します。
またテンプレートによって自分好みの初期ファイルを作る事も出来ます。新しいdeveloper向けリリースの1.43_01ではModule::Installに対応とありましたが、これも既存の枠組みだけで対応する事も当然可能です。
さらに余談ですが、1.43_01に含まれるModule::Starter::Plugin::Templateですがこのままだと使えません。全てのgutsメソッドで正しくreturnすれば問題なく動作します。
一応パッチ作ったので置いておきます。
- Module::Starter::Template 0.02 patch
- download
trackback
- trackback url
- trackback count
- 0
comment