プラグインの開発者にとって問題となったのは?

プラグインの開発者にとって問題となったのは?

各モジュールのAPIへのアクセスを制限できるようにしているのは、モジュールの開発者が、今後更新するかもしれない内部のパッケージやAPIであることを、モジュールを利用している開発者に示せるようにしたかったからです。

Eclipse IDEは年に1度のメジャーリリースをするというペースを保っています。これはとても大変なことです。このペースを守るために、頻繁に変わるであろう内部のパッケージやAPIを、できるだけ簡単に理解できることが必要となります。公開されていないAPIとわかっていれば、依存するプラグインのバージョンアップ時に、発生したAPIの変更による影響をできるだけ少なくすることができます。

この対応についても第1回で簡単に触れましたが、Bundleの外部へ公開するパッケージを制御できます。OSGiフレームワーク上ではMANIFESTファイルにて公開するパッケージを「Export-Package」として指定します。他のBundleからは参照できる部分が制限されていますので、内部APIかどうかを判断できます。

Eclipseプラットフォームはプラグインシステムを採用してから、機能拡張を高速に行えるようになりました。Eclipse 3.2では700万行のソースコード、10のプラグインプロジェクトが公開されていたのが、Eclipse 3.3では1,700万行のソースコード、21のプラグインプロジェクトが公開され、倍以上に増えました。ソースコード総数は実装効率の影響かもしれませんが、プラグインプロジェクトの数がほぼ倍に増えているという点は、機能もほぼ倍に増えていることを示しているといえるでしょう。

プラグインシステムをどのように作成するのか?

Eclipseプラットフォームのようなプラグインシステムを解説するために用意したのが、連載の第3回で公開し、第4回で簡単に解説したサンプルのアプリケーションです。Eclipseではプラグインと呼んでいますが、プラグインはすべてOSGiフレームワーク上ではBundleとして扱われます。そこで第4回はBundleの組み合わせについて解説しました。

JARによるライブラリの配布は依存関係になやまされませんか?

今回解説のために作成したサンプルアプリケーションの開発にてちょっとした問題を抱えました。連載の第3回のサンプルアプリケーションではThink ITにて配信されているRSSの受信機能を動的に追加しました。RSSの受信機能はBundleの内部でROMEというRSSを扱うライブラリを使用しています。



ROME
https://rome.dev.java.net/
※対象ページ閉鎖

このROMEというライブラリは内部でXMLを解析するためのライブラリ「JDOM」を使用しています。




開発をはじめる前にROHMを用いてRSSの受信のテストを行うため、簡単なコードを記述し、動作を確認しようとしました。しかし動作しません。こ の時点ではJDOMを用意していなかったのです。ROMEのWebサイトではJDOMに依存していることが明示されていますが、ROMEをダウンロードで きるトップページや配布されているパッケージには、JDOMに依存していることを記述したドキュメントは含まれていませんでした。

筆者は最初ROMEがJDOMに依存していることに気づかず、原因の調査に時間を割きました。このようにライブラリ利用者はライブラリの依存関係について知る必要があります。ライブラリが利用しづらい一因には、こういったライブラリの依存関係があるのではないでしょうか。

OSGiの環境下ではBundleごとにクラスパスを設定することができます。そのため、Bundle形式でライブラリが配布されればこういったライブラリごとの依存関係をあらかじめ指定した上で配布することができます。こうなれば、Bundleの利用者はライブラリの依存関係について悩まされるこ とが少なくなります。

Bundleごとにクラスパスを設定できると、サービスを利用する側は、実装側がどのようなライブラリを使用して実装しているのかを知る必要はあり ません。RSSを受信する機能以外にも、例えばメールの着信を確認するような機能を追加するBundleを作成することもできるでしょう。その場合は、 JavaMailなどのライブラリを使うと良いでしょう。




Bundleに定義されているサービスについて情報が公開されていれば、そのアプリケーションの開発者以外の方でもサービスを追加することができま す。第4回で解説したServiceTrackerを利用することで、BundleContextに登録されているサービスを追跡できるためです。

サンプルのアプリケーションでは受信したRSSをティッカー表示させました。例えば1日に受信したRSSをまとめて手元に記録しておくサービスを追加することもできるでしょう。

でもこうしたサービスは作成したり、修正すると瞬時に動作を確認できたほうがうれしいのではないでしょうか。

アプリケーションを止めることなくモジュールを更新するには?

OSGiフレームワークでは動的にモジュールの追加や更新を行うための仕組みを用意しています。OSGiコンソール上でのinstallコマンドやupdateコマンドなどを使うと、モジュールのライフサイクルを制御することができます。これらのコマンドについては第3回にて解説しました。

installコマンドによってモジュールを動作しているアプリケーションへロードし、startコマンドによってモジュールの動作が開始されます。モジュールを更新した場合はupdateコマンドとrefreshコマンドを実行すると、ロードされているモジュールが再度読み込まれます。またstopコマンドやuninstallコマンドを実行するとモジュールの動作を停止したり、削除することができます。このような動的な機能の制御を OSGiフレームワークでは実現しています。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30