konekto Inc with PHP , MySQL コネクト株式会社 技術情報コンテンツ


[[PHPアプリケーション/Smarty]]

テンプレートエンジンは本当に必要か?

実は賛否両論

PHPでWebアプリケーションを開発する際、テンプレートエンジンの使用について意見が分かれるケースがある。
開発現場で耳にする意見は、およそ次のようなものが多い。

  • 賛成意見
    • デザインとロジックを分離できる
    • テンプレートに使える関数やマクロの便利さ
    • デザイン変更や機能拡張が比較的容易
  • 反対意見
    • echo関数を使えばよいだけ
    • HTMLに埋め込めばよい
    • スクリプトとHTMLを分離するのが面倒

反対を主張する方々にはある共通点がある。 SSI*1的なプログラミング・スタイルで開発を行っているために、テンプレートエンジンを使用したスタイルへの転換に要する時間やノウハウが足りない、という点だ。

テンプレートエンジンを推奨するエンジニアも、かつては同じ経験をしてきたはずである。テンプレートエンジンを採用するには、納得できるだけの理由が存在するはずである。

テンプレートエンジンの魅力

テンプレートエンジンを使ったプログラミングに一度でも馴染んでしまえば、テンプレートエンジン無しでは考えられなくなるであろう。

テンプレートエンジンの魅力は、何と言ってもデザインとロジックの完全な分離であろう。

HTMLの中に特定の変数を埋め込むだけであれば、テンプレートエンジンを使う必要は無い。それこそ、<?=$var?>のように、記述してしまえば良い。 しかし、それではテンプレートエンジンの存在意義がない事になる。

では、テンプレートエンジンには、どのようなメリットがあるのだろうか。

デザインの分離

Webアプリケーション開発において、デザインの分離は重要な意味を持っている。

Webアプリケーションの特徴として、アプリケーション設計フェーズの仕様がそのまま永続するという事は有り得ない。 ユーザのニーズやトレンドに応じて、比較的短期間で機能拡張する事も珍しくない。

要求される仕様追加の約半数は、デザインの変更やリンクの追加などである。 ロジックには直接関係の無い箇所であるため、HTMLを変更するだけで済みそうなのだが、デザインとロジックの分離がなされていないと、予期せぬバグが生じてしまう可能性が考えられる。 また、あちこちにスクリプトが点在しているがために、デザイン変更が容易ではないケースも考えられる。

プログラミングスタイルを理由にして、デザイン変更に多くの工数を費やしてしまっては、本末転倒ではないだろうか。

組み込み関数やマクロ言語の充実

テンプレートエンジンの大半は、テンプレートに記述するだけで様々な表現を可能にする、組み込み関数やマクロ言語を実装している。

一般的な組み込み関数として、サニタイズ*2やワードラップ*3などが挙げられる。 また、DBMSから取得したデータを格納した配列変数を使って、表組みを行うための制御関数なども用意されている。

これらの関数を組み合わせるだけで、スクリプトに一切手を加えることなくデザインの変更が可能になる。 また、万が一バグが発生したとしても、デザインが崩れる等の軽度なバグで済むため、Webアプリケーション全体に影響を及ぼすようなバグには発展しない、というメリットがる。

サンプルの充実

メジャーなテンプレートエンジンであれば、先人達が築き上げてきた豊富なライブラリがインターネット上で公開されている。

メーリングリストで活発な情報交換が行われているテンプレートエンジンもあるので、調べてみると良いかも知れない。


*1 Server Side Includeの意。静的なコンテンツの一部分に動的な情報を埋め込む技術。
*2 無害化の意。危険なHTMLタグを排除したり、単なる文字として表示する事。
*3 テキストを任意の文字数で改行させる事。

最終更新のRSS