Webフレームワーク比較してみた

紆余曲折ありPHPも調査している状況ですが、JavaPHPPythonRubyPerlを除けば一通り見ているような感じなので比較して整理してみるとします。とはいえ、自分は業務アプリでのWebがメインでしたし、実業務で使ったことのあるのはJavaだけです。他の言語・フレームワークは調査とかで使ってみたことがある程度なので、あくまで自分視点だという前提です。

尚、当然ながら規模や案件によっても評価ポイントがまったく異なると思います。今回の比較で検討した状況はこんな感じです。

  • 小〜中規模のWebサービスを作成(BlogとかSNSくらい)
  • 開発メンバーはデザイナとプログラマを合わせて4〜5人程度
  • 継続して開発しサービスを拡張していく前提
  • ある程度の堅牢さは必要だが、開発速度を重視

言語というよりはフレームワークの選定になるのですが、下記の表のようにPHPからはZendとCakePHP(sympony)、RubyからはRailsPythonからはDjangoJavaからはTeedaとSpring MVCを選んでみました。
PHPフレームワークはこれらの3つがほとんど同じくらい使われているようですが、自分が調査した感覚ですとCakeとsymponyは比較的に似たコンセプトのようなので一緒にしています。どちらもRailsの影響を受けたフレームワークとのことですが、CakePHPの方が小〜中規模向けでシンプル、symponyは中〜大規模向けで多機能という印象です。それらに対してZendの特徴はコンポーネント指向で、必要なコンポーネントを組み合わせていく形になり、Springに近いイメージがありました。必要に応じて、たとえばZend_Dbだけを使うなども可能なようです。
RubyPythonに関しては他のフレームワークの情報が少ないのと事実上はスタンダードに近いのでRailsDjangoです。Djangoに関しては自分の好みに近いGenshiをテンプレートエンジンに採用する前提になります。
Javaからは自分の中で実績も多いTeeda、それからSpringMVCを検討候補にいれてみました。

ということで、まずはスコア表です。それぞれのフレームワークに1〜5点の評価をし、それぞれの重みをかけてから足し合わせています。重みに関しては案件などによって異なるかと思いますので、自分の中での評価基準だと考えてください。

とにかく重視したい事は、デザイナとの共同作業となるためにView(テンプレート)です。開発者視点で考えてしまうと、Viewの中にプログラム的な記述があっても大きなマイナスにはならないのですが、デザイナはプログラマではなくツールもDreamweaverを使う、ということを前提なので、重みを大きくしています。このあたりがRubyRails)のスコアが伸びない理由になります。
また、開発スピードとメンテナンスや拡張性も重要な項目としています。このあたりは動的スクリプト言語のほうが開発スピードが速く拡張性や可読性は静的な言語のほうがやりやすいという傾向なので、比較的に硬くかけるスクリプト言語Python、静的言語だがスマートデプロイやCoCで開発効率の高いのTeedaがスコアを伸ばしています。
他のポイントをみていくと、データベース周りに関してはどの言語を選んでも大きな差にならなないと感じました。昔のようにSQLを書いてコネクションを張ってという状況はないので、それぞれのフレームワークで細かいメリデメはあるにせよ、大きな差にならないと感じました。今回の適用アプリの前提が、基本は参照がほとんど、というのもあるかと思います。
インフラに関しては、ほとんどのサーバで簡単に使えるPHPがポイントは高いです。RubyPythonApacheにモジュールを追加するだけで済むのでそこまで差はないでしょう。ただ、Javaを採用するならばどうしてもTomcatをバックエンドに配置するなどの手間が増え、構成も複雑になるというのはデメリットと言えます。当然ながら構築する環境の制限にもなります。
次に開発環境です。開発スピードにも関係しますが、開発を行うならばIDEなどの開発環境が充実しているかも1つのポイントです。ちょっと前まではPHPRubyもこれという開発環境がないというデメリットがありましたが、現時点ではNetbeansがあるので大きな差にはならないでしょう。とはいえ、JavaEclipse/Netbeansという2大IDEがどちらも高い完成度となっていますし、静的言語ゆえのアドバンテージが大きいところです。これに対してPythonIDEが弱いのが致命的かもしれません。
最後に重みとしては低めにはしていますが、開発していて楽しいか、ということです。仕事とはいえ、楽しければモチベーションもあがりますので、結果として生産性もあがります。嫌々残業するよりも、業務外にでも勉強したいような言語・フレームワークの方がいいですからね。この点ではやっぱりRubyPythonがいいかな、という感じです。PHPの評価が低いのは、あまり興味がわかないというのもありますが、MVCまで採用してきっちりWebアプリ作るならばわざわざPHPである必要を感じないからです。PHPは簡単にHTMLの中にスクリプトを組み込めるというのが利点かなと感じますから、MVCまで組まなくてもいいような部分(たとえばメールフォームとかアンケートとか)に適していると感じます。

