PHPというWEBで良く使われるプログラミング言語とそのフレームワーク(スクリプト全体の土台になる抽象化された機能を集約したもの)のお話です。
巷のサイト上にはPHPフレームワーク(Codeigniter、CakePHP、ZendFramework、Symfony、FuelPHP等)推奨の情報がたくさん出回ってますが、そんなに良いものならもっと広まってるはずでしょ。。
フレームワークが良いものかどうか、普及具合で結論でてるのに、「善し悪しを理解して上手く取り入れましょう!」みたいに推奨してるサイトの多いこと。。
ということで、普及が進まないのに、一部の人に人気のあるフレームワークのダメだしをしてみます。
①メリットを否定してみる
フレームワークのよくあるメリットを否定してみます。
フレームワーク使わなくても少し考えればできることを、フレームワークのメリットとして紹介していることの多いこと。。
(1)早く作れる(開発が効率化する)
そうなるには、1週間くらい、カチで使い方を勉強する必要があります。(言語の理解がある前提で)
折角覚えたと思ったら、細かいところに手を入れようとすると、調べるのにすごい時間がかかるし、意味も無く重たく動いたりすることがよくあります。
(フレームワーク様が用意してくれてる機能が今回の実装の合わないので、内部のソース弄っちゃいますねー仕様を実現しないといけないんで。。なんてことはよくあります。抽象化されすぎてたり弄ったら影響範囲読めない場合は独自に処理作っちゃいますよってなって、結局ごちゃごちゃに・・)
使用するフレームワークによって差はありますが、フレームワーク使わないで作るより軽くなることはないです。
実際は、フレームワークで簡単にできることだけ組合わせて重くても動けばいいって状態で完成できるなら早いかもしれないくらいです。
で、作ったはいいけど、保守はどうするの??そのフレームワーク理解してる人しかできません!!環境もフレームワークのバージョンにあわせて用意しないと!ってなります。。WEBだからPDCAまわしてかないといけないのに。。
「保守がしやすい」ってメリットうたってる場合もありますが、あくまで、"そのフレームワークを理解してる人が、最適な環境で”って前提がつきます。(使ってないと保守できない。。)そういうことは、どれかのフレームワークがPHP標準実装になって、世界中で使われる前提になってから言ってもらいたい。。
(2)バグが発生しにくい
中身がどうなってるか分からない用意された(どこかの優秀な人が作ってくれた)機能に値渡すだけなので、自分で書いてスペルミスしたり、穴のあるプログラムを書いたりすることが少なくなるということですが、そもそもプログラミングとは、自分で考えて自分で書いて、バグがあれば自分で直すものです。で、力がついてより良いプログラマになってゆくのです。教科書に書いてあることをなぞるだけではいつまでたっても自立できません。
フレームワーク内でひとたびバグが発覚すると、大変なことになります。自分では治せない(不可能ではないけどすごい大変)し、フレームワークをアップデートすると他の場所が動かなくなるし。。
「脆弱性が突かれにくい」というメリットを謳ってる場合もありますが、ハッカーからすれば、フレームワークの脆弱性見つけられれば、それを使ってるサービスまとめてハックできるので、モチベ高いです。
「用意されている機能が世界中でテストされている」というのも良く見かけますが、実際ガチでテストしてる人は少ないし、ボランティアだから、その機能を作った人がいつのまにかいなくなってる場合もあります。使ってる人数をテストしてる人数とは言えないでしょ。。
(3)コードの書き方を統一させることができる
そもそもそんなに人によって書き方違わないし、よほどごりごり書いた大きなシステムでない限り追えば分かります。追うのに時間がかかるといってもたかが知れてます。
フレームワーク使うと、フレームワークのルール通り書かないとはねられる(エラーになる)し、なんのエラーかもわかり難い状態でストレスになります。推進派はきっちりフレームワークを勉強してる前提なので気にしないみたい。Zend2とか終わってるくらい情報なくて解決大変なのに。。
普及しなかったり短命で終わるフレームワークの情報は海外のサイトに頼ることになります。
コードの書き方が統一されているということは、外れたことを書いてはいけないということでもあり、自分の実現したいことができなくなる場合まであります。
(縛りプレイ強要されます。仕様を設計する人はWEBのことは分かっていてもフレームワークの仕様まで知らない訳で・・)
良く似た主張に、「コードとテンプレートを分離できる」というのもありますが、そんなのはフレームワーク使わなくてもできるし。。
「コードがシンプルで見やすくなる」(フレームワークは自動でHTML要素やSQLを生成する機能がある)というもの同じです。作り方の問題であって、フレームワークかどうかは関係ない。。WEBの場合はHTMLのタグとか、SQL文とか、なんでも簡略化できれば良いというものでもない(改修の頻度が高い)し、長くてもちゃんと追える人は追える。エディタの使い方や追い方を覚えるべき。
②本当のデメリット
(1)学習コストがかかる以上の見返りがなく、保守する人に負担がかかる。
自分は選択したフレームワークが最善だと思ってるかもしれないが、皆は違うフレームワークや、使わないことが最善だと思ってたりします。
今後ずっと自分しか見ないコードなら良いですが、人が見るかもしれない、仕事のプログラミングなら、自分の考えを主張するばかりでなくて、周りをみるべきです。
自分で書いてバグばっかりになったらどうしよう↓とか、脆弱性突かれてたらどうしよう↓とか、経験してスキルアップすれば万事解決です。
フレームワークによっかかって、バグや脆弱性の本質をいつまでも理解しないつもりなら、WEBのプログラミングやってる意味ないです。
●おまけ
フレームワーク推奨してる方は、専門書籍を売りたいとか、邪な考えではなく、純粋にいいものだと思ってるから難しいです。自分はそのフレームワークと心中するつもりだから良いのかもしれませんが、そうやって各自が違うフレームワークに突っ走るから、動作が読めないスクリプトが氾濫するのです。。
Googleのエンジニアみたいに必要なライブラリは自信をもって自分でつくるようになると良いのですが。。
【2015/11/17追記】
コメントとたくさんのいいね!ありがとうございます。
PHP自体は割と誰でも少し勉強すれば書けるようになります。(CとかJavaとかと比較して)
そういう人が上達する過程では、フレームワークのようにブラックボックス化されて、(初心者にとって)流れも追いにくい物を使用するべきではなく、まずは自分で整理されたソースを書けるようになるべきです。
未熟なソースは誰かに指摘(レビュー)されて上達する糧になります。
「オレオレで好き勝手は保守できない(バグる)」は良く聞くフレーズですが、よほど独自のロジックで作り込んでいなければそんなことはないと思います。(クセとかはあるけど流れとして把握できないことは少ない)
「ユーザもナレッジも多い」も良く聞きますが、フレームワークによってすごい差があるし、すそ野の広いPHPプログラマ全体からすると、どれ使っても一部の人になってしまうと思います。(ちょっと乱立しすぎですね。。)
最後に、分かりやすいように順位付けだけしておきます。
オレオレと言われるかもしれないが、イケてるソース(シンプルで流れも分かる!)>> オレオレかもしれないし、ちょっとイケてないソース(頑張った感はある!) >>> ドキュメントあるから一応オレオレではないとされているフレームワーク達(どこまで乱立する気?) >>> ドキュメントが少ない(日本で)マイナーなフレームワーク達(Zend2とかCake3とか) >> オレオレフレームワーク極み(独自のロジックに没頭しまくり)
![]() CakePHPで学ぶ継続的インテグレーション【電子書籍】[ 渡辺 一宏 ] |
![]() Zend Framework, 2-Volume Set: The Official Programmer's Reference Guide [ 0. Zend ] |
![]() 基本からしっかり学ぶSymfony2入門 [ 後藤秀宣 ] |