みなさん、OSGiをご存知ですか?聞いたことはあるけど、どんなものなんだろう、と言う方が多いと思います。OSGiを利用するとJava/VM環境で完全なモジュールシステムが実現できます。 OSGiは仕様です。仕様に基づいた実装はいくつもあります。 JavaEEの仕様を実装したアプリケーションサーバが何種類もあるのと同様です。OSGiは OSGi Alliance にて、仕様の議論が進んでいます。産まれたのは1999年なので、既に10年近くの歴史があります。元々OSGiはホームゲートウェイ向けに作られた仕様だったため、主に組み込みに向けた仕様ばかりでした。しかし、近年ではより広い領域で使われるようになっています。そのきっかけになったのがEclipseです。独自にプラグインシステムを開発していた、Eclipseが、そのプラグインシステムの基盤として2003年にOSGiを採用しました。
OSGiによるモジュールシステムの利点の一つに成長速度を鈍化させない事があります。先ほど登場したEclipseですが、サブプロジェクトもプラグインとして実現しています。JDTなど、Javaの開発環境として考えると、新しい機能はそれほど増えていないように見えますが、WTPなどのサブプロジェクトを含めると、その成長速度は鈍化していないと言えるのではないでしょうか?毎年新たなプロジェクトがEclipseのサブプロジェクトとして参画していますが、これもモジュールシステムであるが故、実現できていることです。
一般にソフトウェアが大きくなると、成長速度は鈍化します。なぜなら、システムを変更する時に把握しなければならない範囲がだんだんと大きくなるためです。システム開発の現場でも、新機能の追加時など、「影響範囲が分からないので、調査しなければなりません」と言った話をする場面は多いと思います。それではEclipseの成長速度が鈍化しないのはなぜでしょうか?一つは先ほど書きましたが、新たなプロジェクトがサブプロジェクトとして参画していることもあります。が、ここで取り上げたいのはそもそも複雑なソフトウェアをいくつかのモジュールに分割して、それぞれのモジュールに簡単な役目を持たせて分かりやすくしているからです。言い換えれば、一つ一つのモジュールを簡単にすることで、そのモジュールの実装を単純にしています。実装が単純であれば、理解もしやすくなるので、保守を楽にできます。単純化されたモジュールを保守し、組み合わせて一つの複雑なソフトウェアを実現しているのです。
新たな機能を追加する場合は、新たなモジュールを作成し、拡張していきます。Eclipseは必要な機能があれば、プラグインを導入することでソフトウェアの機能強化を行えますよね。それはこういったモジュールシステムの特性によるからです。この特性が利用されるようになると、他でも導入されるようになりました。例をあげると、
- Weblogicなどの著名なアプリケーションサーバ
- ESB(エンタープライズサービスバス)
- Maven3、Grails2などの(プラグイン拡張可能な)フレームワーク(これらは開発中のものなのでリリース時に変更になっている可能性もありますが。)
などがあります。
OSGiは、その仕様自体もモジュールとして構成されています。その核になっているのはOSGi Core and Compedium Versionと呼ばれる仕様です。(ちなみにCompediumは訳すと”概要”です。)2010/04現在v4.2がリリースされています。この他にも、エンタープライズ向けの仕様である OSGi Enterprise Version 等があります。
| [1] | 初期公開バージョンではApache FelixをOSGi Allianceから認定としてましたが、http://www.osgi.org/Specifications/Certified によると、認定されていません。Thanx @hikikomo_ry_man さん |