PHP フレームワーク比較

#PHPのフレームワーク

PHPのフレームワークといっても様々な物が色々なフレームワークがある。
・CakePHP
・Symfony
・Zendframework
・Laravel
・CodeIgniter
いったものがあるが今回は有名な物の中からCakePHP、Symfonyといった二つについて比較した。

#CakePHPの特徴
[CakePHP公式サイト](https://cakephp.org/jp/)
[PHP開発者が誰でも素早く快適に開発を行えること]を目標として生み出されたプロトタイピング型のフレームワーク

bakeコマンドを使用し、プログラムを自動生成する機能があります。
また、MVC(Model/View/Controller)モデルを使用し、機能ごとに分けているため、どこで、どういった処理をしているかが視覚的にわかるため、非常に使いやすくなっている。

###M:Model(モデル)
主にデータベースに接続するための処理を書く部分（外部連携機能）。

###V:View(ビュー)
画面の表示(htmlなど)の処理を書く部分。

###C:Controller(コントローラー)
全体をまとめる役割をしている。
コントローラーを中心にモデル、ビューを繋げているものでMVCモデルの中核といったところだ。
![１１１１.png](https://qiita-image-store.s3.amazonaws.com/0/206600/c6e36cbd-61e9-c5cd-7c80-076aed52e87d.png)

①一番最初にContorollerを呼び出しアプリを起動し処理を進める。
②データベースなどを使用する際はModelに処理を投げる
③データベースの処理が完了後その値をContorollerに返す
④Modelから値が返ってきたらその値をViewに投げる
⑤Controllerから投げられた値をViewで表示する
⑥Viewでformなどを利用し、formからデータベースに保存する、削除の際は一度Controllerに値を投げる。その後②～④の流れをもう一度繰り替えす。

こういった流れの処理をbakeコマンドを使い自動でテンプレートを生成してくれるのだ。

#Symfonyの特徴
大規模開発での実績があり、実際にYahoo!がSymfonyを利用した開発を積極的に進めることからも、高い安定性があり、セキュリティが強いと思われる。また開発効率が高いため、セキュリティの設定も最小限にすむなどと世界的にも注目を浴びているフレームワークだ。
また、先ほど説明したMVCモデルを使用していることから、開発効率が高いことが伺える。

#２つを評価・比較
今回は４つの評価点から２つのフレームワークを評価・比較しようと考えた。
・性能
・可用性
・簡易性
・セキュリティ
の４つの観点から評価していこうと考える。

##Cakephp
###性能
bakeコマンドを使用すればテンプレートが自動生成されるため、とても使いやすい。
ただし、初期設定ではエラーを吐いてしまうため、環境設定をしなければいけないのが少しめんどくさい。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/206600/82d0a617-5427-0dc9-e1c4-51d62a79c1bf.png)
エラー通りに解消していけばいいが、データベースを使用せずに触る人であれば、そこで必要のないデータベースの設定をしなければいけないため、余計な手間が増えてしまうと感じた。大体はデータベースを使用したWebアプリケーションを作成するため、ここでデータベースの設定するため、多くの人には良いのではないかと感じる。
###使いやすさ
コードを書く際にMVCモデルを使用するため、どこになにを書けばいいかとてもわかりやすいし、エラーの際にどこが悪いのかが一目で判断できる。
また、日本でもとても大多くの人に使われているため、日本語のサイトや、最新の記事がとても多い。教師の方や他の人にわからないところがあってもCakephpを知っている人が多いため、助言を聞くことが出来るため、PHPのフレームワークを学ぶということで一番適しているのではないか。
###簡易性
Xampp(MacはMampp)といったものを使えばコマンドを打たずにアパッチやMySQLのサーバを立て簡単にWebで作成したアプリケーションのレイアウトが表示できるため、自分の進捗や実際にコードを書いた時の処理がすぐにわかる。
コードの内容も
###セキュリティ
OWASP ZAPで動的スキャンを行ったところ、CakePHPではリスクレベルhighで、SQLインジェクションの脆弱性が検出された。対策としてエスケープ処理が挙げられるが、CakePHPは、findやreadなどの組み込み関数は自動的に処理を行ってくれる。しかし、自分でSQL文を組み立てる場合は開発者自身でエスケープ処理を施す必要がある。そのため、セキュリティを意識して開発を行うならば組み込み関数を使用することを本ブログでは推奨する。
#Symfony

###性能
アプリケーション作成時にそのままサーバを立ててWebで表示することによってWelcomeページが表示でき、手軽に作成できる。
また、Viewを書く際に、ブロック構造を扱うのだが、ブロック構造を知っている人からすれば書き方がすぐにわかるが、ブロック構造を使わずhtmlを書いていた人からすると実際にこのブロック構造は必要なのか？そのままhrmlのように書いても表示できるし、いらないんじゃね？と感じた。
アプリケーションを作成した際に、下にバーが表示される
![image.png](https://qiita-image-store.s3.amazonaws.com/0/206600/203dc69e-13d6-89e7-d13c-9f5f1958ad77.png)
そこで、現在の通信速度、エラー、フォームからのGET、POSTされたデータ、その他セキュリティなど様々な詳細が知れるため、デバックする際や作成したアプリケーションの状態がGUIで知れるためとてもわかりやすい。
###使いやすさ
Cakephpと同じMVCモデルを使用しているため、コードの修正がしやすい。
日本語のサイトが乏しい。調べていく際に英語の記事がかなり多く、そこから読み取るのにとても苦労した。htmlでは簡単に作成できたボタン一つでさえどこにどうやって作成すればいいかわからない状態にも陥った。ブロック構造であったり、バージョンの違いによる資料の違いからこのバージョンではどれを使うといったことが発生し、記事も新しいものがあまりないため、現状少し使いづらさを感じた。
###簡易性
性能面で話した通り、デバッグの際にecho文であったり、logに表示させることなくデータがしっかりと送られているか、また送られていないのかを確認できるため、非常に楽だった。
今回はデータベースをPDOでMySqlサーバを使用したのだが、symfony独自のデータベースが存在するため、外部のデータベースに接続せずにsymfonyのなかで完結させることが出来ると感じ、外部のサーバの設定や環境構築をすることがなくなり、より簡単にできるのではないかと感じた。
###セキュリティ
CakePHPと同様にOWASP ZAPで動的スキャンを行った。Symfonyはリスクレベルhighの、脆弱性は検出されなかった。Symfonyは、setting.ymlファイルのescaping_strategyを有効にしescaping_methodを指定すると自動でエスケープ処理を行ってくれる。そのため、クロスサイトスクリプティングやSQLインジェクションといった攻撃に対して強いと言える。設定さえ行えば、自動でエスケープ処理を行ってくれるため、セキュリティ面ではSymfonyの方がCakePHPより優れていると言える。

#総合比較
このような評価点からみて、
一番最初に取り組み勉強をしていく、簡易的なWebアプリケーションを作成するのであればCakephpを押す。
多少phpの知識がつき、開発効率からプロジェクトとして複数人で開発を行う際はSymfonyの方がCakePHPより開発がはかどるのではないかと感じた。

ちなみにPHPを少しかじった程度で、英語の能力も乏しい私からすると、複数人での効率は落ちるが、MVCモデルで複数人での開発も難しくはなく、テンプレートを自動生成してくれるため、データベースに追加、CakePHPをおすすめする。