さて、結果を見てみると、自分の好みを反映しているとしか言いようがありませんがTeedaが高得点となりました。やはり、Javaのメリットを残したまま弱点である開発スピードをHotDeployや規約でカバーしている点、テンプレートがXHTMLベースでデザインとの親和性が高い点がポイントでしょう。
次点としてはPython(Django)になりますが、こちらは情報量の少なさや開発環境に関する点がマイナスになりました。Java使いはPythonを好む傾向があるみたいですが、自分もPythonは第2言語にしたいくらいです。また、今後を考えるとNetbeansでのサポートも確定しており(開発は遅れていますが)NbPythonは開発中です。また、Jythonを使えばJavaの資産も活用できるわけで、フロントはPythonでバックエンドにJavaはやってみたいパターンです。ただ、まだその時期ではないかな、という所でしょう。
続けてRailsとSpringでした。Springは悪くないのですが、サポートの問題もあったり、Springだったら同じJavaTeedaのがいいとなりますから、候補からは外れそうです。Railsに関しては楽しいですし、Gemで拡張性も高く、情報も多く、開発環境も悪くない、と良い点が多いです。ですが、Viewに関しては事実上、RHTMLというRails標準のテンプレートを使うことになるのが致命的です。他のテンプレートエンジンを採用する事もできるようですが、メジャーなものがなく、検討候補になりませんでした。Rubyを使えるデザイナであれば問題ないですが、Rubyを使えるならばプログラマになってくださいという感じですよね(笑)でも、やっぱり捨てがたいのも事実。
最後にPHPですが、Zendを採用するのはありかと思いました。Javaをやっていた自分には比較的になじみ易いというのもあります。とはいえ、Zendを使うならばSpringかな…と思います。同じようにCakePHPを使うならばRailsかなとも感じるわけです。PHP自体はWebに特化した言語として良いと思うのですが、最近はやっているフレームワークを見てみた結果として、結局はViewに全部書くのはまずいからロジックを分離して…となり、他のフレームワークに習ったMVCを採用しています。結果として、習得コストはRailsCakePHPのどちらが低いかと考えると「PHPは習得が楽」というのは真でも「CakePHPは習得が楽」とならないと思うわけです。ZendなんていきなりSpringを覚えろみたいなノリですから、まったくの初心者には無理でしょう。
また、PHPフレームワークのメリットとしては、テンプレートエンジンは自由に選択できる点があります。PHPで記述しテンプレートエンジンを使わなくてもいいのですが、JavaでいうEL式のように直感的に記述できるようになるテンプレートエンジンは採用したほうがいい感じです。その中にはXMLベースで記述できるテンプレートもあるので、採用を検討すればデザインとの親和性は保てます。ですが、これもPHPなんだから標準のまま使えば?という主張もあり、それもそうだな、と感じるわけです。そう考えていくと、現在のPHPってものすごく半端な位置なのかもしれません。

さて、まとめです。結局のところ、今回の検討ではPHPはあまり価値がないと感じました。Railsをどうしてもやりたいけど、Rubyだと…というケースならばCakePHPもありかもしれませんが、それ以外では選択するメリットは安いレンタルサーバでも動くという事と、テンプレートエンジンが自由に選択可能、という点しかありません。ですが、他の言語も選択できるならば、それらは代替案になってしまいます。また、Railsは実に惜しいです。Rails界隈の人はRubyに長けてしまっているので、デザインを重視したいという感覚にはなりずらいのかもしれません。結論としては手堅く行くならTeeda、チャレンジしたいならばDjangoかな。