今は事務所だけど、すぐに某データセンターに行ってカンヅメ作業しなくてはならないので今書ける間に書いてしまおう。
自分は最近HTML::Mason使いなのでよくテンプレートにPerlを埋め込む。普通~に
<%init>
my @list = NikkiSite::Data::Diaries->latest();
</%init>
% foreach my $d (@list) {
<div><% $d->title %></div>
% }
みたいな事をするのだが、「テンプレートにコードを混ぜるなんてとんでもない!」というp純粋主義者もいる。HTML::Templateなんかはその路線を踏襲してて、プログラマーとHTMLコーダーの境界線が結構キレイにひかれている。
多分どっちのアプローチもそれほど間違っていなくて、ただ実際問題としてどういう体勢で開発しているのかがポイントなんだろうなぁと思うのだ。例えば自分が開発する場合は、ごくごく少人数(っていうか俺だけっての多い)だったりするので自由度の低い、しかし哲学的に構成されたパラダイムというのは利点が少ないわけだ。Javaなんかも俺の中ではその範疇に入る。自分はJavaを教えていた事もあるし、ちゃんと使い方をわかっているけどあの物々しさはさっとアプリケーションを書きたい時には開発行程が長過ぎる。
逆にテンプレートとコードをちゃんと分離させないとプログラマーでないHTMLコーダーの人がとても困る事がある。ライブドアなんかではまわりがプログラマーだらけだったからひょいと隣の人に聞けばわかる事だったからそれほど問題でもないけど実際問題としてそういう職場がどれだけあるのか。なかなかないような気がするな。
ただ、純粋分離アプローチはあまり現実に即してない気がする。現実的にはプログラマーが忙しくてコード部分に手をつけられないとか、プログラムが動いているサーバーは止める訳にはいかないけどテンプレートだけだったら再コンパイルすればどうにかなるとか、色々と制限があって、テンプレートでちょこっとコード部分をかけたら・・・って時は多いはずだ。っていうか、日記才人を開発してて時々一瞬サーバーが502返すのは、mod_perlに組み込んだモジュールを再度強制的に読み込みさせるためで、これがHTML::Masonのテンプレートだとセーブするだけで勝手にオブジェクトコードを再コンパイルしてapacheの再起動無しで反映してくれんだよね・・・。だからちょっとした修正はHTML::Masonレベルで行ってしまう。これだとサービスの停止はない。
ちなみにmod_perl上でDBD::Pgのserver_prepare => 1を使ってApache2::Reloadとかを有効にしてるとClass::DBIファイルを書き換えたりした時にすげー面倒くさい事が起こるので要注意。server_prepareを向こうにすればいいんだけど、このせいで俺はApache2::Reload恐怖症になってしまって今でも怖くて使えずにいる。
ともあれもしコーディング規約としてコードをテンプレートに埋め込まないということを指定されたとしても俺は絶対に「コードをテンプレートに埋め込める」フレームワークを使うな。いざという時にコードは絶対に埋め込めない!なんてそんな現場から見ると浮世離れした理由で仕事を邪魔されちゃたまらん。
ってなわけでとりとめもない独り言でした。