ZendFrameworkで作る『イマドキ』のWebアプリケーション

第2回開発環境の準備(下)

前回に引き続き、Zend Frameworkを利用したWebアプリケーション構築のための開発環境を整えます。今回はZend Frameworkをインストールし、その他開発環境全般を整えます。

Zend Frameworkのインストール

One-Click InstallerでインストールしたApache/PHPは、PostgreSQLをインストールしたフォルダと同じフォルダにあります。

図1 Linuxの場合
図1 Linuxの場合

php.iniのinclude_pathは設定されていないので、php.iniを編集する必要があります。

Zend Frameworkのダウンロードは

から行います。

図2 Zend Frameworkのホームページ
図2 Zend Frameworkのホームページ

Zend FrameworkのアーカイブはZIPまたはtar.gz形式の圧縮ファイルになっています。これを

/opt/PostgreSQL/EnterpriseDB-ApachePhp/php/lib/php

に解凍します[1]⁠。 ここにはPEAR(PHP標準のライブラリ)ライブラリがインストールされています。後でこのパスをinclude_pathに追加するので、ここに解凍します。

以下のようなディレクトリ構成を持つフォルダが作られます。

ZendFramework-1.7.2/
ZendFramework-1.7.2/demos
ZendFramework-1.7.2/demos/Zend
ZendFramework-1.7.2/externals
ZendFramework-1.7.2/externals/dojo
ZendFramework-1.7.2/incubator
ZendFramework-1.7.2/incubator/library
ZendFramework-1.7.2/incubator/bin
ZendFramework-1.7.2/incubator/tests
ZendFramework-1.7.2/library
ZendFramework-1.7.2/library/Zend
ZendFramework-1.7.2/extras
ZendFramework-1.7.2/extras/library
ZendFramework-1.7.2/extras/tests
ZendFramework-1.7.2/extras/documentation
ZendFramework-1.7.2/tests
ZendFramework-1.7.2/tests/Zend

ZendFramework-1.7.2/library/ZendにZend Frameworkのクラスファイルが保存されています。通常はこのフォルダをPHPのincludeパスが通っているパスにコピーするかシンボリックリンクを作成します。

Linux/Macの場合はシンボリックリンクがよいでしょう。

$ cd /opt/PostgreSQL/EnterpriseDB-ApachePhp/php/lib/php
$ ln -s ZendFramework-1.7.2/library/Zend

Windowsの場合はZendフォルダをコピーしてください。

インクルードパスの設定

次にphp.iniを編集してinclude_pathを変更します。

/opt/PostgreSQL/EnterpriseDB-ApachePhp/php/php.ini

にphp.iniファイルがあるので、テキストエディタで開きます。 include_pathの行を探し、以下のように修正します。

Linuxの場合
include_path=".:/opt/PostgreSQL/EnterpriseDB-ApachePhp/php/lib/php"
Macの場合
include_path=".:/Library/PostgreSQL/EnterpriseDB-ApachePhp/php/lib/php"
Windowsの場合
include_path = ".;C:\Program Files\PostgreSQL\EnterpriseDB-ApachePhp\php\lib\php"

※Windowsの場合、phpフォルダの中に⁠lib\php⁠フォルダがないので作成してください。

Apacheの再起動

php.iniへの変更を反映するにはApacheの再起動が必要です。メニューやアプリケーションフォルダの中から再起動用のスクリプトを実行します。

「PostgreSQL⁠⁠→⁠EnterpriseDB ApachePhp⁠⁠→⁠Restart Apache」

コマンドラインからも実行できます。

Linuxの場合
sudo /opt/PostgreSQL/EnterpriseDB-ApachePhp/scripts/ctlApache.sh restart

設定の確認

Apacheのドキュメントルート(Linuxの場合:/opt/PostgreSQL/EnterpriseDB-ApachePhp/apache/www)に以下のファイルを作成します。

phpinfo.php
<?php phpinfo() ?>

ウェブブラウザにアクセスしてphpinfo()のページが表示され、include_path設定が正しく表示されていれば設定完了です。

  • http://localhost:8080/phpinfo.php
図3 phpinfo()の出力
図3 phpinfo()の出力

zfコマンドの設定

Zend Framework 1.7にはコード生成を行うzfコマンドのプレビュー版が添付されています。1.7のzfコマンドは非常に簡単なコードしか生成できませんが、利用可能にしておくと便利なので設定します。

