「Zend Framework」で加速するPHP開発: 第1回 PHP開発でZend Frameworkを知らないだなんて嘘ですよね?

Zend Frameworkは、MVCアーキテクチャーを構成し、各種コンポーネントを組み合わせることで効率的なPHPアプリケーションを構築できるフレームワークで、PHP用フレームワークの本命と呼ばれています。本稿では、Zend Frameworkについて、その機能と各種コンポーネントの使い方を解説します。

はじめに

2006年3月にイスラエルのZend Technologiesによって公開された「Zend Framework」はプレビュー版ながらも多くの機能が備わっています。Zend Frameworkは、MVCアーキテクチャーを構成し、各種コンポーネントを組み合わせることで効率的なPHPアプリケーションを構築できるフレームワークで、PHP用フレームワークの本命と呼ばれています。本稿では、Zend Frameworkについて、その機能と各種コンポーネントの使い方を解説していきますが、第1回となる今回は、Zend Frameworkの概要を説明した後、Zend Frameworkの導入方法について説明します。


Zend Frameworkとは?

Zend Frameworkは、PHPアプリケーションのためのフレームワークです。名称に「Zend」とあるとおり、イスラエルのZend Technologies(以下、Zend)が中心となって開発しています。Zendについては、PHP 5のコアである「Zend Engine 2」などを開発している会社として、ご存じの方も多いでしょう。Zend Frameworkは、Zendのドメインでホスティングされており、フレームワークのダウンロードやマニュアル・開発のいきさつなどもこのサイトで閲覧できます。

http://framework.zend.com/

また、Zend FrameworkはPHP Collaboration Projectの成果物の1つでもあります。このプロジェクトには、リスト1に挙げるように数多くの企業・団体が参加しており、ほかにも同プロジェクトの成果として、PHP開発者のためのコミュニティー「Zend Developer Zone」、Eclipse環境でPHPの開発を可能にする「Eclipse PDT Project-PHP Development Tools-」*が存在します。

リスト1 PHP Collaboration Projectの参加団体
100days、Actuate、Amazon、Chris Shiflett、eBay、IBM、Intel、Joomla、MySQL、Ning、Oracle、
Paypal、php|architect、Sebastian Bergmann、SugarCRM、Zend Technologies

Zend Frameworkの目標

NexenServicesが発表した2006年8月現在の統計では、いまだPHP 4が全体の90%を占めており、PHP 5の利用はまだ広まっているとはいえません。またその結果、数多く存在するフレームワークやアプリケーションは、依然としてPHP 4を前提として作成されています。これらのアプリケーションはPHP 5の環境では完全には動作しない場合や、改善された機能をうまく利用できなかったりする問題があります。

Zend Frameworkは、PHP 5で使用可能なフレームワークとして開発され、ここで述べたような既存のPHPにおける課題を解決することが、目標の1つとして掲げられています。また、幅広い機能を提供しつつシンプルさを失わないことも目標の1つです。例えばデザインパターンを覚えることが必要になったり、膨大なクラス資産を理解しておかなければ使用できなかったりということはなく、極力シンプルに作成されています。その結果、ソースコードの可読性も高くなっていると感じられます。Zend FrameworkのライセンスはNew BSD Licenseを採用しており、利用者にとって使用上の制約が少なくなるよう配慮されています。

Zend Frameworkのロードマップ

2006年9月19日には、Zend Frameworkの開発をリードしているAndi Gutmansが、Zend Developer Zoneで今後のロードマップを発表しています。1.0リリースで実装が予定されている機能は、表1のようになります。これまでのリリースから大きく変更されるというよりは、必要とされる機能を追加していく方向性と言えるでしょう。特に「Authentication & authorization」「i18n,l10n & validation」「Infrastructure」のカテゴリで今後追加されるコンポーネントが多いようです。また、Preview 0.2リリースではMVCモデルのUpdateも予定されています。

表1 1.0リリースで実装が予定されている機能

拡大図

このように、既存のコンポーネントにもバグフィックスやAPIの追加など細かい修正が行われ、品質を高めていくものと考えられます(コラム1)。


コラム1:Zend Frameworkの開発フロー

