ZendFramework入門・準備編 Zend Frameworkの動作環境を作る ― 2007年08月28日 02時53分30秒
突然入門記事を書いてみたり
えー、なにを思ったか、Zend Frameworkの入門記事を書いてみたいと思います。とりあえずの第一段階として、Zend Framework標準のMVCアーキテクチャを使用して、フォームの内容をDBに書き込んであとで検索できるような簡単なメモアプリを作ることを目標にしようと思います。dara-jにそんなスキルがないので、PHPやオブジェクト指向プログラミングの詳しい解説は省略させていただきます。前提として
- PHPをある程度使える(他人のソースをほんのちょっと改造できる程度)
- クラスベースのオブジェクト指向プログラミングをかじったことがある
必要な環境
Zend Frameworkでアプリケーションを作成・動作させるには以下のような環境が必要になります。
- PHP(5.1.4以降): Zend FrameworkはPHP5のオブジェクト指向機能を利用しているため5.1.4またはそれ以降のPHP環境が必要になります。
- URLリライト機能があるWebサーバ:Apacheであればmod_rewriteを有効にすれば問題ありません、IISでもISAPI Rewriteを使用すればZend Frameworkを動作させることができます。
- テキストエディタ:ソースコードの編集に必要です。本当はPDTのようにコード補完機能が利用できるIDEがあればいいのですが、ここで取り扱う規模なら手になじんだテキストエディタで十分でしょう。
- Web ブラウザ:Webアプリケーションを作るので、当然ながら動作確認にブラウザが必要です。
インストール
まずはPHPとWebサーバをインストールする必要がありますが、ここでは省略します。検索すれば有用な記事がたくさん見つかると思うのでそれらを参考にして、PHPが動作する環境を作ってください。
PHPが正常に動作する環境が確保できたら、Zend Frameworkをダウンロードします。こちらのダウンロードページからダウンロードしてください。
※:この記事を書いている2007年 8月 28日時点では、1.0.1が最新バージョンです。この記事は1.0.0をベースに進めますがバージョン間の相違はおそらくないのでどちらでも問題ないと思います。
1.0.0(または1.0.1)のアーカイブをダウンロード・解凍すると、以下のようなディレクトリ構成になっているはずです。
- ZendFramework-1.0.x/ → ルートフォルダ
- demos/ → デモアプリケーションフォルダ。この連載では使用しません
- incubator/ → 正式のライブラリになる前の実験的(?)なライブラリ郡があります。この連載では使用しません
- library/ → ライブラリのルートフォルダ
- tests/ → テストスクリプトフォルダ。この連載では使用しません
URLリライトの動作確認
ZendFrameworkの設定と動作確認の前に、URLリライトの設定と動作確認をとってみましょう。Apacheを使用しているのであれば、書き換え対象のフォルダに以下のようにルールを記述した.htaccessを設置するだけですみます。
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.phpこれは、「.js、.ico、.gif、.jpg、.png、.css以外の名前のパスをすべてindex.phpにリライトする」というルールです。Zend Framework(性格にはZend_Controller_*を使用したMVCモデル)では、このようにすべてのリクエストをアプリケーションルートのindex.phpに処理させるようにします。
今回は、ドキュメントルート下に「rewrite_test」というフォルダを切って、これを確認用のURLのルートにします。ドキュメントルートを「D:\htdocs」にした場合、以下のようなファイル配置になります。(ごめんなさい、Windows前提です。linuxなどは適当にルートやパス区切りを読み替えてください)
- D:\
- htdocs/
- rewrite_test/
- .htaccess → ここにリライトルールを記述
- index.php → 画像ファイルとJavaScript、スタイルシート以外へのアクセスはすべてここに集約される
- test.html → ダミーで設置
- rewrite_test/
- htdocs/
<?php echo 'hello, Zend Framework !';この状態で/rewrite_test/test.html(ダミーファイルへのURL)へアクセスして、「hello, Zend Framework !」と表示されれば、URLリライトの機能は正常です。もしtest.htmlが表示されるようであれば、Apacheの設定でmod_rewriteがONになっているか再度確認してください。
IIS + ISAPI Rewriteの場合
IIS + ISAPI Rewriteの環境の場合はApacheよりもちょっとだけ面倒です。ルールの記述はISAPI Rewriteのインストールディレクトリにある「httpd.ini」に記述する必要があります。さらに書式もちょっと面倒です。上記環境の場合は以下のようになります。
[ISAPI_Rewrite] RewriteRule ^/rewrite_test/[\w/\%]*(?:\.(?!(?:js|ico|gif|jpg|png|css)$)[\w\%]*$)? /rewrite_test/index.php [I]これ以降、アプリケーションフォルダを切るたびに対象のパスに対する同様の記述をhttpd.iniへ追加していく必要があります。まぁ、コピーペーストでパスだけ書き換えればいいのですが。
インクルードパスの設定
URLリライト機能の確認ができたら、Zend FrameworkのlibraryフォルダをPHPのインクルードパスに設定します。たとえば、アーカイブを解凍したルートフォルダごと、Dドライブ直下に設置した(つまり、D:\ZendFramework-1.0.0 になっている)場合は、PHP.iniのinclude_pathを以下のように設定します。
; Windows向けの例 include_path ".;D:\ZendFramework-1.0.0\library"もし、他のライブラリを常用するのであればそちらのパスも忘れずに記述しておいてください。
PHP.iniを書き換えたら、CGIモードでない限りは設定を反映させるためWebサーバを再起動する必要があります。
いよいよZend Frameworkのライブラリを使ってみる
インクルードパスが正しく設定されていれば、Zend Frameworkのライブラリにあるクラス郡を使用できます。先ほどのindex.phpを以下のように変更してみましょう。
<?php // Zend_Version クラスをrequireする。 require_once 'Zend/Version.php'; // Zend Frameworkのバージョン情報をechoする echo 'hello, Zend Framework ! version = ' . Zend_Version::VERSION;/rewrite_test/index.php にアクセスして、「hello, Zend Framework ! version = 1.0.0」と表示されれば成功です。
もしrequire_onceでWarningがあがるようならインクルードパスが適切に設定されていません。PHP.iniをもう一度見直してみてください。
これでZend Frameworkの環境ができあがりました。次回からはもう少しプログラミングっぽくしていこうと思います。
あとがき
dara-jは全然PHPerではないのですが、現在とっかかってる仕事がZend Frameworkを使用しているので、日々PHPやZend Frameworkと格闘しています。
いまではそこそこ慣れたのですが、使い始めのころはZend Frameworkの「プログラマ向けリファレンスガイド」と首っ引きでした。もちろん、このリファレンスガイドとAPIドキュメントがあれば大体のことは網羅されていますし、当然ソースコードも公開されているのでそちらを追いかければより詳細な仕様を確認できるのですが、とっかかりとしては敷居が高く、かなりうなりながらドキュメントを読んでいたように思います。
「PHPフレームワークの本命」と言われている割に、検索をしてみてもあまりまとまった入門記事にあたらないように思います。ITmediaの記事や、IBM developerWorksの記事もありますが、若干古い内容なため、現状の1.0系とはところどころ違っている部分もあるので、ひょっとするとdara-jが学んだようなことがだれかの役に立つかもしれない、と思いこの記事を書き始めました。
コードはなるべく検証してから掲載するように心がけますが、間違いやバグ、環境によって動作しないような部分があったらコメントやトラックバックでお知らせいただければ幸いです。
仕事などの関係もあるのでそうしょっちゅうは記事をかけないかも知れませんが、気長に読んでいただければ幸いです。
こっそり訂正 (07.08.28 11:48)
PHPのソース中の開始タグの「?」が抜けてました。間抜けすぎます。
最近のコメント