連載
» 2007年10月09日 00時00分 公開

今から始める MySQL入門(11):Smartyでテンプレートエンジンの威力を知る (1/3)

[鶴長鎮一,@IT]

テンプレートが果たす役割

 改まったビジネス文書や手紙の作成にはしばしば、テンプレートが利用されます。テンプレートに差出人や相手方の情報を入力するだけで、気の利いた季節のあいさつや丁寧な結びの句を織り交ぜた文書を簡単に作成することができます。

 さて、PHPはHTMLタグとPHPコードが共存できることを特徴とし、多くの利用者を獲得してきました。しかしPHPコードが冗長になるにつれ、HTMLの記述が複雑になり、デザインの修正が難しくなる傾向があります。

 そこでPHPにおいても、文書テンプレートのアイデアを取り入れた「テンプレートエンジン」が利用されます。

 テンプレートエンジンを利用すれば、PHPコードで作られたロジックが吐き出す値を、HTMLデザインを分離したテンプレートに埋め込むことが可能になります。この結果、ロジックを作成する作業と、HTMLデザインを編集する作業を分担して行うことが可能になります。

テンプレートエンジン「Smarty」の特徴

 PHPのテンプレートエンジンとして広く利用されているものの1つに「Smarty」が挙げられます。

関連リンク:

Smarty日本語マニュアル

http://smarty.php.net/manual/ja/


 Smartyで使用するテンプレートでは、単に値をはめ込むだけでなく、if文による条件分岐やforeachによるループ処理など、必要最低限の制御構造や組み込み関数が利用可能です。もちろんこうした機能の利用は必須ではなく、HTMLテキストと単純な変数のみでテンプレートをまとめることもできます。

 またSmartyは動作速度の面でも秀でています。最初にリクエストが発生した際に、テンプレートファイルを実行可能なPHPスクリプトにコンパイルし、その後のリクエストではコンパイルされたPHPスクリプトを再利用します。テンプレートに変更が加えられたときにのみコンパイルを再実行するなど効率面でも優れています。

 ほかにも、キャッシュ機能を搭載するなど、PHP本来のパフォーマンスを損なうことなく、ロジックとデザインを分離することができます。Smartyの詳細については、先に挙げたURLを参考にしてください。

図1 Smartyによるロジック作業とデザイン作業の分離 図1 Smartyによるロジック作業とデザイン作業の分離

 Smartyの多機能さを見ると、難解なコードや複雑なインストール作業を予想し、尻込みするかもしれませんが、導入や利用は至って容易です。新規のインストールはもちろん、既存のPHPコードに導入することもできます。

 以下、Smartyの簡単なサンプルを用いて、その基本機能を紹介します。

Smartyとsample8のインストール

Smartyのインストール

 Smartyの公式サイト(http://smarty.php.net/download.php)からソースアーカイブをダウンロードし、展開します。展開後、ソースアーカイブに含まれるlibsディレクトリごと、「/usr/local/lib/」などApache HTTPのデーモン権限で読み出し可能なディレクトリに移動します。

# tar xvfz Smarty-2.6.18.tar.gz
# mv Smarty-2.6.18/libs /usr/local/lib/smarty

 Smartyの基本インストールは以上です。

 後はコンテンツごとにSmartyが利用する作業ディレクトリを作成します。これらの作業ディレクトリの中には、テンプレートを設置するディレクトリのほか、コンパイルで作成されるPHPコードの展開先ディレクトリが含まれます。Smartyを利用するには、次のいずれかの方法でSmarty.class.phpを読み込みます。

<?php
define('SMARTY_DIR', '/usr/local/lib/php/Smarty/');
require_once(SMARTY_DIR . 'Smarty.class.php');
...省略...
?>
      ■手動でSMARTY_DIR定数を定義する場合

<?php
require_once('/usr/local/lib/smarty/Smarty.class.php');
...省略...
?>
      ■ライブラリファイルの絶対パスを指定する場合

 ほかに、「/etc/php.ini」を編集してinclude_pathにライブラリディレクトリを追加する方法や、ApacheのドキュメントルートやPHPスクリプトと同じディレクトリにライブラリを展開する方法もあります。ただし本稿では、「手動でSMARTY_DIR定数を定義する場合」を基に解説を加えていきます。

sample8のインストールと動作確認

 こちらからサンプルアーカイブ「sample8.tgz」をダウンロードし、Apache HTTPデーモン(Apache HTTPD)のドキュメントルート(*注)など、PHPが動作するディレクトリに展開し、作業ディレクトリを移動します。

注:ソースからデフォルトインストールした場合は/usr/local/apache2/htdocs、FedoraやRed hatなどRPMインストールした場合は/var/www/htmlなど


 Smartyを動作させるには、PHPスクリプトとテンプレート以外に、4つのディレクトリ(tempalates/templates_c/configs/cache)を必要とします。これらのディレクトリはサーバ単位ではなく、コンテンツ単位で用意することが推奨されています。

 sample8にもこれらのディレクトリが含まれていますが、各ディレクトリのオーナーやパーミッションを再設定する必要があります。Smartyのコンパイル処理はApache HTTPDデーモンの権限で実行されるため、コンパイル済みのPHPコードが保存されるディレクトリ(templates_c)は、Apache HTTPDの権限で読み込み/書き込みができるよう設定します。キャッシュデータが保存されるディレクトリ(cache)についても同様です。

サンプルダウンロード:

sample8のtarアーカイブ


サンプル「sample8」をドキュメントルートに展開し、作業ディレクトリを移動する。下のドキュメントルートはFedoraやRed HatなどRPMインストールした場合の例。適宜変更する
# cd /var/www/html
# tar xvfz /..pathto../sample8.tgz

Smartyの動作に必要な各ディレクトリのオーナー(Apache HTTPデーモンのUser/Groupを指定*注)やパーミッションを設定
# cd sample8
# chown apache.apache templates_c
# chmod 770 templates_c
# chown apache.apache cache
# chmod 770 cache

*注:Apache HTTPデーモンのUser/Groupは「nobody」や「www」などインストール方法により異なります。httpd.confで確認することができます


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。