google guiceはDIに適したフレームワークか?

リリースされた当初はそれなりに話題になったような気がしますが、最近あまり話題を聞かないような気がします。特に普及が進んでいるという話も寡聞にして聞きません。

何故でしょう。

google guiceというと、一般的に話題になるのは、

この辺だと思いますが、問題はここだと思います。

  • DIに特化していてシンプル

これは、guiceの良さというかウリでもあると思いますが、DIに特化しているということは即ち、DIだけしかできないということです*1。しかし、世の中に

DIだけしたいなんて人はいるのでしょうか?

滅多にいないと思います。絶対いないとまではいいませんが。大抵の人は、例えば、Webアプリケーションを作るなどの何か他の目的を達成するための手段の一部としてDIしたいのであって、DIするためにDIしたところであまり意味はありません。

即ち、DIとはそもそもが手段の一部であり、それ自身が目的にはなり得ない、そもそも他の手段と組み合わせて使うべきものなので、「何とどういう風に組み合わせて使うか」が問題なのではないかと思うのですが、DIに特化しているということは即ち、

何とどういう風に組み合わせてどう使うかは好きにしろ

ということになると思います。これがspringとかseasarだと、

  • Strutsとの連携方法とか
  • JSFとの連携方法とか
  • Hibernateとの連携方法とか
  • iBatisとの連携方法とか

山ほど組み合わせ方のベストプラクティスが出てきてこれからDIを勉強する人にも活用しやすいと思うのですが。

即ち

guiceは、DIそのものはシンプルで使いこなすための敷居は低いのかもしれませんが、肝心の何とどういう風に組み合わせて活用すればいいかは

ベストプラクティスが全然なくて*2敷居が低いとは言い難い

のが、普及が進まない原因のような気がします。即ち、DIに適したフレームワークであるとは言い難いのかも知れません。

まぁようするに何が言いたいのかというと

guiceをベースとして、何とどういう風に組み合わせればいいかを盛り込んだ、より上位のフレームワークでも登場しない限りは一般に普及しないんじゃないかと思う訳で、私もかつて二度ほど趣味ベースで勉強も兼ねてその「より上位のフレームワークの作成」に取り組んでみましたが、いずれも挫折したというか忙しくなって放置しているうちに飽きました。

そんな訳で、そろそろ気が向いてきたのでそのうち三度目にチャレンジします。

ようするにこれが一番言いたかった

*1: 実際にはAOPもできますが

*2: Struts2連携機能はサポートされてるみたいなので、全然ないというとちょっと語弊があるのかも知れませんが