PHPフレームワーク特集
「CakePHP」、「symfony」、「Zend Framework」の比較
この項では世界的に注目を集めている、あるいは世界的な使用実績をもつフレームワーク、CakePHP、symfony、Zend Frameworkを比較していきたいと思います。
MVCモデル
3つのフレームワークは、共にMVCモデルに基づくフレームワークであるという点で共通しています。MVCとはモデル(Model)、ビュー(View)、コントローラ(Controller)の頭文字を取ったもので、プログラムをこれらの3つのカテゴリーにコードを分割して記述します。
- ◆ モデル(Model)
- データを管理するためのコードを記述します。DBなどに対してデータの保存・読込処理を実行します。
- ◆ ビュー(View)
- 画面表示を担当します。Webページの場合は、HTMLテンプレートに変数の埋込処理を行い、ブラウザに出力します。
- ◆ コントローラ(Controller)
- 必要な処理の実行・画面遷移を担当します。入力された内容を基に、モデルへのデータのやりとりなど必要な処理をした後で、ビューにその結果の表示を依頼します。
このモデルを採用することで作業の分担が容易になり、Webアプリケーションの開発の効率化に繋がります。例えば、データベース周りの開発を担当する人(モデル)、デザインを担当する人(ビュー)といったように作業を分担することができます。また他にも新コンテンツの追加など、これまでの手法では全てに影響を与えてしまう変更にも、それぞれが切り離されていることで、変更作業がスムーズに進むようになります。これはオブジェクト指向に沿った開発であり、フレームワークを有効に活用するにはオブジェクト指向的な考え方は不可欠となります。
自動生成機能
3つのフレームワークの大きな違いを上げると、CakePHPとsymfonyには自動的にCRUD機能を持つページやスケルトンとなるページを作成する機能が備わっているのに対して、Zend Frameworkには備わっていません。たとえば、ゼロベースで大規模な開発を行う場合、symfony、CakePHPなどに比べると、Zend Frameworkはやや開発工数が増えることが予測されます。
しかし一方で、Zend Frameworkは多くの有益なクラスを提供しており、コンポーネント群として使用するのに便利なツールといえます。すでに大きな仕組ができているシステムに対して、追加機能用のライブラリとして使用するのにも便利です。symfonyのアプリケーション上に、Zend Frameworkから供給されるクラスを組み込むといったことも可能です。
またZend Frameworkの設計上の特性としてコンポーネント同士の結びつきが比較的に緩やかで、独立性が強いといった特徴も、コンポーネントとして使用する可能性を広げています。
これらの特徴を以下にまとめると図1のようになります。

図1. 自動生成機能についての比較
Webアプリケーション規模の適正
symfonyとCakePHPとを比較すると、symfonyの特徴としてプラグインシステムが優れており、Zend Frameworkをはじめとして、他のフレームワークのコンポーネント、ブラウザ(Ajax)などをより簡単に使用することができます。また機能変更への対応にも優れているため、他のフレームワークよりもスムーズに機能拡張することができると予想されます。このような特徴からsymfonyは大規模なWebアプリケーションに向いているといわれています。
CakePHPはsymfonyに比べるとシンプルで、ちょっとしたプログラムにも効率的に対応できる点などが支持されていますが、そのような特徴から比較的小・中規模のシステムに向いているといわれています。Zend Frameworkもコンポーネント群としてまとめられていることから小・中規模システムの方が向いていますが、CakePHPよりも構成要素が固まっていない分、自由度が高く、使い方次第ではより大きな規模のアプリケーションにも対応ができます。
これらの特徴を以下にまとめると図2のようになります。

図2. システムの規模に応じた比較
スピード
symfonyの拡張性について先述しましたが、これは同時に内部に多くの要素を溜め込むことを表しています。symfony自体が大きな構造となり、このためCakePHPに比べると「ややスピードが遅くなる」という特徴があります。
スピードという観点で比べると、CakePHP、symfony、Zend Frameworkの中ではZend Frameworkが最も良いパフォーマンスが出るでしょう。それはZend Frameworkは最も小さなフレームワークで、内部での処理が簡単になっているためです。
これらの特徴を以下にまとめると図3のようになります。

図3. 実行速度に応じた比較
フレームワークの選択はあくまで開発規模、アプリケーションで重視する要素によって変わってくるといえるでしょう。たとえば、大きなアプリケーションを作成するのであればsymfonyが有効的ですし、小さなアプリケーションを短期で効率的に開発する目的であればCakePHPが良いかもしれません。
その他の比較
CakePHP、symfony、Zend Framework について、フレームワークの機能比較を以下にまとめます。
| CakePHP | symfony | Zend Framework | |
|---|---|---|---|
| PHPバージョン | PHP4、PHP5 | PHP5 | PHP5 |
| MVC | ○ | ○ | ○ |
| データベース | ○ | ○ | ○ |
| ORM(O/R) | ○ | ○ | - |
| 自動生成 | ○ | ○ | - |
| キャッシュ | ○ | ○ | ○ |
| バリデーション | ○ | ○ | ○ |
| Ajax | ○ | ○ | - |
| 認証モジュール | ○ | ○ | - |
| プラグイン | - | ○ | ○ |
※ 評価は、2007年11月現在におけるものです。
※ 各比較項目の説明
- PHPバージョン:
- 対応しているPHPのバージョン。
- MVC:
- MVCモデルに基づくフレームワークか。
- データベース:
- 複数のデータベースを容易に変更できるか。
- ORM(O/R):
- O/Rマッピング機能を備えているか。
- 自動生成:
- ソースコードの自動生成機能を持つか。
- キャッシュ:
- キャッシュ機能があるか。
- バリデーション:
- ユーザー認証を取り扱うためのモジュールがあるか。
- Ajax:
- Ajaxのサポートがあるか。
- 認証モジュール:
- ユーザ認証の機能があるか。
- プラグイン:
- プラグイン設定が簡単か、充実しているか。
| 目次 | |
|---|---|
| フレームワーク全般について | |
| PHPフレームワークとは? | |
| PHPフレームワークの歴史 | |
| PHPフレームワークの比較 | |
| 個々のフレームワークについて | |
| CakePHPとは? | |
| symfonyとは? | |
| Zend Frameworkとは? | |