zfコマンドを実行するにはphpコマンドがパスの中になければなりません。One-Clickインストーラはパスを設定しないので追加する必要があります。別の方法でphp 5.2をインストールし、phpコマンドが実行できる場合はパスの設定は必要ありません。

Linux

.bash_profileのPATH環境変数に以下のパスを追加する

/opt/PostgreSQL/EnterpriseDB-ApachePhp/php/bin
Windows

マイコンピュータの「プロパティ⁠⁠→⁠詳細設定⁠⁠→⁠システム環境変数」のPATHに以下のパスを追加する

c:\Program Files\PostgreSQL\php

※Zend Framework 1.7.2のzf.batは正常に動作していないようです。

Mac

.bash_profileを作成して以下の設定を追加する

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/Library/PostgreSQL/EnterpriseDB-ApachePhp/php/bin

export PATH

これで準備は完了です。

ホームディレクトリ以下にbinディレクトリがなければ作成します。

$ cd ~/bin
$ ln -s /opt/PostgreSQL/EnterpriseDB-ApachePhp/php/lib/php/ZendFramework-1.7.2/incubator/bin/zf.sh zf

※Macの場合は/optを/Libraryに変える

zfコマンドを実行してヘルプが表示されれば正しく設定されています。

[framework@localhost $ zf
An action and provider is required.

Usage: zf <global options> <action name> <action options> <provider name> <provider options>
    (show) profile
    (create) project
    (show|display|show|display|show|show) version
    (list) providers

Eclipse PDTのインストール

Eclipse PDTはPHP用の開発環境です。リファクタリングなどの機能はありませんが、シンタックスハイライティングなど、最小限の機能は備えています。

バージョン管理ツールのMercurialもEclipseから利用するので、Mercurialに必要なGnuPG(暗号化、署名ツール)とMercurial本体を先にインストールします。バージョン管理ツールを利用されていない方もいると思いますが、バージョン管理ツールなしでシステム開発をするのは無駄が多すぎます。Mercurialは完全に分散型のバージョン管理ツールなので、サーバは必要ありません。非常に簡単に利用できるので、今までバージョン管理ツールを利用されたことがない方にもお薦めです。

Mercurialのインストール

Linux環境としてCentOS 5を利用していますが、デフォルトのレポジトリにはMercurialは入っていません。EPEL(Extra Package for Enterprise Linux)のレポジトリにはバージョン0.9.3という古いバージョンしか用意されていません。このバージョンでも特に大きな問題はありませんので、気にならない方はEPELのパッケージを利用されても構いません。

筆者はFedora10のmercurial SRPMをインストールし、スペックファイルを調整して1.1.2をインストールしました。

[framework@localhost PHP-ZendFramework]$ rpm -qa | grep mercurial
mercurial-debuginfo-1.1.2-1
mercurial-1.1.2-1
mercurial-hgk-1.1.2-1

最近のLinuxシステムであれば

sudo yum install mercurial

または

sudo apt-get install mercurial

とすればmercurialがインストールできます。

Windowsにはバイナリパッケージが用意されているのでバイナリパッケージをインストールします。インストーラが利用できるので簡単にインストールできます。インストールするとmercurialのhgコマンドが保存されたパスが環境変数PATHに追加されます。

Macの場合はMacPortsが利用できます。既にMacPortsがインストールされている環境であれば

sudo port install mercurial

とすればインストールできます。

インストールが完了するとhgコマンドが利用できるようになっているはずです。

[framework@localhost www]$ hg --version
Mercurial Distributed SCM (version 1.1.2)

などとバージョン番号が表示されればインストール完了です[2]⁠。

mercurialはほぼpythonで書かれたプログラムなので、pythonのインストールシステムも利用できます。詳しくはmercurialのホームページを参照してください。

GnuPG

現在利用されているLinuxシステムであれば、パッケージ管理システムでGnuPGをインストールできます。

sudo yum install gnupg

または

sudo apt-get install gnupg

とするだけです。

Windowsの場合はバイナリパッケージが用意されています。インストーラも用意されているので簡単にインストールできます。筆者はGnuPGホームページのdownloadページからリンクされているバイナリパッケージを利用しました。

Macの場合はMacPortsが利用できます。既にMacPortsがインストールされている環境であれば

sudo port install gnupg

としてインストールできます。GnuPGのホームページからMacGPGもダウンロードできますが、コマンドが必要なのでportが利用できる場合はportコマンド利用してインストールしたほうが便利でしょう。

インストールが完了していればgnupgコマンドが利用できるようになっています。

[framework@localhost www]$ gpg --version
gpg (GnuPG) 1.4.5

などとバージョン番号が表示されればインストール完了です[3]⁠。

詳しくはGnuPGのホームページを参照してください。

Eclipse PDTのインストール

Eclipseのパッケージ管理システムからPDTをインストールすることも可能ですが、手間がかかったり、パッケージのインストールに失敗することがあるので、すべて入っているAll-In-Oneと呼ばれるアーカイブを利用します。

EclipseはJavaを利用しています。システムにJavaがインストールされていない場合は

にアクセスしてJVMをインストールしてください。EclipseではSUNまたはIBMのJVM 1.5.0以上を推奨していますが、Open JDKでも問題なく動作します。ただし、GCJではEclipse PDTは動作しないので注意してください。

java -version

を実行してバージョン番号が表示されていればインストールされています。

必要なJVMがインストールされていれば、Eclipse PDTのサイトからAll-In-Oneパッケージをダウンロードして展開し、eclipseフォルダの中のeclipseを実行するだけです。

にアクセスするとダウンロードページが表示されます。最新のAll-In-Oneパッケージをダウンロードします。執筆時点(2009/1/3)の最新安定版は2.0です。Linux/Windows/Mac用のパッケージが用意されています[5]⁠。

elipseコマンドを実行してEclipseが開けばEclipseのmercurialプラグインのインストールが行えます。

図4 Eclipseが起動した画面
図4 Eclipseが起動した画面

Workbenchを開いて、⁠File⁠⁠→⁠New⁠⁠→⁠Project」を選択するとプロジェクトにPHPが選択できることがわかります。

図5 プロジェクト作成画面
図5 プロジェクト作成画面

Mercurial Eclipseのインストール

Mercurial、GnuPG、Eclipseのインストールが終了したので、バージョン管理システムのEclipseプラグインをインストールできます。

ホームページ
http://www.vectrace.com/mercurialeclipse/

インストール方法はほかのEclipseプラグインと同じです。

「Help⁠⁠→⁠Software Updates⁠⁠→⁠Find and install...」

から

「Search for new features to install」

を選択し

[New Remote site...]

ボタンを押して

http://www.vectrace.com/eclipse-update/

を新しいリモートサイトとして登録し、Mercurial Eclipseを選択します。

図6 プラグイン選択画面
図6 プラグイン選択画面

[Install]ボタンを押すとウィザードが開始され、指示通りに操作するとインストールされます。

Mercurial Eclipseの動作確認

「File⁠⁠→⁠New⁠⁠→⁠Project」からPHPプロジェクトを作成します。すべてデフォルトでプロジェクトで大丈夫です。

新しく作成したプロジェクトを右クリックし、コンテクストメニューの「Team」を選択します。⁠Share Project」を選ぶと「CVS」「Mercurial」を選択するダイアログが開きます。Mercurialを選ぶとプロジェクトのバージョン管理ができるようになります。CVSはサーバが必要ですが、Mercurialは必要ありません。

バージョンを管理したいフォルダやファイルを右クリックし、⁠Team」を選択し、⁠Add」を選ぶとバージョン管理対象として登録されます。変更をリポジトリ(バージョン管理システムのデータベース)に登録するには「Team」「Commit」を選択します。変更がどのような変更なのか記入するダイアログが開くのでコメントを記入し、⁠OK]ボタンを押して変更を登録します。

