「DIする」,「インジェクション(注入)する」──新しい技術に敏感なソフトウエア開発者たちの間で使われている言葉である。DIとは,「軽量コンテナ」を実現する新しい設計思想Dependency Injection(依存性注入)の略称である。同じ概念をIoC(Inversion of Control,制御の反転)と呼ぶ場合もある(詳細は後述)。「DIする」と言えば開発者の間では通用するぐらいに,この設計思想は注目されているのだ。

 DIが注目される理由は簡単だ。ソフトウエア開発者の開発サイクルを大幅に改善するからだ。筆者が司会を担当した「軽量コンテナ」に関するパネル・ディスカッション(注1)では,DIを適用した軽量コンテナ「Spring Framework」のおかげで「睡眠時間が確保できるようになりました」と複数のパネリストが真顔でコメントしたほどである。DIは,それだけ有効な技術なのだ。

注1:2004年11月18日開催の「第5回 J2EEカンファレンス」のパネル・ディスカッション「軽量コンテナからEJB3へ──J2EEの未来がここにある」での一幕である。登壇した4人のパネリストは,いずれもSpringの経験者だった。

 DIは「草の根」オープンソース・プロジェクトとして芽が出た技術である。それが今や次世代J2EEの標準技術に取り入れられようとしている。しかもDIのインパクトはJava/J2EEだけにとどまらない。開発者が注目するだけの汎用性と合理性がDIにはあるのだ。

 DIの技術的な内容を一口で説明するのは難しいが,あえてまとめるなら,ソフトウエア・コンポーネント群を疎結合して相互の依存性を極小にすることで,設計・開発・テストにまたがる開発サイクル全体を合理化する手法といえる(詳細は後述)。

 DIの考え方は幅広い分野に波及しつつある。近い将来,ソフトウエア開発者の多くが,DIによるフレームワークの枠組みの中で仕事をするようになることになりそうだ。アプリケーション・サーバー製品が「DIできる」機能を備えるようになるからだ。それだけでなく,開発者を支援するフレームワーク類でもDIを使うものが増えてくるだろう。

オープンソースのDIコンテナが多数登場

 DIの機能は,小規模なソフトウエアで実装できる。このソフトウエアを「軽量コンテナ」や「DIコンテナ」と呼ぶ。このDIコンテナは,まずオープンソースのフレームワークとして登場した。特に有名なのは,ITコンサルタントのRod Johnson氏が原型を作り,オープンソース・プロジェクトとして開発が進められているSpring Frameworkである(注2)。日本では,比嘉康雄氏らが開発し2004年に登場したSeasar2が,急速に支持を集めつつある(関連記事)。

注2:DIコンテナとして複数のフレームワークが登場しているが,その「人気度」の目安として,google.comを使い検索してみた。
"Spring Framework" Java 95,800
PicoContainer Java 47,800
HiveMind Java 39,900
Seasar Java 11,400
Javaとは無関係の検索結果もあるため,検索条件でand条件として"Java"を入れて絞り込んだ。厳密な比較ではないものの,Spring Frameworkの情報量が多いことの一つの証拠となるだろう。

 このほか,PicoContainerHiveMindなど,複数のオープンソース・ソフトウエアが登場している。オープンソース・フレームワークの「大物」として,Apache Jakartaプロジェクトが開発中のJ2EEアプリケーション・サーバー「Geronimo」が期待されているが(関連記事),この「Geronimo」はカーネルとしてDIコンテナを採用しており,Spring Frameworkアプリケーションの実行機能を搭載する計画も進んでいる。

「DI」はエンタープライズJavaの基盤になる

 DIコンテナへの注目が一挙に高まったのは,ある「事件」がきっかけだ。2004年5月ごろ,「EJB(Enterprise JavaBeans,業務ロジックをコンポーネント化する技術)の次期バージョンであるEJB3.0はDIの設計思想を取り入れる」というニュースが流れた(関連記事)。2004年6月のJavaOneでは,EJB3.0の概要の発表を大勢の開発者が聴講した(関連記事)。EJB3.0では,DIの概念を取り入れたことで従来のEJB2.1の持っていた複雑さや制約が大幅に取り除かれて,簡素なコーディングになる。いわゆるEoD(Ease of Development=「開発しやすさ」)の一環である。

 このEJB3.0の発表に,DIに詳しい開発者たちは驚いたり,拍手を送ったりした。筆者は開発者ではなく記者だが,やはり驚いた。なぜか。