Eclipseのアーキテクチャ
Eclipseのアーキテクチャ
EclipseがJavaの統合開発環境(IDE)のデファクトスタンダードと呼ばれるようになった理由のひとつに、商用・非商用・オープンソースに関わらず、多くのすばらしいプラグインが開発され、利用できることが挙げられます。
しかしEclipseは、JavaのIDEとして開発されているのではなく、様々な用途のツールを構築するためのプラットフォームとして開発されています。そのため、Eclipseの基本的な環境(Eclipseプラットフォーム)は、エンド・ユーザが使用するような機能をそれほど多く持っていません。
Eclipseプラットフォームは、ランタイムとランタイム上に構築されたいくつかのコンポーネントによって構成されています(図10)。それぞれのコンポーネントは1つ以上のプラグインによって実装され、ランタイムとリソースを併せたコンポーネントをCoreと呼び、ワークベンチとJFaceを併せたコンポーネントをUIと呼んでいます。

図10:Eclipseプラットフォーム
| コンポーネント名 | 説明 |
| ランタイム | プラグインの動的な追加や削除、ライフサイクルの管理を行います |
| リソース | リソース(プロジェクト、フォルダ、およびファイル)の管理を行います |
| ワークベンチ | プラグインがメニューやアクションなどを追加したり、独自のビューやエディターなどを作成したりするための場所を定義します |
| SWT | SWT(Standard Widget Toolkit)は、OSが提供するGUIを共通のAPIで利用するためのツールキットです |
| JFace | SWTを利用して、プラグインに共通のUIを提供するためのツールキットです |
それでは、JavaのIDEとして使用している機能はどこにあるのでしょうか。Eclipse SDKは、Eclipseプラットフォームと、Java開発環境であるJava Development Tools(JDT)、プラグイン開発環境であるPlug-in Development Environment(PDE)から構成されており、JDTとPDEもプラグインとして実装されています(図11)。私たちはこのJDTの機能を使い、プログラミングしています。

図11:Eclipse SDKのアーキテクチャ
プラグイン
プラグインは、プラットフォームに機能を追加するためのしくみであり、他のプラグインにも機能を追加することができます。機能を追加することを拡張といい、他のプラグインが拡張できる場所のことを拡張ポイントといいます。
そして、開発したプラグインをプラグインとして動作させるためには、下記の条件を満たしている必要があります。
- プラグイン・ランタイム・クラスと呼ばれるJavaクラスがある
- プラグインに関する情報を記述したマニフェスト・ファイルと呼ばれるplugin.xmlがある
プラグイン・ランタイム・クラス
プラグイン・ランタイム・クラスは、プラグインの起動や終了などのライフサイクルの機能を実装するJavaクラスのことで、org.eclipse.core.runtime.Plugin抽象クラスを継承しています。プラグイン・ランタイム・ク ラスのインスタンスの生成や管理は、Eclipseプラットフォームのランタイムによって行われるので、インスタンスを生成するコードを書くことはありません。
実際には、Plugin抽象クラスを継承してプラグイン・ランタイム・クラスを実装するケースは多くなく、Eclipseプラットフォームが用意し ているプラグイン・ランタイム・クラスを使用します。図12にPlugin抽象クラスとプラグイン・ランタイム・クラスの関係を示します。
EclipseプラットフォームのUIコンポーネントを用いるプラグインを開発するためには、AbstractUIPlugin抽象クラスを使用します。AbstractUIPlugin抽象クラスは様々な用途があるので、汎用性を持たせられるように抽象クラスになっており、プラグイン・ランタイム・クラスとして使用するためには、さらに継承する必要があります。