コミットした変更と現在のファイルとの差分はファイルを右クリックして「Compare with⁠⁠→⁠Parent Changeset」を選択すると違いが確認できます。

図7 Mercurial Eclipseの差分表示
図7 Mercurial Eclipseの差分表示

Eclipseからは複数のファイルの差分を一度に参照できないので、差分を一度に見たい場合はターミナルから

$ hg diff

と入力します。cvsやsubversionを利用していた方なら、cvs/svnコマンドをhgに置き換えるだけで基本的な操作ができます。

例:
$ hg status
$ hg commit

詳しくはMercurialのマニュアルなどを参照してください。

開発環境の仕上げ

最後に開発環境の仕上げを行います。テスト用のアプリケーションディレクトリとして/www/testを用意し、Apacheの設定を調整します[6]⁠。

“/www/⁠ディレクトリを作成します。

$ sudo mkdir /www

ユーザ権限で編集できるように権限を変更します。

$ sudo chown framework:framework /www

zfコマンドでtestアプリケーションディレクトリを作成します。

$ zf create project

これで、アプリケーションのスケルトンが作成されます。

$ ls -la
合計 12
drwxrwxr-x  5 yohgaki yohgaki   72 2009-01-19 09:43 .
drwxr-xr-x 59 yohgaki yohgaki 4096 2009-01-19 09:49 ..
-rw-rw-r--  1 yohgaki yohgaki 1724 2009-01-19 09:43 .zfproject.xml
drwxrwxr-x  6 yohgaki yohgaki   83 2009-01-19 09:43 application
drwxrwxr-x  3 yohgaki yohgaki   17 2009-01-19 09:43 library
drwxrwxr-x  2 yohgaki yohgaki   38 2009-01-19 09:43 publ
applicationディレクトリの内容
$ ls -la application/
合計 4
drwxrwxr-x 6 yohgaki yohgaki   83 2009-01-19 09:43 .
drwxrwxr-x 5 yohgaki yohgaki   72 2009-01-19 09:43 ..
-rw-rw-r-- 1 yohgaki yohgaki 1576 2009-01-19 09:43 bootstrap.php
drwxrwxr-x 2 yohgaki yohgaki    6 2009-01-19 09:43 configs
drwxrwxr-x 2 yohgaki yohgaki   58 2009-01-19 09:43 controllers
drwxrwxr-x 2 yohgaki yohgaki    6 2009-01-19 09:43 models
drwxrwxr-x 4 yohgaki yohgaki   34 2009-01-19 09:43 views
libraryの内容
$ ls -la library/
合計 4
drwxrwxr-x  3 yohgaki yohgaki   17 2009-01-19 09:43 .
drwxrwxr-x  5 yohgaki yohgaki   72 2009-01-19 09:43 ..
drwxrwxr-x 52 yohgaki yohgaki 4096 2009-01-19 09:43 Zend
publicの内容
$ ls -al public/
合計 8
drwxrwxr-x 2 yohgaki yohgaki  38 2009-01-19 09:43 .
drwxrwxr-x 5 yohgaki yohgaki  72 2009-01-19 09:43 ..
-rw-rw-r-- 1 yohgaki yohgaki 212 2009-01-19 09:43 .htaccess
-rw-rw-r-- 1 yohgaki yohgaki 247 2009-01-19 09:43 index.php

