あらすじ
my flavor が欲しいので Module::Setup::Flavor を使ってみました。その備忘録です。
例としてModule::Setup::Flavor::StaticApp を作ってみます。
なお、作業するカレントディレクトリは ~/project を想定しています。
フレーバーを修正する
フレーバーを生成します。フレーバー名をMyStaticAppとします。
% module-setup --init MyStaticApp [~]Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/Makefile.PL Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/t/00_compile.t Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/xt/01_podspell.t Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/xt/02_perlcritic.t Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/xt/03_pod.t Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/xt/perlcriticrc Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/Changes Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/lib/____var-module_path-var____.pm Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/MANIFEST.SKIP Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/README Creating /Users/okamura/.module-setup/flavors/MyStaticApp/template/.shipit Creating directory /Users/okamura/.module-setup/flavors/MyStaticApp/additional Dump config /Users/okamura/.module-setup/flavors/MyStaticApp/additional/config.yaml Creating directory /Users/okamura/.module-setup/flavors/MyStaticApp/plugins Creating directory /Users/okamura/.module-setup/flavors/MyStaticApp/template Do you use SVN? [yN] [n] Do you use SVK? [yN] [n] Do you use Git? [yN] [n] y You chose version control system: Git Your name: [Default Name] okamuuu Your email: [default {at} example.com] okamuuu {at} example.com Dump config /Users/okamura/.module-setup/flavors/MyStaticApp/config.yaml
~/.module-setup 以下に MyStaticApp のフレーバーができました。
% head ~/.module-setup/flavors/MyStaticApp/template/lib/____var-module_path-var____.pm package [% module %]; use strict; use warnings; our $VERSION = '0.01'; 1; __END__ =head1 NAME
次のように hello メソッドを追加しました。
% head ~/.module-setup/flavors/MyStaticApp/template/lib/____var-module_path-var____.pm package [% module %]; use strict; use warnings; our $VERSION = '0.01'; sub hello { print 'hello, world' } 1; __END__
この状態で次のコマンドを実行します。
% module-setup MyApp MyStaticApp Creating directory MyAppCreating MyApp/.shipit Creating MyApp/Changes Creating MyApp/Makefile.PL Creating MyApp/MANIFEST.SKIP Creating MyApp/README Creating MyApp/lib/MyApp.pm Creating MyApp/t/00_compile.t Creating MyApp/xt/01_podspell.t Creating MyApp/xt/02_perlcritic.t Creating MyApp/xt/03_pod.t Creating MyApp/xt/perlcriticrc ...
生成された雛形を確認します。先ほど実装した hello メソッドが既に記述されているはずです。
% cd MyApp % head lib/MyApp.pm package MyApp; use strict; use warnings; our $VERSION = '0.01'; sub hello { print 'hello, world' } 1; __END__
フレーバーを追記する
static.psgi を追加します。
% cat ~/.module-setup/flavors/MyStaticApp/template/static.psgi [~/project/MyApp] use Plack::Builder; builder { enable "Plack::Middleware::Static", path => sub { s!(.*/$)!${1}/index.html! or return qr{^/.+} }, root => './static/'; };
フレーバーから雛形を再生成します。カレントディレクトリの位置にご注意下さい。
MyApp/static.psgi が生成され、その他は既に存在しているので上書きしていません。
% cd ~/project % module-setup MyApp MyStaticApp Creating directory MyApp MyApp/.shipit exists. Override? [yN] [n] MyApp/Changes exists. Override? [yN] [n] MyApp/Makefile.PL exists. Override? [yN] [n] MyApp/MANIFEST.SKIP exists. Override? [yN] [n] MyApp/README exists. Override? [yN] [n] Creating MyApp/static.psgi MyApp/lib/MyApp.pm exists. Override? [yN] [n] MyApp/t/00_compile.t exists. Override? [yN] [n] MyApp/xt/01_podspell.t exists. Override? [yN] [n] MyApp/xt/02_perlcritic.t exists. Override? [yN] [n] MyApp/xt/03_pod.t exists. Override? [yN] [n] MyApp/xt/perlcriticrc exists. Override? [yN] [n] ... % cd MyApp % cat static.psgi ...
フレーバーを他人と共有する
~/.module-setup 以下に自分が使っているフレーバーと同じ物をセットすれば良いわけですが、ここには Your name と Your email があなたの設定になっているはずです。
ですので ~/module-setup を共有するのではなく、 生成する仕組みを共有する必要があります。
そのためにモジュール化します。cpanized ディレクトリ構造を用意します。
% cd ~/project % module-setup Module::Setup::Flavor::StaticApp [1]: default [2]: MyStaticApp Select flavor: [1] 1 You chose flavor: default Creating directory Module-Setup-Flavor-StaticApp Creating Module-Setup-Flavor-StaticApp/.shipit Creating Module-Setup-Flavor-StaticApp/Changes Creating Module-Setup-Flavor-StaticApp/Makefile.PL Creating Module-Setup-Flavor-StaticApp/MANIFEST.SKIP ...
Module::Setup::Flavor::StaticApp.pm を書き換えます。
間違えてたので修正 s/StaticApp/Module::Setup::Flavor::StaticApp/ (2012-02-16)
% cd ~/project % module-setup --pack Module::Setup::Flavor::StaticApp MyStaticApp > ~/project/Module-Setup-Flavor-StaticApp/lib/Module/Setup/Flavor/StaticApp.pm
作成したモジュールでフレーバーを使ってみる
パスを通します。 zsh の設定ファイルなどを以下のようにしておきます。
PERL5LIB=$HOME/project/Module-Setup-Flavor-StaticApp/lib:$PERL5LIB export PERL5LIB
Module::Setup::Flavor::StaticApp.pm を使って ~/.module-setup 以下にフレーバーを作成します。
間違いを修正しました(2012-02-06)
% module-setup --init --flavor-class=StaticApp StaticApp
新規プロジェクトを作成すると次のように対話モードでStaticAppが選べるようになっている事が確認できます。
% module-setup MyApp2 [1]: default [2]: MyStaticApp [3]: StaticApp Select flavor: [1]
感想
module-setup --pack のくだりに関してはそのまま Module::Setup::Flavor::StaticApp が作れそうな気がしたのですがよくわからなかったのでとりあえず上記のようにしています。
あと SYNOPSIS が本当にこれでいいのかわからない。 s/StaticApp/module/ でなくていいのかしら?
% module-setup --pack StaticApp MyStaticApp | head -n 15 | tail -n 4 =head1 SYNOPSIS StaticApp-setup --init --flavor-class=+StaticApp new_flavor