第1回 PHP開発でZend Frameworkを知らないだなんて嘘ですよね?:「Zend Framework」で加速するPHP開発(2/2 ページ)
Zend Frameworkは、MVCアーキテクチャを構成し、各種コンポーネントを組み合わせることで効率的なPHPアプリケーションを構築できるフレームワークで、PHP用フレームワークの本命と呼ばれている。本稿では、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のようになります。
demos
documentation/
incubator/
library/
tests/
LICENSE.txt
NEWS.txt
README.txt
ライブラリをPHPのinclude_pathに含める
Zend Frameworkのライブラリ(Coreが含まれるディレクトリ)をPHPのinclude_pathに設定することで、各クラス・インタフェースの呼び出しを簡略化できます。その際は次の2通りの方法が一般的です。
- php.iniのinclude_pathディレクティブにZend Frameworkのlibraryディレクトリへのパスを追加する(リスト2)
- 常に読み込まれる最初のPHP実行ファイルの先頭に、set_include_pathメソッドを使用して追加する
どちらを使っても良いのですが、後者の方法を用いることで、「ランタイムとなるPHPの設定に左右されなくなる」(配布の容易性)というメリットがあります。アプリケーションごとにFrameworkのバージョンを分けたい場合に使うと良いでしょう。ただし、どのURLへアクセスする場合にも、必ず参照されるようなFront ControllerとなるPHPスクリプトが存在する必要があります(Front Controllerについては後述)。
include_path = ".;C:/Development/application/library"
Zend FrameworkのMVCモデルと設定
Zend Frameworkでは、Front ControllerパターンのMVCモデルが採用されています(図1)。この方式では、フロントコントローラーへアクセスを集中させた後、次のように各コンポーネントで処理を行います。
- Routerでは、URLに従ってルーティング制御を決めZend_Controller_Dispatcher_TokenオブジェクトにまとめてDispatcherに受け渡す
- Dispatcherは、Zend_Controller_Dispatcher_Tokenオブジェクト内の値に従ってAction Controllerを呼び出し、Action Controllerに定められているActionメソッドを実行する
- Actionメソッド内ではModelクラスとのやり取りを行うか、またはブラウザ画面への表示を制御するViewクラスへ変数をセットして呼び出す
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ファイルの設定で上書きすることを許可する必要があります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
- .htaccessファイルの作成
次に、httpd.confの設定に合わせて.htaccessファイルを作成します。Zend Frameworkで推奨されている.htaccessファイルの設定はリスト4のようになり、拡張子がjs、ico、gif、jpg、png、css以外のファイルに対するアクセスをindex.phpへのアクセスへrewriteする設定になります。これをZend Frameworkを使用するアプリケーションのルートディレクトリに配置して、PHPスクリプトへのアクセスをindex.phpで一括制御します。
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
次回は
ここまででZend FrameworkのMVCモデルを使用する準備は整いました。次回は、各コンポーネントの使用方法を説明していきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このページで出てきた専門用語
Apache HTTP Serverか、これをベースに拡張したWebサーバ
本稿ではこれ以降、Apache HTTP Serverとの組み合わせを例として解説する。
次のようなディレクトリ構造
controllersディレクトリには、Action Controllerが配置される。
利用者がコードの中で各ディレクトリを指定するような仕様
ただし、Action Controllerのファイル名は命名規約が存在するので注意が必要(例えばIndexコントローラの場合、IndexController.phpというように命名しなければならない)。
本記事は、オープンソースマガジン2006年11月号「Zend Framework」で加速するPHP開発を再構成したものです。
著者紹介
日本アイ・ビー・エム システムズエンジニアリング株式会社
杉田直哉
日本アイ・ビー・エム システムズ・エンジニアリング株式会社(ISE)は、日本アイ・ビー・エムグループにおけるSE技術者の専門家集団として1992年7月に設立された。
発足以来、IBM製品を中心とした難易度の高い複雑なシステム構築や先進技術の適用場面において、卓越したITスキルによりお客様と開発現場を支援してきた。
近年は、仮想化技術・グリッドコンピューティング・Web 2.0・オープンソースソフトウェア等々の先進技術分野での支援も展開している。
関連記事
- developersLife〜開発者という生き方
- PHPアプリ開発ツールベンダーに再編の動き
3社のソフトウェア開発ツール企業が経営トップの入れ替えを発表した。Zend Technologies、Catalyst Systems、Mindreefの各社は相次いで、新CEOを指名した。 - Zend、IBM System i向けのPHP製品を提供開始
関連リンク
Copyright © ITmedia, Inc. All Rights Reserved.