ドワンゴの社内システム開発を担当する際に行った調査資料が、PDFで公開されています。アプリケーションを画面層、コンテナ層、データアクセス層に分けて、それぞれのJavaフレームワークを選定しています。比較したフレームワークと評価結果は表1のどおりです。
表1 Javaフレームワークの評価結果
層 | フレームワーク | 点数 |
画面層 | SAStruts | 8 |
Apache Wicket | 10 |
コンテナ層 | Seasar 2 Container | 4 |
Spring Framework | 3.5 |
Google Guice | 5.5 |
データアクセス層 | JPA(もしくはHibernate) | 6 |
S2JDBC | 8.5 |
Apache Cayenne | 8.5 |
点数のみを見るとWicket、Guice、Cayenneが良い評価を得ています。ただし評価したブログ記事筆者は「JSPはマイナス評価」「Wicketに習熟している」「Springはライセンス関係で敬遠した」など独自の観点も盛り込んでいるため、あくまで一つの検討材料として見るのがよいでしょう。
公開資料には、各層別の評価ポイントに対してそれぞれのフレームワークがどのように対応しているかを、コード例を交え解説しているドキュメントが含まれています。コンテナ層の評価ポイント「他のフレームワークとの親和性」にて、Wicketはどのコンテナとも統合機能を持っていますが、Seasar 2のS2WicketはWicketの最新バージョン1.4では動かないことを指摘しています。
ここでは親和性の「有無」についてのみ評価がされていますが、親和性の「度合い」についても見ていくとより違いがはっきりとわかりそうです。たとえばSeasar 2とS2JDBCの親和性は当然のように高いですし、実際の評価も高いです。一方、(この資料では親和性について言及していませんが)SpringとJPAに関してもJpaTemplateなどの一応の統合機能は用意されていますが、あまり親和性は高くありません。
また、SAStrutsに関して「もしメンバーにStruts経験者が多ければ、SAStrutsは最良の選択である」との評価をしています。
実際に評価する際には、メンバーの学習コストや「ドキュメントが英語のみだったときのコスト」など、この記事では該当しなかったリスクがいろいろありプロジェクトによって異なってきます。この資料をもとに自身のプロジェクトでの重要な評価ポイントが何かを探ってみるとよいのではないでしょうか。
URL:http://d.hatena.ne.jp/t_yano/20081118/1227008018