【戯れ言】symfonyはCakePHPよりは大規模向けです

例えば、フレームワーク比較で良く目にする違いとして「Symfonyは大規模向け、CakePHPは中小規模向け」というのがある。これはいったい何なのだろう? よく読むと、大抵は「Symfonyプラグイン機能があるため、大規模向け」という書き方がされている。これは本当にそうなのだろうか?

まず簡単なツッコミをさせていただくと、CakePHPは、既にプラグイン機能を装備している。Symfonyとほぼ同じように、一連機能を持った仕組みを簡単に入れたり抜いたり出来る。つまり、この定義でいけば、CakePHPは十分に大規模向けだ。

.. (略) ..

そしてプラグインは、私はむしろ逆の、中小規模向けのものと考える。何故なら、第三者の制作したものを、手っ取り早く自分のものに出来るというのが実質的なところであり、そういった用途のものは中小規模向けに書かれているものが多いからだ。

まず前提として、プラグインという機能はsymfonyでもCakePHPでも、大規模向けのためにある機能ではなく、再利用性を高めるための機能であり、規模は関係ないと思います。

もう1点。
symfonyプラグインはコマンドでアップグレードなど管理が行えたり、名前空間の衝突を気にしなくてよかったり、プラグインを拡張するためのフックポイントが用意されていたりと、より複雑なことができるので、単純に機能をプラグインとして切り出したというレベル以上のことができるように標準で考慮されています。

というわけで、プラグインという機能をもつこれら2つのフレームワーク使いこなせればより開発効率を上げることができるということだと思います。

そして、symfonyでもCakePHPでも大規模開発はできます。
ただし、symfonyのほうがCakePHPよりは標準で大規模開発を考慮しています。

ここでは、その理由の1つであるディレクトリ構造の違いで説明します。

それは「アプリケーション」「モジュール」という2段階構造を持つsymfonyに対してCakePHPは「コントローラー」というフラットな構造になっている点です。

CakePHPではフラットな構造なので管理画面だけ別にしたい場合などは、標準だとCAKE_ADMINを利用するのが一般的だと思います。ただし、ファイルの置き場所は他のコントローラーと同じですし、CAKE_ADMINを使うパターンしか考慮されていないとも言えます。*1

symfonyではアプリケーションで切り分けることができるのでもっと柔軟に対応できます。

他にも比較できるポイントはあると思いますが、ちゃんと違いがありますよってことで。

ただ、symfonyでもCakePHPでもやりたいことはできます。
「正しい方を選ばないとできない。失敗だ。」なんてことはありません。
どちらを選んでも、フレームワークが提供していないことをやろうとすると苦労する点は同じです。

このネタちゃんとまとめてどこかで発表するかな。。
[追記]
id:yandodさんが以前にCakePHPsymfonyの比較について発表したスライドがあるんでした。
どちらかのフレームワークを使った事があれば違いが分かると思いますのでオススメです。
http://puyo2.upper.jp/cake/files/20080627cakephpstudy_symfony.pdf

[さらに追記]
id:yandodさんからコメント頂きましたが、CakePHPでも設定を書けば、ディレクトリを分離させることができるそうです。*2
CakePHPでコントローラーを複数のディレクトリに整理する方法 - yandod's blog

*1:ちょっとしたアプリなら、これぐらい考慮されていれば十分でしょうけど

*2:名前の衝突など考慮しなくてはならない点もあるようですが