「モダンなPHP Framework」と「PHPdisって申し訳ございませんでした」
個人的に今後のPHPのフレームワークにおいては、下記がキーポイントになってくるのではないかなと思っています。
DB Scheme、ライブラリ管理、テストツール、優れたテンプレートエンジン、優れたORマッパー(Hashじゃなくてオブジェクト返してね!)、高い可読性、実行速度、低学習コスト
今、モダンな開発スタイルに対応しているフレームワークをいくつか(LARAVEL, Phalcon, FuelPHP, CakePHP3x)ピックアップしてみました。
2014年2月PHPフレームワークのトレンドを参考にさせて頂きました。
LARAVEL
あまりにも有名過ぎるとは思いますが、やはりいいなと思うのでご紹介。
PHPらしい文法。built-in serverがPHP5.4以降なら使えるので、Apacheなどを設定しなくてもすぐに開発を始められる。チームメンバーが似た環境で開発しやすい。SQLiteもいけるのでMySQLの設定とかも不要。手軽です。
Routesファイルとcontroller/methodのマッピングも分かりやすいですね。
app/routes.php
Route::get('users', 'UserController@getIndex');
Viewのテンプレートエンジンは「bladeテンプレート」です。なんとなく個人的にはTwigの方が好きです。bladeは素のPHPに近すぎて重複コードな印象を受けます。ちなみにLARAVELでもTwigは使えます。
https://github.com/rcrowe/TwigBridge
DB migrationやcomposerももちろん標準装備です。ORマッパーもEloquentモデルを継承して使うタイプで直感的で使いやすいと思います。
かなりのStarsがGitHub上でついている点など、これからPHPで開発を始める場合のデファクトになりそうな(なっている?)フレームワークかと思います。
Phalcon
高速な実行が謳い文句です。学習コストが低いことでも人気・定評のある軽量フレームワーク、Codeigniterよりも高速です。DB Migrationなど必要な機能も一通り揃っていて、なおかつ、実行速度が早い。もちろん、PHP Built-in Serverも使えます。
少々古い記事ですが、
16の言語と57のフレームワークを比較したベンチマークが凄い
スクリプト言語としてはかなり高速なフレームワークであることがベンチマークされています。(余談ですが、生PHP早いですね。そしてSinatra遅い…)
これからに期待
CakePHPは3系に期待しています。ロードマップ的にまだまだ遠いですが。
低学習コスト系としては、FuelPHPなどが定番ですが、良いですよね。低学習コスト系スクリプト言語は大人数で開発するのにはあまり向いていないとは思うのですが、ある程度サービスの開発規模が小さいことが見えているのであれば、重量なフレームワークを使う理由はあまりないですよね。
ただ要注意なのが、低学習コスト系フレームワークは「おれおれコード」みたいなのになってしまいがちなんじゃないかなと。Codeigniterで書かれたプロジェクトで、1controller(index.php)に全ての分岐処理がif文で書いてあってびっくりしたことがあります。あとSQLが直書きされてたり。(ORマッパーどこへやったの!)
学習コストが低い=簡単、というわけではないと思います。むしろ、ある程度レールがひいてあるほうが、はじめのうちはいいかもしれません。
なぜPHPをdisったのか?
この記事の数日前にPHPdisり記事で炎上してしまいましたので補足です。なぜPHPをdisったかというと、「とりあえずCakePHP」「とりあえずCodeigniter」で開発をスタートしちゃう人たちが未だに多いように思うからです。PHP言語自体をdisる気持ちはありません。
CakePHPのような実績あるフレームワークは実績がないフレームワークより良いような気がしますが、享受できるはずの恩恵を受けられないフレームワークを今から使いはじめるのはもったいないなと思います。
あと、なんでRubyと比較?と言われると、Rubyがすきだからということもありますが、Node.jsとかはそもそも用途が違いますし、Pythonは日本ではRubyよりマイナーかと思いますし、比較するならRubyが妥当かなと。そして残念ながらPerlは私は触ったことがほとんどないので。。。
とりあえずRailsの方がとりあえずCodeigniterよりはまだマシかなという気がするのも理由の1つです。レールが厳しいですから。あとなんでsymfony2じゃなくてCakePHPなん?といわれると、symfony2は嫌いじゃないからです。(今思うとSymfony2かモダンPHPとの比較でもよかったですね)
あと、PHPのdis記事をWordPressで書くとか(笑)みたいなコメントも頂きましたが、WordPressをブログを書くのに使うのは至極普通かと思います。あとはYOURLS(bit.lyみたいなののOSS版)とかもたまに使ってます。WordPressは非常に優れたプロジェクトです。保守もコミュニティによってしっかり行われています。他言語のものにわざわざ乗り換える必要性は今のところ見つかりません。言語はあくまでプロダクトを作るためのツールですし、WordPressはブログを書いて公開して管理するためのツールです。
結局何が言いたかったのか?
もっと「モダン」を触ったり、スキーマファイルを書いたり、今後エンジニアが楽するための時間を業務時間中にくれよ!というところです。エンジニアが足りないとどこも言っているのに、エンジニアのスキル成長、今エンジニアがやっている仕事を自動化する・効率化する事には投資しなかったりするのはもったいない。ということです。
既に選んでしまっているフレームワークや既存のコードから乗り換えることは非常に難しく、それによって、非常に制限された環境下の中で優れたエンジニアの方々が鋭意努力しているのはよくお聞きします。
せめて新規プロジェクトは全て「モダン」で行きましょうよ!そのために、モダンを使えるようにしましょうよ!と思います。コピペエンジニアが書いたコードを後から保守は皆さんしたくないですよね?
はじめてのプログラミングで生PHPを使ってコードを書く、というのは学習用としては非常に良いと思います。しかしながら、そのままでPHPエンジニアを名乗ってはいけないような気がします。
先述したような、停滞しているプログラマが少しでも前に進むといいなと思います。