ZendFrameworkで作る『イマドキ』のWebアプリケーション
第0回 PHPのWeb開発フレームワーク
フレームワークとテンプレートエンジン
最近のフレームワークの傾向としては,テンプレートエンジンが用意されていないものが増えてきています。ZendFrameworkも独自のテンプレートエンジンを持たないフレームワークとしてリリースされました。PHPの場合,次のサンプルコードのように言語自体がテンプレートエンジンのようなものであり,出力バッファが組み込まれていることもあり,テンプレートシステムの必要性が低いからです。
PHP本体の機能によるテンプレート化
<html>
<title><?= h($title)?></title>
<body>
<h1>My book list</h1>
<?php foreach($rows as $row): ?>
<h2><?= h($title)?></h2>
<p><?= h($review)?></p>
<hr />
<?php endforeach;?>
</body>
コードの解説
h()はhtmlentities関数等のラッパー関数です。“<?=”は“<?php echo”と同じですが,php.iniでshort_tagが有効に設定されていないと利用できません。現在,“<?=”を常に有効化する議論が行われています。実現した場合,“<?=”の利用が一般的になるでしょう。
注)PHPの開始タグには<?php,<?,<%,<script language="php">が利用でき,開始タグとechoが一緒になった<?=と<%=が利用可能です。
DojoがバンドルされたZendFramework 1.6.0から,DojoのGUIコンポーネントをサポートするヘルパーも追加されました。一般にテンプレートと呼ばれるシステムは持っていませんが,AJAXアプリケーションを作るためのサポート機能は持っています。Smarty等の既成のテンプレートシステムを組み込むことも簡単です。
PHP以外の言語のフレームワークの場合,テンプレートエンジンにキャッシュ機能を持たせていることが多いです。PHPの場合,出力バッファがPHP本体に組み込まれているので,テンプレートエンジンが無くても簡単にキャッシュ機能を実装できます。テンプレートエンジンを使っても高速に動作させることも可能ですが,シンプルさや動作速度を重視してテンプレートエンジン無しのフレームワークが増えています。
PHP5用フレームワークの将来
PHP5がリリースされてから丸4年が過ぎ,PHP4のメンテナンスが終了ました。新規開発ではPHP4もサポートするフレームワークを選択するメリットは少なくなりつつあります。現在,PHP5とまだリリースされていないPHP6が開発中です。PHP 5.2が安定板としてリリースされています。次のリリースとしてPHP5.3も開発中で,アルファ版がリリースされています。
今後PHP5用のフレームワークは,PHP 5.3以上とPHP 5.3未満の2種類が存在するようになると予想されます。PHP 5.3には名前空間のサポートやバイトコードキャッシュを利用した場合と利用しない場合のスクリプト実行の整合性維持,定数置換によるバイトコード最適化,クロージャサポート,レイトスタティックバインディング(※2)等,フレームワーク開発者が必要としていた機能が追加されています。PHP 5.3用のフレームワークが登場し,実用となるまでには1年以上の期間が必要と思われますが,PHP 5.3.0 Alpha版のリリースにより今年あたりから動きが見られると考えられます。
- ※2
レイトスタティックバインディングによりActive Recordパターンの実装が容易になる等のメリットがあります。
Zend Framework
Zend FrameworkはPHP5用のフレームワークとして開発されました。現在までに1.0,1.5,1.6,1.7までリリースされています。1.0のリリース以降,短い間隔で多くのリリースが公開されていますが,各バージョンの互換性は比較的高く移行は比較的容易です。
- ZendFramework主な機能
- MVCパターン,PHP5対応,コード生成,キャッシュ,AJAX(Dojo,JQuery),国際化,全文検索,PDF生成,DBアクセスの抽象化
Zend FrameworkはAJAXライブラリとしてDojoをバンドルしています。DojoはAJAXライブラリと言うよりAJAXフレームワークと呼ぶに相応しいものになっています。ハッシュ関数から画面制御のコンポーネントまで多くの機能を提供しています。
Zend Framework 1.7には便利な機能であるFirePHPサポートが追加されています。FirePHPとはAJAXアプリケーション開発に欠かせないFirefox拡張であるFirebugコンソールに簡単なPHP関数呼び出しログを出力する機能です。FirePHPのサポートによりZend FrameworkからもFirebug Consoleにログファイルを送ることが可能となります。
ZendFrameworkは,それぞれのコンポーネントの独立性を重視する設計を採用しています。バリデータだけ使う,キャッシュだけ使う,ログだけ使う,といった感じで特定のコンポーネントだけ使うことが可能になっています。Webアプリケーションを構築する際も,アプリケーションのディレクトリ構成を想定しておらず,ディレクトリ構造は自由に設計できます。このため,Zend Frameworkはフレームワークと言うよりライブラリと言ったほうが相応しいとされてきました。
Zend Framework 1.6からスケルトンコードの自動生成を行うZend Toolが追加されました。zfコマンドが追加され,プロジェクト,アクション等のスケルトンコード作成が可能なりました。1.0の頃のZendFrameworkのMVCコンポーネントはデフォルト値が設定されていなかったので,コントローラ,ビュー,モデル等の格納場所を設定する必要がありました。現在のZendFrameworkはデフォルト値が設定されたので,デフォルト通りであれば設定する必要がなくなりました。
Zend_Framework1.5.0までの弱点は,AJAXサポート,スケルトンコードの自動生成,ORM機能でした。AJAXサポートはDojo,JQueryのサポートで大幅に改善しました。コード生成機能はまだごく基本的な機能しかサポートしていませんが,1.6.0から追加されました。ORM機能の強化はされていません。ZendFrameworkのORM機能には改善の余地が多くありますが,残念ながらレイトスタティックバイディングがサポートされるPHP 5.3まで大きく改善されることはあまりないと予想できます。


