OSS Javaフレームワークはどんどん高度化している

以前、いつまでStruts1を使い続けるの?という記事を書きました。技術から離れているSEの方は、いまだにJavaオープンソースフレームワークと聞くとStrutsくらいしか思い浮かばないという人も多いと聞きますが、その記事では、Strutsの問題点をあげて、そろそろ新しいフレームワークを使いましょうという話をしました。
しかし、単にSpring MVCに移行しましょうということではなくて、OSSを利用したエンタープライズJava開発の世界*1では、もっと根本的なレベルで進化が起こっているのではないかということを最近考えます。単純にOSSJavaフレームワークといっても、時代によって考え方が大きく変わってきているという事実があるのです。この点についてちょっとまとめてみたいと思います。

第1世代(2000年〜2003年)

いわゆるStrutsとかHibernateといったフレームワークで、多くの人はいまだにJavaフレームワークと聞くとこの世代のフレームワークを想像するかもしれません。この世代のフレームワークはWeb層とか、データアクセスなど特定の機能やレイヤーを対象としたフレームワークでした。実際のアプリケーションを作成するためには、独自に組み合わせるなどの工夫が必要でした。

第2世代(2004年〜2008年)

Spring FrameworkSeasar2JBoss Seamなどの時代です。このようなフレームワークは、一般にはDIコンテナとして知られていますが、DIだけやっているわけではなくて、実際には画面フレームワークやデータアクセスなど数多くのOSS(商用も)フレームワークを統合して組み合わせることができる仕組みになっています。複数のフレームワークを組み合わせるフレームワークとして一種のメタフレームワークと呼んでもよいかもしれません。だから、技術を分からない人にSpringとは何をするフレームワークなのか聞かれるとちょっと説明が難しいところがあります。StrutsならWebアプリのプレゼン層の作成を行うためのフレーワークですよとか説明できるのですが。
なお、このころからMavenやIvyを利用したライブラリの依存性管理を使うことが一般的となりました。OSSフレームワークが別のOSSフレームワークを利用しているなど大量かつ複雑な依存関係を手動で管理することが困難となってきたからです。

第3世代(2009年〜)

現在ではSpringなどは既にデファクトスタンダードとして空気のような存在となり、一般的に利用されるようになりました。(少なくとも海外では。)さらに、JavaEE 6なども標準化され、DIコンテナやデータアクセスなど多くの部分の標準化もされています。それで特に最近になって目立つようになってきた存在として、より上位レベルのOSS製品というか、業務パッケージのような製品が出てきたということがあります。こうしたOSSの製品の多くはSpringなどの既存のOSSをベースに作成されています。いくつか代表的な例をあげると

などがありますね。日本語だと書籍が非常に限られるのですが、洋書だとこうした分野の本がたくさん出ています。
私がこれから読もうと思っているものを含めていくつか参考書籍を紹介しておきます。

Mule in Action

Mule in Action

ESB Muleを使うなら必読書でしょうね。バージョン2ベースなので(最新はMule3)ちょっと古い内容ですが、Muleの基本概念を理解するにはよい本です。
Open-Source ESBs in Action: Example Implementations in Mule and ServiceMix

Open-Source ESBs in Action: Example Implementations in Mule and ServiceMix

私は持っていませんがちょっと貸してもらって最初の章だけ読んだことがあります。MuleとServicemixを中心としたOSS ESBの解説。
オープンソース徹底活用Alfrescoによるドキュメント管理入門

オープンソース徹底活用Alfrescoによるドキュメント管理入門

エンタープライズコンテンツ管理(ECM)であるAlfrescoについて書かれた唯一の日本語の本だと思います。私はまだ読んでいませんが、聞いたところによるとインストールや管理などの基本的な使い方が中心で細かいところまでは書かれていないようです。
Professional Alfresco: Practical Solutions for Enterprise Content Management (Wrox Programmer to Programmer)

Professional Alfresco: Practical Solutions for Enterprise Content Management (Wrox Programmer to Programmer)

Alfrescoのかなり詳しい解説書のようです。製品の使い方だけでなくアーキテクチャー的な話も書かれています。手元には届いたのですがまだ読んでいません。
Business Process Management with JBoss jBPM

Business Process Management with JBoss jBPM

jBPMの本でビジネスアナリシストの観点から書かれている本なので、SEの方にも向いています。バージョンが古いのが難点ですが、BPMの基本的な考え方を知るにはよいでしょう。
jBPM Developer Guide

jBPM Developer Guide

この本は持っていませんが、タイトルからはよりプログラマー(Developer)向けの詳細な使い方が書かれているようです。この本はjBPM3ベースだと思いますが、実はjBPMは次期バージョン5で中身のアーキテクチャーががらっと変わりそうなので要注意です。
Liferay Portal 6 Enterprise Intranets

Liferay Portal 6 Enterprise Intranets

エンタープライズポータル作成ツールであるLiferayの最新バージョン6について書かれています。この出版社の本にしてはかなり分厚い本ですね。届いたけれど読むのはこれからです。
Jboss Drools Business Rules

Jboss Drools Business Rules

ルールエンジンのDroolsの本。この本はビジネスアナリシスト向けと前書きに書かれていますが、後半はかなりテクニカルな内容になっており、プログラマーでないと理解が難しいかもしれません。前半部分はBRMS(Drools Guvnor)を使ったビジネスルールの管理方法が中心です。
Drools Jboss Rules 5.0 Developer's Guide

Drools Jboss Rules 5.0 Developer's Guide

ルールエンジンのDroolsの本ですがよりプログラマー向けの本。Droolsを使った開発の解説書としてはもっとも解りやすい本だと思います。ルール記述言語、DSLの作り方、Excelを使ったDecision Table、CEP*2、ルールフロー、Springとの連携方法などが一通り説明されています。
The Definitive Guide to JasperReports (Expert's Voice)

The Definitive Guide to JasperReports (Expert's Voice)

JasperReportの本ですが、解説書というよりは帳票作成のサンプルコードの説明程度と思ったほうが良いです。それなりには実践で役に立ちましたがちょっと薄い内容でがっかりでした。
海外にはプログラミングをしないSE専門職という仕事が限られるという背景もあるのか、こうしたOSSのパッケージの多くは商用製品と比較すると現状プログラマーを対象としたものが多いですね。だから、見栄えのよいGUIツールやマニュアルは商用製品と比べると劣っていることが多いようです。その代わり、OSSなのですからプログラミングができれば、容易にカスタムアプリケーションに組み込んだり、拡張したりすることができます。
まだまだ本格的に普及するには日本語化対応など問題がいろいろあると思いますが、こうした製品が出てきているということは知っておいてもよいと思います。いつまでもStrutsでカスタムWebアプリケーションを開発している時代ではないということです。この勢いだと5年後にはどういうことになっているのでしょうか?
(追記)
ちなみに、このエントリーでは第一世代や第二世代のフレームワークが必ずしも既に時代遅れということが言いたいわけではありませんのでご注意ください。高級言語が出てきてもアセンブリ言語が必要無いわけではないのと同様です。Hibernateなどの低水準のライブラリーの知識は依然として重要だと思います。ただ、OSSがどんどんソリューションよりの上流の世界に進出してきたということがポイントかと。OSSには国境がないから、今後SEとPGの境界もどんどんあいまいになっていかざるを得ないのではないでしょうか?

*1:他の言語でも同様なことはあると思いますが、私がカバーしていないので、ここではJava EEに限定して考えます。

*2:Complex Event Processing