ZendFrameworkで作る『イマドキ』のWebアプリケーション
第0回 PHPのWeb開発フレームワーク
PHPは構文も容易で,開発者が言語を習得するのは非常に簡単です。また,性能もよいためWebアプリケーション構築に幅広く利用されています。
PHPが開発され始めた頃は,WebアプリケーションといえばCGIインターフェースを利用し,既存の汎用言語でプログラミングするのが一般的でした。PHPは,URIやPOSTリクエストのデコードや,HTTPセッション管理を標準機能として持っています。埋め込み型言語であるので,PHP自体がテンプレートとも言えます。PHPは汎用プログラミング言語としても利用できますが,簡易版のWeb開発フレームワーク(以下フレームワーク)と言えます。
筆者はこれがPHPが非常に人気の高い言語になった理由の一つだと考えています。しかし,PHP本体のフレームワーク的な機能は現在のフレームワークとしては不十分です。このため,PHP用のフレームワークが多数開発されています。
本連載は,ZendFramekworkを用いたRESTfulで本格的なAJAX Webアプリケーションの構築を習得することが目的です。ZendFramework自体を解説する前に,PHPで利用可能な主なフレームワークを紹介します。
PHP用のフレームワーク
日本で比較的人気があるフレームワークには,Ethna,Maple,Piece Framework,Agavi(Mojavi),CakePHP,CodeIgniter,Symfony,Zend Frameworkがあります。これらのフレームワークの現状を簡単にまとめたものが表1です。順序に意図はありません。国産フレームワークとそれ以外に分け,アルファベット順に記載しました。ZendFrameworkを除き,安定版バージョンは2008/9/4時点(※1)でのバージョンです。PHP4もサポートしているフレームワークは比較的古くから開発されているフレームワークです。ZendFrameworkは,これらのフレームワークの中でも最も新しく開発されたフレームワークの一つと言えます。
表1 主なフレームワークの状態
| Ethna | 国産フレームワーク。2.5.0はUTF-8に対応し,文字エンコーディングへの依存を解消。 |
|---|---|
| - 仕様 | PHP4/5対応 |
| - ライセンス | BSDライセンス |
| - URL | http://ethna.jp/ |
| - 最新安定版 | 2.3.5(2008/05/08) 約0.5MB |
| - 最新版 | 2.5.0 preview1(beta) (2008/07/05) |
| Maple | 国産フレームワーク。PHP4にも対応したバージョンの開発は停止している。作者に確認した所,PHP5対応のMapleの開発をドキュメント関係から着手している状況。 |
| - 仕様 | PHP4/5対応 |
| - ライセンス | PHPライセンス |
| - URL | http://kunit.jp/maple/ |
| - 最新安定版 | 3.2.0(2006/12/17) 約0.8MB |
| Piece Framework | 国産フレームワーク。ページ状態を維持する事が特徴のフレームワーク。Eclipseにも対応。 |
| - 仕様 | PHP4/5対応 |
| - ライセンス | BSDライセンス |
| - URL | http://piece-framework.com/ |
| - 最新安定版 | 1.5.0(2008/09/04) 約0.4MB |
| Agavi | Mojaviの後継とされるフレームワーク。2008/08/31にAgavi 2.0.0 beta 2がリリース。 |
| - 仕様 | PHP5対応 |
| - ライセンス | LGPLライセンス |
| - URL | http://www.agavi.org/ |
| - 最新安定版 | 0.11.2(2008/08/31) 約11MB |
| - 最新版 | 1.0.0 beta2(2008/08/31) |
| CakePHP | Railsの影響が強く見られるフレームワーク。設定よりも規約を優先し記述するコード量を削減。 |
| - 仕様 | PHP4/5対応 |
| - ライセンス | MITライセンス |
| - URL | http://cakephp.org/ |
| - 最新安定版 | 1.1.19.6305(2008/01/01) 約1.3MB |
| - 最新版 | 1.2.0.7296 RC2(2008/07/27) |
| CodeIgniter | 軽量なフレームワークで初期状態からほとんど設定無しでアプリケーションの構築が可能。 |
| - 仕様 | PHP4/5対応 |
| - ライセンス | Apache/BSDスタイル |
| - URL | http://codeigniter.com/ http://codeigniter.jp/(日本CodeIgniterユーザ会) |
| - 最新安定版 | 1.6.3(2008/07/26)約1.6MB |
| Symfony | Mojavi3から派生。ほかのプロジェクトの成果を積極的に取り入れているフレーワーク。ほかのプロジェクトのライブラリ等を広く利用している。 |
| - 仕様 | PHP5対応 |
| - ライセンス | MITライセンス |
| - URL | http://www.symfony-project.org/ |
| - 最新安定版 | 1.1.1(2008/06/26) 約12MB |
| ZendFramework | アプリケーションのディレクトリに特定の構造を想定していない,各モジュールの独立性が高く単体でも利用可能というライブラリ的な要素が強いフレームワーク。 |
| - 仕様 | PHP5対応 |
| - ライセンス | PHPライセンス |
| - URL | http://framework.zend.com/ |
| - 最新安定版 | 1.7.0(2008/11/18) 約19MB |
- ※1
本記事は,Software Design 2008年11月号「特別企画:PHP最新動向2008」をもとに,本連載用に再構成したものです。
ライセンスは本体のライセンスのみ記載しています。バンドルされたライブラリを持つフレームワークには複数のライセンスが摘要される場合があります。必ず読者自身でライセンスを確認してください。
リリース時期からも分かるように,各フレームワークの開発は精力的に行われていることが分かります。例外はMapleですが,Mapleの作者(kunit氏)によると,PHP5に対応したフレームワーク開発の準備を行っているとのことでした。国産3大フレームワークのEthna,Maple,Piece Frameworkも健在です。
これらすべてのフレームワークは,MVCパターン,ORMまたはDBオブジェクト,バリデーション等,フレークワークに欠かせない機能が実装されています。Zend FrameworkにもMVCパターンを実装するためのフレームワークが用意されています。
これらのフレームワーク以外にも沢山のPHP用フレームワークが開発されています。紹介しきれなかったフレームワークの名前とURLです。これらのフレームワークも比較的人気が高いフレームワークです。これらのフレームワークは2008年にリリースを行っており,メンテナンスされていると考えてよいでしょう。
表2 その他のフレームワーク
| 名前 | PHP | URL |
|---|---|---|
| Akelos | PHP4/PHP5 | http://www.akelos.org/ |
| eZ Components | PHP5 | http://ez.no/jp/ezcomponents |
| Fusebox | PHP4/PHP5 | http://www.fusebox.org/ |
| PHPDevShell | PHP5 | http://www.phpdevshell.org/ |
| PhpOpenbiz | PHP5 | http://www.phpopenbiz.org/jim/ |
| Prado | PHP5 | http://www.pradosoft.com/ |
| ProjectZero | PHP5 | http://www.projectzero.org/ |
| QPHP | PHP4/PHP5 | http://qphp.net/ |
| Seagull | PHP4/PHP5 | http://seagullproject.org/ |
これだけ沢山のフレームワークがあると,どのフレームワークを選べばよいのか分からなくなります。ビジネスで利用するフレームワークを選択する場合,そのフレームワークのメンテナンスが十分長く継続されることを期待できるかは非常に重要なポイントになります。
ZendFrameworkは,PHP言語コアのZendエンジンを開発したZend社が開発しています。Zend社はIBM,Microsoftとも提携しています。IBMが独自に開発しているsMash(ProjectZero)にもZendFrameworkを利用できます。ZendFrameworkはIBMが開発をサポートしているDojo AJAXフレームワークをサポートしています。ZendFrameworkは比較的長期のメンテナンスが期待できるオープンソースプロジェクトです。


