とある案件で新しいPHPのフレームワークを使おうという話になり、結論としては最近流行のLaravel を使おうということになったのですが、どういったステップで選定作業をしていったのかのまとめを書いてみます。
どちらかというと選定ステップに重点を置いて書いているのであまり技術的なことは書いてません。
まずはどんなフレームワークがあるのか
ググって見たら色んな情報が出てくるわけですが、下記のQiitaのまとめがPHP以外にも様々な言語のフレームワークの情報が掲載されていて役立ちました。
2014年 Webアプリケーションフレームワークトレンド(PHP / Java / Ruby / Python / Perl) / Qiita
2014年って言っても年末に書かれているので比較的新しいソースになってます。
さて、この中から何を選ぶかということになりますが、PHPのフレームワークだけでも17も載っていてこれらを一つずつ調べていくほど時間はありません。
ある程度自分が見聞きしたことがあるってもので対象を絞ってもよいですが、フレームワークを使うに当たって情報量の多さって命綱になるので、その辺で候補を絞るのが無難かもしれません。
こうなってくると、このまとめが書かれた時点でのGoogleのインデックス数から
・ FuelPHP
・ Zend Framework
・ CakePHP
・ CodeIgniter
・ Symfony
・ Laravel
・ Yii
といったフレームワークが候補として出てきます。
個人的にはCakePHPが好みだったりもしたり、Symfony1系を使ったことがあったりでその後継(2系)でいいじゃんみたいな意見もあったりしたのですが、もう少し客観的に見て選んだ方が後々後悔しなくて済みそうです。
ここからさらに絞り込むに当たって、どんな基準で選定していかないといけないかをまとめて見ます。
情報量の多さで選ぶ
先ほど書いたように新しく習得するフレームワークの情報量の多さってかなり大きなウェイトを占めたりします。
もちろん、ネット上の情報だけで判断する必要も無いので、きちんとまとめられた優良な書籍があれば事足りたりもしますが。
後は、情報量が多いといってもなるべく日本語の情報であったほうがありがたかったりもします。
エンジニアたるもの英語圏の情報ぐらい読めってのは全くその通りだったりもするのですが、その案件に多くのエンジニアが携わることになった場合、やはり日本語の情報が多い方が学習コストやトラブル時の対処において調査に大きな時間をとられずに済むので助かります。
で、日本語の情報量ということになった場合、先ほどのQiitaのまとめではStackOverflow のタグ数も参考値に入れていますが、StackOverflowは主に英語圏でのエンジニアQAサイトのため、これが活発というのは主に海外での流行を表していたりもします。
日本語用のサイト もあったりしますが、本家よりもだいぶ情報量が少ないですし、大体困ったときにググってヒットするのって英語圏の人たちのやり取りだったりもします(それはそれで役立ったりもしているのですけど)。
一方で、Qiitaのタグ数を見るとこれは日本人エンジニア向けのQAサイトではあるため、(あくまでタグ数なので一概には言えませんけど)比較的日本においてのエンジニア数や情報の多さを表しているため、こちらを参考にした方がよさそうです。
こうなってくると、CodeIgniterやYiiはどちらかというと海外で主流になっていて、日本ではまだそれほど馴染みが無いように見受けられます。
安定性で選ぶ
もちろん採用する技術が安定しているに越したことはありません。
しかし、フレームワークの世界で言うと安定したレガシーなものはアプリケーション開発手法自体も古臭く安定の見返りに開発コストが増加したり、エンジニアの教育の観点で考えると採用することが望ましくないケースもあったりします。
安定しないといっても、不具合の修正などに伴うバージョンアップが繰り返し行われていればそれをカバーしてくれたりもします。
バグ修正や機能の追加・改修の対応が行われるというのはそのコミュニティが活発に活動している証拠でもあったりしますので、どれくらいのスパンでマイナーバージョンアップが行われているのかや、メジャーバージョンがどれくらいまでサポートされるのかの情報を調べてみるのは大事だったりもします。
(あんまりはっきりと何時までサポートするといったライフサイクルを提示しているフレームワークって無かったりもするんですけど)
このバージョンって結構厄介で、選定の過渡期でメジャーバージョンが発表されたりすると現行の安定バージョンと新バージョンのどちらを採用すればよいのか悩ましい問題に陥ります。
Laravelは現在4系の最新であるバージョン4.2に加えて、最近発表されたバージョン5の両方が並行して開発されていますし、CakePHPも2.6系に加えて3.0系もリリースされていたりしてこれらはアーキテクチャや開発手法が違っていたり、パフォーマンスも(場合によっては最新バージョンの方が悪かったりと)違ったりして、候補としてはメジャーバージョンが違えば別物として候補に上げて選定していった方がよいかと思います。
既存環境との親和性で選ぶ
新しいフレームワークを採用するにしろ、一部は既存の環境を流用しなければならないというケースはあったりします。
例えば、DBは今使っているOracleを使おうといったもので、これは全く新しく環境を作るにしてもシステム要件からどうしてもこのOS環境やソフトウェアを採用しなくてはならないといったことがあったりもするので、その環境に新しいフレームワークが馴染むのかどうかを調査しておくのは重要だったりもします。
(FuelPHPはこの辺で採用が見送られたりもしました)
DBの件で言えば、フレームワークに付属しているORMとかは全てのDBに対応できてなかったり、そのために本家とは別に有識者による別のモジュールを導入せざるを得なかったりもします。
DBの仕様からシステム構成が強要されるケースもあったりして、例えばMySQLのAUTO_INCREMENTはOracleにはない機能なので、別でシーケンスを作る必要が出たりもします。
これは別にフレームワークの問題ではないんですけど、シーケンスが増えるとシステム移行の際に保守・運用で手間が増えたりするので、既存環境を優先すべきなのか全く新しい環境を作ったほうがよいのかはフレームワークを導入するに当たってよく検討しておいた方がいい事項ではあります。
また、既存の社内標準ライブラリを使う必要があるならその組み込みができるかとか、Laravelの話で言えばパッケージ管理にComposerを使う必要があったりするので、いやいやPEAR使い続けようぜみたいなイタタ・・・な反対が出たりすると採用が難しくなったりもするのでその辺はどう環境が変わっていくのかも調べて話し合っておいた方がよいかと思います。
まとめ
あんまり具体的なことをかけては無いのですが、こんなことを基準にさらに候補のフレームワークを絞っていったわけですが、最終的にはサンプルアプリを作ったりして実際に開発するメンバーの感触を掴んでもらってどれがいいか決めていくのが一番よい方法だとは思います。
どのフレームワークにもマニュアルにサンプルアプリの構築手順が掲載されていたりもしますので。
どのフレームワークにも良し悪しがありますし、選定基準から機械的点数化して候補を絞ってもよいでしょうけど、実際に導入するに当たっての障壁がそれぞれの環境やチーム体制、システム要件や顧客の要望などから限定されたりもしますからそれに見合ったフレームワークを選んでいくということも大事だとは思います。
[PR]
[PR]