読者です 読者をやめる 読者になる 読者になる

北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

Amon2のソースを読む(1)

今日は Amon2-2.49 のscaffoldの作成まで。具体的にはAmon2::Setup:: 名前空間の部分。

amon2-setup.pl

script/amon2-setup.pl がscaffoldの作成スクリプトだが、これは各フレーバーをnew->runしてるだけ。フレーバはAmon2::Setup::Flavor:: という名前空間に置かれるが、+指定で好きな名前空間のものも読めそう。

Amon2::Setup::Flavor

Amon2::Setup::Flavor はフレーバーのスーパークラスで、ファイルを特定のPATHに吐き出す write_file などを提供する。write_file に渡すファイル名は、<<hoge>>の形式で変数を利用可能。ファイルの内容はXslateで解釈されるが、タグは <% hoge %> の形式。


Amon2-2.49のコアパッケージには、Basic, Minimum, Liteの3つのフレーバーがある。Liteは Amon2::Lite 用。Basic は Minimum を継承しているが、全てのメソッドをオーバーライドしてるので継承してる意味はあまりなし?*1 Minimumだとperl関連のファイルしか作られないが、BasicだとDB関連のファイルやhtml, js, css 関連のファイルまで用意される。lib/ 以下の .pm ファイルだけ見ると、Minimumでは2ファイル、Basicでは3ファイルと非常にシンプル。MinimumではDispatch.pm (Router::Simpleのラッパー)がない。他、t/*.tやMakefile.PLやapp.psgiが作られる。他、違いはWeb.pmでプラグインを読むかどうか程度。

Amon2::Setup::Asset

あと、Amon2::Setup:: 名前空間には他にAmon2::Setup::Asset:: という名前空間があって、jQueryblueprintの中身を文字列として持つモジュールがある。なぜファイルを直接同梱しないのかなーとも思ったのだけど*2 *3、Amon2::Setup::Asset::jQuery を見るとjQueryのファイル名を表すjquery_min_basename() って情報を持っていてこれを自動生成されるhtmlでJSをインクルードするときに使っているので、恐らくこういうメタ情報を一緒に管理したかったのかなーと予想。


Asset 類は author/assets.pl で自動生成されるもので、恐らくパッケージングの際に実行していると思われる。

*1:id:tokuhirom さんのコメント参照

*2:id:tokuhirom さんのコメント参照

*3:他にライセンスの都合とかパッケージングの都合とか思い浮かんだけど、よくわからず。