RubyのDI、AOPフレームワーク
『JavaからRubyへ』は第6章の途中まで読んだけど、技術面の話もやっぱり概念的な話しか出てこないので、具体的にDIの代わりにこうするみたいなのはわからなかった。
仕方がないのでGoogle先生に聞いてみると、「Ruby DI」で自分の記事が最初にきちゃったよ。。。
気を取り直して調べてみると、RubyにもそれなりにDIやAOPのフレームワークはあるみたいだ。せっかくなので調べた範囲でリストアップしておこう。(今後検索でここにきちゃう人のためにもね)
まずはDIフレームワーク
- Needle(http://needle.rubyforge.org/)
- Copland(http://copland.rubyforge.org/)
- Rico(http://www.picocontainer.org/Rico)
- tudura(http://nihohi.sourceforge.jp/cgi-bin/index.cgi)
Needleが有力そうな印象。
CoplandはNeedleの作者がNeedleの前に作ったDIフレームワークでJavaのHiveMindベースらしい。CoplandのJavaっぽさをなくして新しく作ったのがNeedleってことになるみたい。
その誕生秘話がこれ。
http://www.rubygarden.org/index.cgi/Libraries/copland-to-needle.rdoc
この人はRailsのデプロイツールCapistrano(旧SwitchTower)も作ってる。
- AspectR(http://aspectr.sf.net/)
- CGIKit::Aspect(http://cgikit.sourceforge.jp/cgi-bin/ja/index.cgi?AOP)
- あそびぃ(http://asoby.redirectme.net/)
こちらはAspectRが有名みたい。CGIKit::Aspectも簡単に使えそうな印象。
で、RailsでもDIは検討されたけど、DIフレームワークに依存しない形で統合するように落ち着いたという話を発見。
http://andore.com/money/trans/railsInjected_ja.html
結局RubyでもDIとかAOPが有用な場面はあるしフレームワークもある。でもそれらを使って複雑にするほどメリットがないってことのようだ。
あとは実際にRubyでそれなりの規模のものを作ってみて本当にDIやAOPが必要かどうかは見定めてみよう。必要ならフレームワークがあるということがわかっただけでも今回はよかったと思う。
そのほかの参考記事も最後に挙げておく。
http://jp.rubyist.net/magazine/?0002-RLR
http://www.thinkit.co.jp/free/article/0608/12/4/