Chonaso's Commentary

InternetやIT技術などについて知ったこと、試したこと、考えたことを書いていきます。

Seasarに思いを馳せる

思いを馳せるどころか今でも普通に使ってるわけですが。

それどころか、Javaメインで数社・3桁近いプロジェクトに携わってきたのになぜか仕事でSpringやGuiceを使ったコードに全く関わることがありませんでした。(なのでプライベートで書き始めることにしました)

誰もが目を疑ったででしょう、あのカンファレンスが帰ってきました。

というわけで昔話など。


昔話

(2004~2006年ごろの話)

SpringやSeasar2がもてはやされたのは、端的に言ってしまえばJ2EE(≠JavaEE)1.3や1.4があまりにもつらかったからです。 (多分私の年代かその上の年代の人の半分くらいはJ2EEのイメージを引きずっているのでは…)

どの辺がつらかったのかといえば

など挙げればキリがないのですが、この辺を解決したのはJ2EEではなく多くのオープンソースプロダクトでした。

その中でもS2Containerを中心とするSeasar Projectのプロダクトは、DIコンテナAOPStrutsを拡張したS2Struts(SAStruts)やORMであるS2DAOなどWebアプリケーションを作るうえで必要なフレームワークを全て備え、S2Unitやホットデプロイなどがテストの諸問題を解決するというフルスタックぶりが高く評価されました。

この頃はジェネリクスアノテーションが導入されたJava5の普及期と重なり、Seasarとの機能的な相性も抜群でした。

開発コミュニティが国内(日本語)だったため当時のコミュニティはとても盛況でした。 (ドキュメントの殆どが日本語のみだったこともあり、海外での使用例はあまり聞いたことがないです)

また、大手銀行でも採用されたニュースは衝撃的でした。OSS全体の導入ハードルが下がった出来事だったと思います。

その後、2008年以降は新たな機能追加は行わずに枯れさせる、という状態に入りバグ修正等のアップデートのみとなっていきました。

この辺りはきしださんの記事が詳しいです。

そうしてJavaのバージョンは7そして8へと上がり、SpringはJavaの仕様決定に大きな影響力を持つポジションにあり、ガラケーコンテンツの衰退とスマートフォンの爆発的普及などによりWebアプリケーションの形態が多様化し、Struts1はEOLになり、JavaEE6,7とリリースされ…と時代は大きく変わってしまいました。

(CDIが出てきたあたりでOracleがドヤり出してきましたが、ようやく2005~2006年あたりの水準に追いついただけじゃないの?と思ってしまうわけですが。)


Seasar2は過去のものか

機能的な面でいえば、用途に合致するのであれば全く実用だと思います。 特にDI周りは10年前と要求機能がそれほど変わってないので他の現行プロダクトに引けを取らないのではないかと思います。

最近の技術トレンドについても、任意のDIコンテナと組み合わせられるものであれば使い慣れたSeasarとのセットで使うのもアリでしょう。 (私の関わったものとしては、Java8+Seasar2+Jerseyという組み合わせで運用しているシステムがあります)

ただし、CoC(Convention over Configuration:設定より規約)が重視されたフレームワークのため、今から1から覚えるのは苦労するかもしれません(しかもドキュメントは結構不親切)。そして、今となってはつぶしの利かないフレームワークに挙げられるでしょうから、メンバー構成などを考慮した選択は必要です。

「そもそもDIってどうよ?」という議論もありますが、私が実際にDIコンテナを使わずにWebアプリを作ろうとしたときはつらくて挫折しました。テストもそうですが依存コンポーネントの自動登録や連鎖的な依存性注入ができないのが一番つらかったです。DIおじさんとか言われちゃいそうですね。


Seasarから得たもの

色々あるんですが、総じてJavaの大切な部分はSeasar2とセットで学んでいたことが多い気がします。

オブジェクト指向の理解

理屈的な部分はわかっていたのですが、DIコンテナの利用を通じてようやくオブジェクト指向を理解できた気がします。

依存性の排除と注入

diconファイル(Seasar2の設定ファイル)の表現力の高さにも驚きましたが、diconファイルとpropertiesファイルの使い分けなど、開発や運用時における設定情報の管理を強く意識付けられました。

2Way SQLの衝撃

当時はS2ContainerよりもO/RマッパーであるS2DAOが衝撃的でした。 「単純なクエリならSQLを書かない」もそうでしたが、「ロジックとSQLを完全に分離したい」「条件によってSQL構文を変えなければならない」という諸問題が2WaySQLによってきれいに解決されました。

現在もS2DAOの機能を色濃く継承しているDomaを好んで使っています。

http://doma.seasar.org/

OSSコミュニティの存在を知った

当時行われていたSeasar Conferenceによって技術系カンファレンスや勉強会の存在を知ることができました。


というわけで、たぶん同窓会的な感じな内容なんだろうなぁ、と思いつつも何か期待してしまうわけです。