はじめに
Web開発では、効率よく開発するためにWebフレームワークの選定に悩みがちです。
今回はSeasar.PHPで開発が続けられているS2Base.PHP5とS2Dao.PHP5を使ったWeb2.0風なWebアプリケーションを作成する手順を導入から動作まで紹介します。今回紹介する方法ではS2Base.PHP5のごく一部の機能とS2Dao.PHP5の一部の機能しか使っていませんが、効率よく開発するためにフレームワークを探している人や、S2Base.PHP5を用いたWeb開発を考えている方への参考になれば幸いです。
対象読者
- PHP5を使ってWeb開発をしている方
- フレームワークの導入を検討する立場にいる方
- S2Base.PHP5を導入しようと思っている方
- S2Dao.PHP5を使ったことのある方
必要な環境
PHP5(必要なバージョンとしてはPHP5.1.6以上を対象とします)
S2Base.PHP5について
S2Base.PHP5はSeasar.PHP(S2Container.PHP5やS2Dao.PHP5)による開発を支援するためのコマンドラインツールです。コマンドライン上から各ファイル(クラスの雛型やテストクラス)の生成が行えます。また、S2Base.PHP5の機能は単にそれだけではなく、各種有名なWebフレームワークとSeasar.PHPの連携を可能にします。S2Base.PHP5が対応するWebフレームワークは以下の通りです。
S2Base.PHP5にはこの他にもS2JavelinTraceInterceptorというトレースロガーがあり、ログをビジュアルで見る事が可能です。ただし本稿では、S2JavelinTraceInterceptorの機能は使いません。Webフレームワークも特別なものを用意せずに、PHPユーザーに馴染の深いSmartyをベースとしたS2Base.PHP5によるフレームワーク(with Smarty)を利用することにします。
導入
今回導入するものは以下の4点です。
- Smarty
- S2Container.PHP5
- S2Dao.PHP5
- S2Base.PHP5
S2Base.PHP5のインストールは、S2Base.PHP5のセットアップページを参考にしています。また、S2Base.PHP5にはPhingとPHPUnit2が必要となりますが、既にこれはインストールしているものとします。この他に、ブラウザ上のフレームワークとして「prototype.js」を利用しています。
S2Container.PHP5の導入
今回使用するS2Base.PHP5とS2Dao.PHP5の動作にはこのS2Container.PHP5が必要になります。S2Container.PHP5に関する詳細な情報はS2Container.PHP5を用いたDIベースの開発を参照してください。
インストール
S2Container.PHP5のプロジェクトページにPEARパッケージの配布物がありますので、PEARを使って導入します。今回導入したバージョンはS2Container.PHP5-1.1.2です。
> pear install http://s2container.php5.seasar.org/download/S2Container-1.1.2.tgz downloading S2Container-1.1.2.tgz ... Starting to download S2Container-1.1.2.tgz (101,504 bytes) .......................done: 101,504 bytes install ok: channel://pear.php.net/S2Container-1.1.2
インストールができたかどうかの確認にはpear infoを使います。
> pear info S2Container
About pear.php.net/S2Container-1.1.2
====================================
Release Type PEAR-style PHP-based Package
Name S2Container
Channel pear.php.net
Summary S2Container.PHP5, a lightweight container
supports DI and AOP.
Description S2Container is a lightweight container which
supports DI(Dependency Injection) and
AOP(Aspect Oriented Programming). The goal of
S2Container.PHP5 project is to port Java
Seasar2 to PHP5.
:
: (省略)
:
S2Dao.PHP5の導入
S2Base.PHP5はS2Container.PHP5同様、S2Dao.PHP5を用いた開発をサポートしています。今回作成するアプリケーションでは、DBアクセスにこのS2Dao.PHP5を利用しています。
インストール
S2Dao.PHP5の導入もS2Container.PHP5と同様にPEARを使いインストールします。S2Dao.PHP5のプロジェクトページにPEARパッケージの配布物がありますので、PEARを使って導入します。今回導入したバージョンはS2Dao.PHP5-1.1.1です。
> pear install http://s2dao.php5.seasar.org/files/S2Dao-1.1.1.tgz downloading S2Dao-1.1.1.tgz ... Starting to download S2Dao-1.1.1.tgz (92,630 bytes) .....................done: 92,630 bytes install ok: channel://pear.php.net/S2Dao-1.1.1
インストールの確認は同じくpear infoを使います。
> pear info S2Dao
About pear.php.net/S2Dao-1.1.1
==============================
Release Type PEAR-style PHP-based Package
Name S2Dao
Channel pear.php.net
Summary S2Dao.PHP5, a Object Relational Mapping tool.
Description S2Dao is Object Relational Mapping tool: S2Dao
does not use XML; and does not require
DB-Driver knowledge. The goal of S2Dao.PHP5
project is to port Java S2Dao to PHP5(using
PDO).
:
: (省略)
:
S2Base.PHP5の導入
S2Base.PHP5は今回メインで使用するツールです。
インストール
S2Base.PHP5のプロジェクトページにPEARパッケージの配布物がありますので、PEARを使って導入します。今回導入したバージョンはS2Base.PHP5-1.0.0です。
> pear install http://s2base.php5.sandbox.seasar.org/download/S2Base-1.0.0.tgz downloading S2Base-1.0.0.tgz ... Starting to download S2Base-1.0.0.tgz (56,540 bytes) ..............done: 56,540 bytes Did not download optional dependencies: http://s2base.php5.sandbox.
seasar.org/download/S2Javelin-1.0.0, use --alldeps to download auto
matically __uri/S2Base can optionally use package "http://s2base.php5.sandbox
.seasar.org/download/S2Javelin-1.0.0" install ok: channel://__uri/S2Base-1.0.0
S2Javelin-1.0.0は今回は使用することはありませんので、インストールしません(別途インストールすることが可能です)。
S2Base.PHP5からS2Javelin(.PHP5)を利用できるようにするには、S2Base.PHP5プロジェクトページ内のS2JavelinTraceInterceptorを参照してください。
S2Base.PHP5がインストールできたかどうかを確認します。
> pear info __uri/S2Base
About __uri/S2Base-1.0.0
========================
Release Type PEAR-style PHP-based Package
Name S2Base
Channel __uri
Summary S2Base.PHP5 is a command line tool for
development using S2Container and S2Dao.
Description S2Base.PHP5 is a command line tool for
development using S2Container and S2Dao.
Includes generator of project directory, source
files and unit test.
:
: (省略)
:
この状態でs2baseコマンドが使えますので、使えるかどうか確認します。
> s2base --help [INFO ] Usage: % s2base <project directory> [smarty]
無事s2baseコマンドが利用できればS2Baseの導入は完了です。
Smartyの導入
SmartyのページからSmartyをダウンロードしておきます。今回は、S2Baseでプロジェクトを作成するまで使用しませんので、適当な場所へ保存しておいてください。利用するバージョンはSmarty-2.6.14です。
プロジェクトの作成
導入(Smartyはダウンロードまで)が無事終わりましたら、次にs2baseコマンドを使ってプロジェクトを作成します。今回作成するプロジェクト名は「codezine」とします。適当なディレクトリに移動し、以下のコマンドを入力します。
> s2base codezine smarty
[INFO ] s2base directory : /usr/share/php/S2Base
[INFO ] project directory : codezine
[INFO ] create : codezine/app
[INFO ] create : codezine/app/commands
[INFO ] create : codezine/app/commons
[INFO ] create : codezine/app/commons/dao
[INFO ] create : codezine/app/commons/dicon
[INFO ] create : codezine/app/commons/view
[INFO ] create : codezine/app/modules
[INFO ] create : codezine/app/skeleton
:
: (省略)
:
ここで、生成されたディレクトリの意味合いを整理しておきます。
codezine/
app/ アプリケーション本体格納ディレクトリ
config/ 設定ファイル保存ディレクトリ
lib/ ライブラリ関連ディレクトリ
public/ WEB公開ディレクトリ
test/ テスト用ディレクトリ
var/ ログ・キャッシュディレクトリ
vendor/ 外部フレームワーク、ライブラリ等との連携モジュール
build.xml s2baseで使用するphingファイル
S2Base.PHP5ではモジュール単位の開発をサポートしています。各モジュールは「app/modules」と「test/modules」以下に生成され、モジュール共通のファイルなどは「app/commons」以下に配置されます。通常は、「app/modules」以下のファイルを適切に作成していくことになります。
Smartyの配置
先ほどダウンロードしておいたSmartyを解凍し、「codezine」(プロジェクトディレクトリ)の「lib」に入れます。ここでは、生成されるディレクトリ名を「Smarty-2.6.14」から「Smarty」に変更しています。
> tar xzf Smarty-2.6.14.tar.gz > mv Smarty-2.6.14 codezine/lib/Smarty > ls codezine/lib/Smarty/ BUGS COPYING.lib ChangeLog FAQ INSTALL NEWS QUICK_START README RELEASE_NOTES TODO demo libs misc unit_test
結果次のようなディレクトリ構成になりました。
codezine/
app/
config/
lib/
Smarty/ 解凍したSmartyフォルダ
public/
test/
var/
vendor/
build.xml
次に「codezine」ディレクトリへ移動し、「build.xml」を編集します。「build.xml」はs2baseコマンドで作成したときにデフォルトで生成されるので、それを変更します。変更するのは、デフォルトで<project name="project" default="command" basedir=".">となっている部分のname="project"とdefault="command"をsmartyに変更するだけです。
<?xml version="1.0"?> <project name="smarty" default="smarty" basedir="."> <php expression="ini_set('include_path', 'lib'.PATH_SEPARATOR.ini_get('include_path'))" /> <php expression="require_once('S2Base/S2Base.phing.php')" /> : : (省略) : </project>
「build.xml」の編集が終わったら、次にphingコマンドを実行してみます。
> phing
Buildfile: /home/hata/workspace/codezine/build.xml
[php] Evaluating PHP expression: ini_set('include_path','lib'
.PATH_SEPARATOR.ini_get('include_path'))
[php] Evaluating PHP expression: require_once('S2Base/S2Base.
phing.php')
smarty > prepare:
[php] Evaluating PHP expression: require_once('config/environ
ment.inc.php')
[php] Evaluating PHP expression: require_once('S2Base/S2Base.
cmd.php')
smarty > smarty:
[phing] Calling Buildfile '/home/nowel/public_html/CodeZine/wor
ks/codezine/vendor/plugins/smarty/build.xml' with target 'command'
project > command:
[php] Evaluating PHP expression: require_once('vendor/plugins
/smarty/config/environment.inc.php')
[ Command list ]
0 : (exit)
1 : action
2 : command
3 : dao
4 : dicon
5 : entity
6 : goya
7 : interceptor
8 : module
9 : service
choice ? : 0
BUILD FINISHED
無事にコマンドが実行することができました。最後に、Smartyが使用するキャッシュフォルダを書き込み可能にする必要があるので、「codezine/var」ディレクトリ以下を書き込み可能な権限を与えます。
> chmod -R 777 codezine/var
ここまでで、プロジェクトを動かす準備は整いました。後はphingコマンドを利用して、アプリケーションを作成していきます。S2BaseとSmartyの導入が済んだら、次はアプリケーションの作成を行います。

ner-1.1.2.tgz
downloading S2Container-1.1.2.tgz ...
Starting to download S2Container-1.1.2.tgz (101,504 bytes)
.......................done: 101,504 bytes
install ok: channel://pear.php.net/S2Container-1.1.2