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のドキュメント中では説明が二カ所間違ってます。

  1. configの中でのプラグイン指定はpluginでは無くplugins
  2. 追加の際にはauthorの指定は必要なのでSYNOPSYSにあるadd a new moduleで書かれているサンプルはそのままじゃ動かない

これでとりあえずモジュールの追加は出来ました。

テンプレートを使う

Module-Starterには元々Module::Starter::Plugin::Templateモジュールが含まれていますが、これ自体はインターフェースに過ぎず、implementしたモジュールが無いと使えません。

  1. Module-Starter-Plugin-TT2
  2. Module-Starter-Plugin-Template-TeTe

が今の所の実装モジュールですが、皆使い慣れているであろう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::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

comment

Comment Form
remember info

trackback

trackback url
trackback count
0
Recent Entries
  1. perlで気軽にsitemap.xmlを作る
  2. XULでCanvasエディターを作ってみた
  3. nsIObserverServiceを使って複数のobserverに通知を行う
  4. CGI::Application::Plugin::Cache::Adaptive Release
  5. Gearmanを使ってみた
  6. 「正しくHTMLを書こうと心がけている人に5つの質問」の回答
  7. Modules in Games-Nintendo-Wii-Mii
  8. Module-Starterのカスタマイズ
  9. JSON::DWIW vs JSON::Syck vs JSON
  10. よろしくお願い致します
Archives
  1. 2008年02月 (1)
  2. 2007年06月 (2)
  3. 2007年05月 (1)
  4. 2007年04月 (4)
  5. 2007年03月 (2)

all

categories
RSS/Atom Feed
license
Creative Commons License
Powered by