PHPでWebサイト作るときにフレームワークは本当に必要か?

PHP

PHPでWebサービスを作るとき、今やフレームワークは当たり前のように使われています

PHPのフレームワークっていうのは、FuelPHP、Laravel、CakePHPなどですね

企業のエンジニアの求人を見ていても、採用条件として「CakePHPの経験が3年以上」などとよく書かれています

でもこれらのフレームワークって本当に必要なんでしょうか?

フレームワークがないとWebサービスって作れないんでしょうか?

結論

  • 個人が自分のWebサービス作る程度ならフレームワーク使わなくても全然OK
  • むしろ初心者はフレームワークなんて使わない方がメリットは多い
  • ただし、会社なんかで複数人で開発するならフレームワークはほぼ必須

正直に告白すると、僕は今までピュアPHP(フレームワークなし)派の人間でした

今でも僕が運営してるサービスの多くはピュアPHPで作られたものです

ただ、会社の開発でフレームワークに触るようになってからは少し考え方が変わりました

フレームワークって使えるようになると便利なことが多いからです

ピュアPHPのメリット・デメリット

メリット

フレームワークを使わないピュアPHPだと、ライブラリなどを除いたほとんどのコーディングを自力でやらないといけないので、PHPでWebサービスを作るのに基本的なことを学習するのにはいいのかなと思います

というか僕は、PHP初心者はいきなりフレームワークに行くんじゃなくて、まずはピュアPHPでウェブサービスを作ってみたほうが良いとすら思ってます

フレームワークはブラックボックス的な要素が多いので、全体を把握するのが難しい反面、ピュアPHPは全て自分で作るので全体を把握できます

また何か問題が起きたときにも対処は比較的楽です

デメリット

ほぼ全てのコーディングを自分でやる必要があるので、大変なのはもちろんですが、ログイン認証周りやセキュリティに関する実装関連はどうしてもザルになりがちです

要するにセキュリティの甘いWebサービスになりがちなんですが、個人が作るWebサービスであればそこまで気にする必要はないかと思います(個人情報を扱う、莫大なアクセスがある場合を除いて)

また完全なピュアPHPだとMVCが独立してないので、複数人でファイルを修正するのに向いてません

それとルーティングが使えないので、ファイル名の変更が発生するとURLが変わってしまいます

ルーティングとは?

ルーティングっていうのは、URLとファイルを結びつける機能のことです

Webブラウザで、
「http://hoge.com/post
にアクセスしたら、post.phpというファイルを呼び出すよ!

ということを実現するための機能です

(個人的に今まで運用の途中でファイル名の変更が発生したことってないんですが、ルーティングって結構便利な機能なので、慣れてしまうとこれが使えないのはやや不便を感じるかもしれません)

DBマイグレーションが使えないことは、企業での開発なら不便な点かもしれませんが、個人開発においてはそこまで気にする必要はないと思います

DBマイグレーションとは?

DBマイグレーションっていうのは、データベースの変更履歴をGitなどに残しておくための機能です

基本的にDBは変更されても履歴が残りません
例えば、Postというテーブルがあって、これをPostUserテーブルへと名前の変更をした場合でもDBには結果しか残りません

そこでマイグレーション機能を使い、このPostPostUserというテーブル名の変更をファイルにしてGitなどのバージョン管理ツールに残しておきます

こうすることで後から開発に参加した人でも、この変更履歴を知ることができるわけです

フレームワークのメリット・デメリット

メリット

フレームワークによって規約が決まっているので、複数人で開発するときでもルール作りをしなくて済みます

ここでいう規約というのは、

「画像ファイルはここに置きましょう」

「○○.phpにアクセスしたときに表示されるファイルはここに置きましょう」

「DBを使うときはこうしましょう」

などの開発ルールのことです

また強力なセキュリティを持ったログイン認証周りの実装が簡単にできてしまいます

今やたいていのWebサービスにはログイン認証が付いてますので、この機能が簡単かつ強力に実装できることは実装コストを減らす意味でも重要です

デメリット

フレームワークを使うデメリットとして大きいのは、そのフレームワークを学ぶための学習コストでしょう

フレームワークって、どれか一つを理解できれば他のフレームワークも同じような概念で作られているのでたいていはつぶしが効きます

でもPHPを始めたての初心者がいきなりフレームワークでWebサイトを作り始めるとほぼ必ず挫折することになります

今のフレームワークはそれ自体が言語とも言えるくらいのボリュームになってしまっていて、PHPを学ぶよりはるか多くのことを勉強しなきゃいけないからです

またコマンド一つで多くの機能が実装可能ですが、それは裏を返せば自分が把握できていないブラックボックスを多く含むことにもなります

だから僕はPHP初心者や個人がWebサービスを作るのにはあまりフレームワークをお勧めしません

あと、これは個人的な意見かもしれませんが、各ファイルがいろんなディレクトリに分散しているので、目的のファイルにたどり着くのにピュアPHPと比べると時間がかかります

「えーっと、あのファイルどこにあったっけなー?」

みたいなことはフレームワークを使ってると日常茶飯事です

もちろんIDE(総合開発環境)を使うと、ある程度こういった不便を補助してくれる機能があるので、こういうのをフル活用することである程度の時間は短縮できます

またフレームワークは定期的にバージョンアップしますが、ほとんどのフレームワークはコマンド一つで簡単にバージョンアップできるようなものではないので、バージョンを上げるのにはかなり苦労します

(企業のWebサービスではいろんな事情でバージョンアップができないことがあり、いまだに古いバージョンのフレームワークを使い続けてる、なんてことも珍しくありません)