Zend Frameworkの開発プロジェクトでは、機能が取り込まれる過程で開発者どうしのコミュニケーションがオープンかつ円滑に進むよう、「Zend Community Wiki」が開かれています。このWikiでは、主にコントリビューター(ソースコード開発者)とドキュメントの開発者向けに、標準や規約としてのルールが定められています。

Zend Frameworkのコーディング規約は非常にシンプルです。この規約はZend Frameworkを開発する方が守るべきルールであり、使用する人が覚える必要はないものですが、あらかじめこの規約を覚えておくとフレームワークのソースコードを読みやすくなります。

Ruby on Railsの影響で、最近はSeasar 2のようにCoC(Convention over Configuration)を意識した設計を行うフレームワークが増えてきています。Zend Frameworkも規約の条項は少ないので、学習の負担は軽く、ある程度規約に従ったコードの書き方を覚えておけば、ネーミングルールなどの推測がしやすくなります。

そのほかにも、Zend Community WikiはProposalのレビューを行う場としての役目も持っています。コミュニティの開発メンバーが開発したソースコード(コントリビュート)は、Zend Frameworkに正式に組み込まれるまでに、おおまかに次のプロセスを通過します(図A)。

  1. Proposal:メンバーの提案したアイデアについて、コミュニティのメーリングリスト上でディスカッションが行われます。その後、ProposalとしてコミュニティWikiにページが作成されます。
  2. Laboratory:ProposalはまずLaboratoryというステータスになり、SVNプロジェクトが作成されてコアチームによるレビューを受けながらリビジョンアップを繰り返します。
  3. Incubator:すでにリリースされているCoreコンポーネントの一部となるProposalは、Incubatorというステータスになり、Zend Frameworkのパッケージに含まれます。
  4. Core:AcceptされたProposalはZend FrameworkのCoreに組み込まれ、正式なFrameworkのコンポーネントとなります。

なお、現在挙げられているProposalについては、こちらで確認できます。


図A Zend Frameworkの開発フロー

Zend Frameworkの導入方法

Zend FrameworkのパッケージはZendのWebサイトからダウンロードでき、2007年2月末現在のバージョンはPreview 0.8.0です。また、通常版のダウンロードのほかに、Subversionのリポジトリから開発版を入手することも可能です。

現時点でZend Frameworkを使いたい方は、普段は開発版を利用し、公式リリースが出るたびに、新しい機能や既存APIの変更点などを確認していくと良いでしょう。

導入前の準備

Zend FrameworkのMVCモデルは、Apache HTTP Serverのmod_rewriteの機能に依存しています。そのため、MVCモデルを利用する場合にはApache HTTP Serverか、これをベースに拡張したWebサーバ*が前提となります(MVCモデルの機能を使用しない場合は、IISなどほかのWebサーバと組み合わせて使用可能です)。

Zend Frameworkの現在のバージョンでは、コンパイル済みのApache2が同梱されるようになったため、Zend Frameworkの稼働に必要なランタイムが一括で導入可能になっています。また、当然ですがPHPのコミュニティーサイトからダウンロードできる通常のPHPも使用できます。

Zend Frameworkのダウンロード

Zend Frameworkのパッケージは、zipまたはtar.gzで圧縮されていますが、展開すると次のようなディレクトリ構造になっており、それぞれの内容は表2のようになります。

demosdocumentation/incubator/library/tests/LICENSE.txtNEWS.txtREADME.txt

表2 Zend Frameworkパッケージの内容

拡大図

ライブラリをPHPのinclude_pathに含める

