Eclipseプラグインを作ってみよう!

第4回 Eclipse Formsによる“Hello World!”

この記事を読むのに必要な時間:およそ 5.5 分

前回,本連載で作成する設定ファイルエディター(以下,フォームデザイナー)の設計を行いましたので,今回からはその設計に従ってEclipseプラグインの開発を行っていきます。

ウィザードで作成されるファイル

最初に第2回でウィザードを使って作成したプラグインプロジェクトを確認してみましょう。ドットで始まるファイルを除くと,作成されるファイルは下記の3つです。

MANIFEST.MF

プラグインのバージョンや名前,依存関係などの情報を保持するファイルです。「ヘルプ」「Eclipse SDK について」で表示されるプラグインの情報は,このファイルの情報が参照されています。

プロジェクト作成直後のMANIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Form_designer プラグイン
Bundle-SymbolicName: com.piece_framework.piece_ide.form_designer
Bundle-Version: 1.0.0
Bundle-Activator: com.piece_framework.piece_ide.form_designer.Activator
Bundle-Vendor: PIECE_FRAMEWORK
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime
Eclipse-LazyStart: true

build.properties

プラグインをビルドするときに含まれるリソースを保持するファイルです。プラグインをビルド(エクスポート)するときに配布物にソースコードを含めるかどうかを決めることができます。そこでbuild.propertiesファイルには,ソースコードを含める場合(ソース・ビルド)と含めない場合(バイナリー・ビルド)で配布するリソースを個別に設定できるようになっています。

プロジェクト作成直後のbuild.properties

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .

MANIFEST.MF及びbuild.propertiesに関しては,直接編集することはほとんどありません。これらのファイルはマニフェストエディターで編集することができます。

Activator.java

テンプレートを使用せずにプラグインプロジェクトを作成したときに,唯一作成されるJavaファイルです。このファイルで記述されているActivatorクラスは,プラグインのライフサイクルを管理するクラスです。

ここでEclipseプラグインのロードルールについて説明します。Eclipseはその機能のほとんどをプラグインによって実現しているため,非常に多くのプラグインによって構成されています。これらのプラグインをEclipse起動時にすべてロードすると,Eclipseが使えるようになるまでに非常に時間がかかってしまいます。しかもロードしたプラグインを必ずしも使うとは限りません。これでは時間とメモリリソースの無駄です。この問題を解決するため Eclipseでは,遅延ロードルール(Lazy Loading Rule)が採用されています。遅延ロードルールはプラグインをEclipse起動時にロードするのではなく,プラグインが最初に実行されるときにロードするというものです。これによって,Eclipse起動時には必要最小限のプラグインのみをロードし,使用しないプラグインはロードしないようにすることができます。

プラグインがロードされたときにActivatorクラスのstart()メソッドが呼び出され,終了時には同じクラスのstop()メソッドが呼び出されます。これらのメソッドは,プラグインで共通で使用するリソースのロード/アンロードなどに利用することができます。

Eclipse Formsによる“Hello World!”

それでは早速プラグインを作っていきましょう。とはいえ,いきなり第3回で決定した画面に従って作っていくのは難しいので,まずは下記の機能を実装することにします。

  • 拡張子formのファイルをダブルクリックしたら開くエディターを作る
  • 開いた画面にHello World!と表示する

Eclipse Formsの設定

まず,プラグインプロジェクトにおいてEclipse Formsを使えるように依存関係を設定する必要があります。MANIFEST.MFをダブルクリックして,マニフェストエディターを開き,「依存関係」タブを開いてください。「依存関係の自動管理」セクションと「依存関係分析」セクションはタイトルをクリックすると表示されます。

マニフェストエディターの「依存関係」タブ

マニフェストエディターの「依存関係」タブ

Eclipse Formsは今回のフォームデザイナーの根幹を成すプラグインですので,必須プラグインとして追加します。「必須プラグイン」セクションの[追加]ボタンをクリックします。「プラグインの選択」ダイアログが表示されますので,org.eclipse.ui.formsを選択して[OK]ボタンをクリックします。

「プラグインの選択」ダイアログ。テキストボックスにパッケージ名を入力していくと,フィルタリングされます

「プラグインの選択」ダイアログ。テキストボックスにパッケージ名を入力していくと,フィルタリングされます

以上でEclipse Formsを使用できるようになりました。

必須プラグインとインポート済みパッケージ

必須プラグインとインポート済みパッケージは,指定する内容がプラグインかパッケージかのレベルの違いはありますが,いずれも依存関係を設定するものです。今回はEclipse Formsを必須プラグインに追加しましたが,インポート済みパッケージにEclipse Formsのパッケージを追加しても正常に動作します。それでは必須プラグインとインポート済みパッケージをどのように使い分ければよいのでしょうか?

ヘルプを参照すると,必須プラグインで追加されたプラグインがインストールされていない場合,プラグインは実行されないとあります。今回のフォームデザイナーではEclipse Formsがなければ動作しませんので,必須プラグインという位置付けで問題ありません。しかし,プラグインがオプションとして提供する機能のみが依存しているプラグインはインポート済みパッケージとして定義するのが妥当でしょう。

つまり,利用したいプラグインに対する依存度が高い場合には必須プラグインとし,他の方法を提供している,あるいはなくてもよい(オプション)場合にはインポート済みパッケージとするのが適切だと思われます。

循環と未使用の依存関係

「依存関係分析」セクションの下の2項目に「Look for cycles in the dependency graph」「Find unused dependencies」という項目があります。

「Look for cycles in the dependency graph」は依存関係が循環していないかをチェックします。プラグインかパッケージかのレベルに関わらず依存関係が循環することは避けるべきです。このリンクをクリックすると循環している依存関係をチェックすることができます。

「Find unused dependencies」は不要は依存関係がないかをチェックします。当初使用していたプラグインやパッケージが実装の過程で不要になるということがあります。このリンクをクリックすると,現在使用していない依存を探すことができます。リリース前にはこの処理を行い,不要な依存関係を排除するようにしましょう。

著者プロフィール

松藤秀治(まつふじひではる)

Piece Frameworkのプログラマー。担当はEclipseのプラグインとして開発されているPiece Frameworkの統合開発環境Piece_IDE。2007年5月に株式会社アイテマンを設立。

コメント

コメントの記入