Laravel概要

2016.3.9 (水)

Rubyが流行るのはon Railsがあるからです。phpにはLaravelがありSymfonyがありCakePHPがあります。どれもこれも捨てがたいのですが、私はLaravel5が好きです。どうしてかというと、

  • そんなに大規模な開発はしない
  • そんなに大それたプログラマーではない
  • そんなに多くを学びたくない

という理由からです。もしこれに該当する方がいればLaravelがいちばん楽しいです。
Laravel5を理解するために他のフレームワークと比較してみます。Symfonyは言わずと知れた立派なフレームワークであまりにも立派すぎます。大企業が大企業的なポータルサイトや会員サイトを作るのに向いています。というのはMVCがものすごくしっかりしていて、秩序だてられていて非常に厳格な規約によって支えられているからです。バンドルというプラグインのような単位があって機能ごとに分割して開発ができます。プログラム自体は非常に重く濃厚ですがキャッシュの機能が優れているのでクライアントサイドからみたら爆速PHPということになります。コマンドもすぐれています。コントローラーの作成からマイグレーション、また最も素晴らしいのはDoctrinというデータベース操作のためのモジュールがあり複雑なDB操作をとても簡単にしてくれています。DBテーブルを作成するとコマンド一発でエンティティを作成できる上に逆にエンティティからDBテーブルも作成できます。特にSQL文に馬鹿みたいに詳しくなくてもPHPの操作でDBを扱うことができます。かなりいいです。テンプレートはTwigというかなり若々しいものを使っています。
デバック機能がすごくてですね、実際にうごいているパラメーターやベンチマークを即座に確認できるのもいいです。
CakePHPは伝統的です。むしろ伝統芸能に近い。ctpという謎のテンプレートファイルを使っていたりコードの書き方がかなり野暮ったいのですが、使い慣れている人にとっては親しみのある見てくれです。CakePHP5になってからSymfonyライクになってきたし、フレームワークの機能としては申し分ないです。ルーティングを端折ったりと慣れてくると様々な便利機能が見えてきます。がModelの部分が非常につかいづらい印象。エンティティークラスとテーブルクラスに分かれていたりjoinの設定方法が特殊だったり。しかしデバックがわりとやりやすいです。慣れてくると味のある感じです。
で、Laravel5はというと、実に軽快です。CakeのいいところとSymfonyのいいところを混ぜた感じです。
まずコードが見やすい。変な大カッコや奇妙な入れ子が非常に少ないです。ディレクトリの構造がややわかりにくい感はありますがこれも慣れてくればだいたい同じような場所しか触らなくなります。またDocumentRootに普通のhtmlやphpを置くとそのパスが自動的に優先されるのでフレームワークに詳しくない人とも一緒に仕事ができたりします。

とはいっても。

私がもっと若い頃にはCakePHPとZendFrameworkぐらいしかなかったのですが、PHP自体がかなり新しい言語でした。Cやperl、アセンブラやコボルといったことを一通りやってきた世代にとってはPHPはWEBのテンプレートエンジンみたいなものだと思っていたものですが、今となっては立派なプログラミング言語に昇格してきた感じです。
先日AnguraJSとCakePHP3でとあるサイトをつくりました。結果としてCakePHP3(PHP)は、WEBサーバーでもってDBから何らかの値を返すというだけの完全なBackendとしての機能に終始し、フロント側の処理はすべてAnguraJSが出し分けるという設計思想になりました。つまりAjaxの接続先でしかなく、CakePHP=エンティティといっても過言ではないというふうでした。つまりは、CakePHPがもっているテンプレートエンジン(的なもの)は殆ど利用しないという開発方法になったわけです。
フロントエンドの働きはここ最近目を見張るものがあります。MEAN環境といってかつてのLAMPに対抗するような新しいWEBの方法論もあります。はたしてPHPのフレームワークがどんな機会に生き残ることができるのかというのはちょっと難しい問題かもしれないのです。にもかかわらずLaravelをこれから利用するという理由がいくつかあります。
まず、Laravelはシンプルで書きやすいなどといわれていますが、それは大きな間違いです。シンプルなのは、ライブラリーがそれほど揃っていなかった時代に生きた人々が毎度毎度書かなくてはならないすでに飽きてしまった退屈なコード(セキュリティーに関するもの、バリデーションに関するものなどなど)が、Laravelの中ではブラックボックスとして内包され、それほど執拗に書く必要がなくなっただけです。仮に内部のそのようなブラックボックスを何も知らないでLaravelを学ぶのであれば、それは比較的不毛なことであり、かなり危険なことになるはずです。Laravel5は熟知した人間には幸せをもたらしはするかもしれませんが、何もしらないPHPの初心者が簡単にできる!というシロモノではないということです。