Zend Frameworkのライブラリ(Coreが含まれるディレクトリ)をPHPのinclude_pathに設定することで、各クラス・インタフェースの呼び出しを簡略化できます。その際は次の2通りの方法が一般的です。

  1. php.iniのinclude_pathディレクティブにZend Frameworkのlibraryディレクトリへのパスを追加する(リスト2
  2. 常に読み込まれる最初のPHP実行ファイルの先頭に、set_include_pathメソッドを使用して追加する

どちらを使っても良いのですが、後者の方法を用いることで、「ランタイムとなるPHPの設定に左右されなくなる」(配布の容易性)というメリットがあります。アプリケーションごとにFrameworkのバージョンを分けたい場合に使うと良いでしょう。ただし、どのURLへアクセスする場合にも、必ず参照されるようなFront ControllerとなるPHPスクリプトが存在する必要があります(Front Controllerについては後述)。

リスト2 php.iniの変更

include_path = ".;C:/Development/application/library"

Zend FrameworkのMVCモデルと設定

Zend Frameworkでは、Front ControllerパターンのMVCモデルが採用されています(図1)。この方式では、フロントコントローラーへアクセスを集中させた後、次のように各コンポーネントで処理を行います。

  1. Routerでは、URLに従ってルーティング制御を決めZend_Controller_Dispatcher_TokenオブジェクトにまとめてDispatcherに受け渡す
  2. Dispatcherは、Zend_Controller_Dispatcher_Tokenオブジェクト内の値に従ってAction Controllerを呼び出し、Action Controllerに定められているActionメソッドを実行する
  3. Actionメソッド内ではModelクラスとのやり取りを行うか、またはブラウザ画面への表示を制御するViewクラスへ変数をセットして呼び出す
図1 Front ControllerパターンのMVCモデル
図1 Front ControllerパターンのMVCモデル

Routerの選択でコーディングの規約が多少変化するものの、Model-View-Controllerのレイヤーに分けてお互いを独立としたコンポーネントにする点において、Zend Frameworkはほかの多くのMVCフレームワークと変わりません。Zend Frameworkでは、各コンポーネントを別々のディレクトリに保管する次のようなディレクトリ構造*を推奨しています。

controllers/models/views/

利用者がコードの中で各ディレクトリを指定するような仕様*となっているので、このディレクトリ構造は使用する上での必須条件ではありません。RouterごとにAction Controllerのディレクトリを分けたり、Action ControllerごとにViewのディレクトリを分けたりすることも可能です。ただし、管理が煩雑になるため、特別な事情がない限りは推奨どおりに使用することをお勧めします。

httpd.confの設定

Zend FrameworkのMVCモデルを使用するには、まずApache HTTP Serverのmod_rewriteを有効にする必要があります。httpd.conf内でrewrite_moduleがロードされていることを確認し、ルートディレクトリのAllowOverrideディレクティブの設定を変更します(リスト3)。これによって、Webサーバに公開されているすべてのディレクトリにおいて、.htaccessの設定が上書きされます。AllowOverrideの値は「All」でも構いませんが、ルーティング制御に必要なFileInfoを、.htaccessファイルの設定で上書きすることを許可する必要があります。

リスト3 MVCを利用するための設定(httpd.conf)
//mod_rewriteのロード
LoadModule rewrite_module modules/mod_rewrite.so
//Directoryディレクティブの設定
<Directory "C:/Program Files/Apache Group/Apache2/htdocs">
  Options Indexes FollowSymLinks
  AllowOverride FileInfo
</Directory>

.htaccessファイルの作成

次に、httpd.confの設定に合わせて.htaccessファイルを作成します。Zend Frameworkで推奨されている.htaccessファイルの設定はリスト4のようになり、拡張子がjs、ico、gif、jpg、png、css以外のファイルに対するアクセスをindex.phpへのアクセスへrewriteする設定になります。これをZend Frameworkを使用するアプリケーションのルートディレクトリに配置して、PHPスクリプトへのアクセスをindex.phpで一括制御します。

リスト4 推奨されている.htaccessファイルの設定
RewriteEngine onRewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

次回は

ここまででZend FrameworkのMVCモデルを使用する準備は整いました。次回は、各コンポーネントの使用方法を説明していきます。


このページで出てきた専門用語

Eclipse PHP IDE Project

IBMとZendが協力して開発しているEclipseプラグイン。2007年2月時点で、PDT 0.7 RC2が公開されています。

Apache HTTP Serverか、これをベースに拡張したWebサーバ

本稿ではこれ以降、Apache HTTP Serverとの組み合わせを例として解説します。

次のようなディレクトリ構造

controllersディレクトリには、Action Controllerが配置されます。

利用者がコードの中で各ディレクトリを指定するような仕様

ただし、Action Controllerのファイル名は命名規約が存在するので注意が必要(例えばIndexコントローラの場合、IndexController.phpというように命名しなければならないなど)。

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Web development, Open source
ArticleID=249935
ArticleTitle=「Zend Framework」で加速するPHP開発: 第1回 PHP開発でZend Frameworkを知らないだなんて嘘ですよね?
publish-date=03302007