次にApacheのDocumentRootとTCPポート設定を変更します。

$ sudo vi /opt/PostgreSQL/EnterpriseDB-ApachePhp/apache/conf/httpd.conf

などとしてhttpd.confを開きます。

Listen 8080

Listen 80
ServerName localhost:8080

ServerName localhost:80
DocumentRoot "/opt/PostgreSQL/EnterpriseDB-ApachePhp/apache/www"

DocumentRoot "/www/default/public"
<Directory "/opt/PostgreSQL/EnterpriseDB-ApachePhp/apache/www">

<Directory "/www/default/public">

に書き換えます。

.htaccessによるmod_rewrite設定が必要なので

<Directory "/www/default/public">

設定の中にある

    AllowOverride None

    AllowOverride All

と書き換えます[7]⁠。

アプリケーションメニューの「PostgreSQL⁠⁠→⁠Enterprse DB ApachePHP⁠⁠→⁠Restart Apache」を実行して再起動します。

http://localhost/ にブラウザでアクセスして

Hello from the index view script.

と表示されればインストール完了です。

図8 インストールを完了したCentOSスクリーンショット
図8 インストールを完了したCentOSスクリーンショット

まとめ

前回今回と2回に渡って、Zend Frameworkを利用したアプリケーションを作るための環境を準備しました。Linux、Windows、Macでほぼ同じ環境が作れます。しかし、初めて環境を作る場合は手順にしたがって行っても、それなりの時間がかかります。簡単に開発環境が用意できるよう、設定済みのCentOSのvmwareイメージを公開しています。詳しくは、筆者のWiki

をご覧ください。VMware Playerをインストールすればどなたでも自由にご利用いただけます。ただし、開発環境用に調整しているので、安全な設定とはいえません。決してインターネットに公開しないようにしてください。

すべての質問にはお答えできませんが、不具合や質問などは筆者のブログなどでできる限りサポートします。質問内容は公開させていただく場合があります。あらかじめご了承ください。

おすすめ記事

記事・ニュース一覧