Eclipse Plug-in Development Environment を使ってテンプレートを作成する

テンプレートを作成してユーザーの時間や手間を省く

この記事では、皆さんのクライアントがエクスペリエンスを高めることができるように、Eclipse でテンプレートを作成する方法を紹介します。ここでは、PDEテンプレート作成システムの柔軟性の例として単純なテンプレートを作成します。

Chris Aniszczyk, Software Engineer, IBM

Chris AniszczykChris AniszczykはIBM Lotusのソフトウェア技術者であり、IBMのExtreme Blueインターンシップ・プログラムの卒業生でもあります。オープンソースの信奉者であり、現在はGentoo Linux (http://www.gentoo.org) ディストリビューションに取り組んでいます。またEMFT(Eclipse Modeling Framework Technology)プロジェクトのコミッターでもあります。



2007年 2月 06日

背景

Eclipse は、その登場以来、多くの成功を収めてきました。成功の多くは、Eclipse プラットフォームを構成するさまざまなプロジェクトによるものです。これらのプロジェクトの1 つに Plug-in Development Environment (PDE) があります。皆さんが今までに Eclipse でプラグインを作成したことがあれば、すでに PDE を使用していることになります。PDE は、プラグインの作成、パッケージ化、および管理を支援する一連のツールです。

ここでは、PDE で提供されるテンプレート作成機能を重点的に扱います。Eclipse で初めてプラグインを作成しようとしたときのことを思い出してください。「新規プラグイン・プロジェクト(New Plug-in Project)」ウィザードを使用したはずです。

図 1. PDE プラグイン・ウィザード
図 1. PDE プラグイン・ウィザード

そして、初めてプラグインを作成していると、偶然、すばらしいものを発見したはずです。

図 2. PDE プラグイン・ウィザード・テンプレート
図 2. PDE プラグイン・ウィザード・テンプレート

それはテンプレートでした。PDE には、Eclipse のプラグインを作成するためのさまざまなテンプレートが用意されています。この記事の目的は、テンプレートを作成する方法について議論することです。エンド・ユーザーは、テンプレートを使用することで、拡張ポイントまたはコードを使用するときに必要な学習量を減らすことができます。


テンプレートを作成する

PDE 情報

PDE は、2 つのメイン・パーツで構成されています。それは、UI とビルドです。UI コンポーネントは、プラグイン開発時に表示されるすべてのウィザードとエディターなどに関与しています。また、UIコンポーネントには、この記事で説明しているテンプレート作成インフラストラクチャーも含まれます。ビルド・コンポーネントは、プラグインのビルドとパッケージ化を行います。

今回の目標

何かを学習するときに最善の方法は、単純ですばらしい例を使用することです。何を言っているのかというと、それがまさしくここで行おうとしていることなのです。つまり、これから単純なテンプレートを作成します。このテンプレートからは、極度に単純化されたビューが作成されます。これが今後テンプレートを作成する人にとって基礎となれば幸いです。

プラグインをセットアップする

最初に、プラグイン・プロジェクトを新たに作成します (「ファイル (File)」>「新規 (New)」>「プロジェクト (Project)」>「プラグイン・プロジェクト (Plug-inProject)」)。ここでは、テンプレートを使用します。プロジェクトが org.eclipse.pde.ui に依存していることを確認してください。そこまで済んだら、プラグイン・エディターの「拡張機能(Extensions)」タブを開いてテンプレートの作成を開始します。

テンプレート・ウィザード

PDE テンプレート

プラグイン・プロジェクト・ウィザードで使用されるテンプレートはすべて、PDE に含まれており、そのソースは、Eclipse のCVS リポジトリーから自由に入手できます。

今回のテンプレートの作成に使用する最も重要な拡張ポイントはorg.eclipse.pde.ui.pluginContentです。この拡張ポイントには、PDE プラグイン・プロジェクトの追加コンテンツを作成するためのウィザードで役立つ機能が備わっています。プラグイン・マニフェスト・ファイルと主要ファイルを作成した後に、そのウィザードを使用して、ファイルと拡張機能を初期構造に追加することができます。今回、このウィザードを実装することで、パラメーター化したテンプレートを基に、コンテンツが追加されます。このテンプレートは、ウィザードでユーザーが選択した内容に基づいてカスタマイズされます。それでは、この拡張ポイントから始めましょう。

図 3. サンプル拡張機能ページ
図 3. サンプル拡張機能ページ

図 3 では、ID (com.ibm.pde.simple.template.wizard)、名前 (Simple View Wizard)、アイコン、およびクラスの定義(下記のコードを参照) を指定してウィザードを新たに定義しています。 クラス定義の重要なメソッドは createTemplateSections() です。これは、コンテンツの作成が行われるテンプレート・セクションを返すときに使用されます。 次のセクションでは、テンプレート・ファイルを作成する方法と、テンプレート・ファイルの作成後にテンプレート・セクションに入っているものについて説明します。

リスト 1. SimpleViewTemplateWizard.java
package com.ibm.pde.simple.template;

import org.eclipse.pde.ui.IFieldData;
import org.eclipse.pde.ui.templates.ITemplateSection;
import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;

public class SimpleViewTemplateWizard extends NewPluginTemplateWizard {

protected IFieldData fData;

public void init(IFieldData data) {
super.init(data);
fData = data;
setWindowTitle("Simple View Wizard");      


public ITemplateSection[] createTemplateSections() {
return new ITemplateSection[] {new SimpleViewTemplateSection()};
}

}

テンプレート・ファイル

図 4. テンプレート・プロジェクト構造
図 4. テンプレート・プロジェクト構造

テンプレート内の条件付きロジック

テンプレート内をよく見ると、テンプレートに単純な条件付きロジックを指定できることがわかります。 テンプレート作成システムでは、ネストされた単純なif 文がサポートされています。 これは、ユーザー入力に基づいてテンプレートを柔軟に変更したい場合に便利です。

次に、コードの生成に使用できるテンプレートを作成します。それには、プロジェクトを正しくセットアップする必要があります。図 4 の templates_3.2フォルダーに注目してください。このフォルダーの名前は重要です。PDE では、この名前によって、このテンプレートを適用できる Eclipse のバージョンが識別されます。自分のテンプレートをV3.1で実行したい場合は、フォルダーの名前を templates_3.1 にします。このテンプレート・フォルダーのサブフォルダーは viewtemplateです。これは、テンプレートに関連付けたいファイルがグループ化されたもの (セクション) を表します。このフォルダーには、自由に名前を付けることができます。

セクション・フォルダーの中には、bin と java という 2 つのフォルダーがあります。この 2 つのフォルダーには、テンプレートの作成時にコピーされるファイルが入っています。javaフォルダーにあるファイルは、今回のビューを表すクラスであるため重要です。このファイルには $className$.java という名前が付けられており、テンプレート作成システムでは、変数$className$ を自動的にユーザーが希望する名前に置き換えます。

このクラス・ファイルの中でも、ユーザーがカスタマイズするための変数置換が使用されています。この変数置換の名前は自由に決めることができますが、それについては次のセクションで説明します。次のセクションでは、テンプレート・セクションを重点的に扱います。

リスト 2. $className$.java
package $packageName$;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.part.ViewPart;

public class $className$ extends ViewPart {
                 
                 public void createPartControl(Composite parent) {
                                 Label label = new Label(parent, SWT.CENTER);
                                 
%if importantMessage
                                 String message = new String("$message$!!!");
%else
                                 String message = new String("$message$");
%endif
                                 label.setText(message);
                 }
                 
                 public void setFocus() {}
                 
}

Tテンプレート・セクション

テンプレート・セクションとは、テンプレートへの入力を促す UI と制御ロジックを含む Java クラスのことです。テンプレート・セクションには、ITemplateSection インターフェースの実装が必要です。 PDE には、便利なように抽象クラス OptionTemplateSection が用意されており、このクラスを使用すれば、かなりの時間を節約できます。 テンプレート・セクションを使用すると、さまざまなことを実現できますが(練習として、組み込まれているコード・サンプルを調べてみてください)、ここでは最も重要なテンプレート・セクションに焦点を当てます。 まずは、addPages(...) メソッドでウィザード・ページを追加します。この単純なケースでは、最初のページに 1 ページのみを追加します。

Listing 3. SimpleViewTemplateSection.java
...
public void addPages(Wizard wizard) {
                 WizardPage page = createPage(0, IHelpContextIds.TEMPLATE_INTRO);
                 page.setTitle("Simple View Template");
                 page.setDescription("Creates a simple view");
                 wizard.addPage(page);
                 markPagesAdded();
}
...

次に、クライアントに UI を表示して、クライアントがテンプレートを使用できるようにします。それには、テンプレートで使用される変数を宣言し、addOption(...) メソッドを使用してオプションを追加します。今回のクラスでは、簡便メソッド createOptions() を使用します。これは、オプションを作成するために、コンストラクター内で呼び出されます。

Listing 4. SimpleViewTemplateSection.java
...
private static final String KEY_CLASS_NAME = "className";
private static final String KEY_VIEW_NAME = "viewName";
private static final String KEY_MESSAGE_NAME = "message";
private static final String KEY_IMP_MESSAGE_NAME = "importantMessage";
...
private void createOptions() {
                 addOption(KEY_CLASS_NAME, "Class Name ", "SimpleView", 0);
                 addOption(KEY_VIEW_NAME, "View Name", "SimpleView", 0);
                 addOption(KEY_MESSAGE_NAME, "Message", "Hello World", 0);
                 addOption(KEY_IMP_MESSAGE_NAME, "Important?", false, 0);
}
...
図 5. 単純なビューのオプションのウィザード・ページ
図 5. 単純なビューのオプションのウィザード・ページ

テンプレート作成システムには、オプションの追加を支援するメソッドがいくつか用意されています。 これらのメソッドがどのように実装されているのかをBaseOptionTemplateSection クラスで確認できます。 ただし、テンプレート作成システムが提供しているメソッドよりも柔軟なメソッドが必要な場合には、registerOption(...) メソッドを使用してみてください。 このメソッドを使用すると、独自のオプション・セットを作成できます。例えば、コンボ選択オプションが必要な場合は、ComboChoiceOption のインスタンスを作成し、 registerOption(...) メソッドを呼び出します。(オプションの説明については表 1 を参照してください。オプションの全種類を含んだ階層構造については、図 6 を参照してください。)

表 1. PDE テンプレート・オプション
オプション (クラス名)説明
BlankFieldテンプレート・セクション・ウィザード・ページでブランク・スペースを作成するために使用します。
StringOptionテンプレート・セクション・ウィザード・ページでユーザーからストリングを収集するために使用します。
BooleanOptionテンプレート・セクション・ウィザード・ページでユーザーからブール選択値を収集するために使用します。
RadioChoiceOptionテンプレート・セクション・ウィザード・ページでユーザーからラジオ・ボタン選択値のセットを収集するために使用します。
ComboChoiceOptionテンプレート・セクション・ウィザード・ページでユーザーからコンボ・ボックス選択値のセットを収集するために使用します。
ChoiceOption非推奨 -- RadioChoiceOption または ComboChoiceOption を使用してください。
図 6. オプションの階層
図 6. オプションの階層

最後に、関心のある拡張ポイントを作成し、そこにデータを追加しておくために、コードを作成します。今回の単純な例では、org.eclipse.ui.views 拡張ポイントのみを扱います。 PDE テンプレート作成システムでは、テンプレートの作成時に updateModel(...) メソッドが呼び出されます。 その際、あなたがテンプレート作成者としてここで拡張機能などを作成することが期待されます。 ちなみに、次のコード・リストでは拡張ポイントを1 つしか作成していませんが、複数の拡張ポイントを作成することもできます。

リスト 5. SimpleViewTemplateSection.java
...                              
protected void updateModel(IProgressMonitor monitor) throws CoreException {
         IPluginBase plugin = model.getPluginBase();
         IPluginModelFactory factory = model.getPluginFactory();
                 
         // org.eclipse.core.runtime.applications
         IPluginExtension extension = \
         createExtension("org.eclipse.ui.views", true);
         
         IPluginElement element = factory.createElement(extension);
         element.setName("view");
         element.setAttribute("id", getStringOption(KEY_CLASS_NAME));
         element.setAttribute("name", getStringOption(KEY_VIEW_NAME));
         element.setAttribute("icon", "icons/sample.gif");
         
         String fullClassName = 
                         getStringOption(KEY_PACKAGE_NAME)\
                         +"."+getStringOption(KEY_CLASS_NAME);
         
         element.setAttribute("class", fullClassName);
         extension.add(element);
         
         plugin.add(extension);
}                               
...

org.eclipse.pde.ui.templates

org.eclipse.pde.ui.templates 拡張ポイントは重要なので、まとめの前に少し説明します。 この拡張ポイントは、カスタム・プラグイン・ウィザードを作成する際の入り口となります。特定の拡張ポイントのテンプレートを作成する場合、org.eclipse.pde.ui.templates 拡張ポイントを拡張することをお勧めします。これにより、クライアントは、皆さんのテンプレートを他のテンプレートと組み合わせて使用できるようになります(図 7 を参照)。ここで使用している例では、 単に OptionTemplateSection 実装 (SimpleViewTemplateSection) を再利用することのみが可能です。ここで強く主張したいのは、カスタム拡張ポイントを作成する場合、ユーザーにテンプレートを提供すれば、ユーザーにとって有益であるということです。

初めて Eclipse を学び、ビューを作成しなければならなかったときのことを思い出してください。さまざまな動作を理解する上で、ビュー・テンプレートは非常に役立ったはずです。それと同じことをユーザーにしてあげてください。

リスト 6. plugin.xml"
<extension
         point="org.eclipse.pde.ui.templates">
      <template
            class="com.ibm.pde.simple.template.SimpleViewTemplateSection"
            contributingId="org.eclipse.ui.views"
            id="com.ibm.pde.simple.template"
            name="Simple View"/>
</extension>
図 7. カスタム・プラグイン・ウィザード
図 7. カスタム・プラグイン・ウィザード

まとめ

この大変な作業をすべて完了すると、プロジェクトを作成し、そのプロジェクトで単純なテンプレートを使用できるようになります。このプロジェクトをいったん作成してしまえば、簡単に、コードを参照したり、テンプレートの複雑さを理解したりできます。また、ランタイム・ワークベンチ環境を起動して、テンプレートの結果を参照することもできます。

図 8. 今回の単純なビュー
図 8. 今回の単純なビュー

今回の目標は、PDE のテンプレート作成システムを紹介することでした。ここでは、実践的な例を使用して、この目標を達成しました。 皆さんには、下のリストにある例をダウンロードして、その動作を確認することをお勧めします。ここではっきりしたと思いますが、PDEのテンプレート作成システムには、 自力でプロジェクトを素早く作成できる強力な方法がエンド・ユーザーに用意されていて、独自の拡張ポイントの実装例をエンド・ユーザーに示すことができます。PDE テンプレート作成システムのどこかに、何かが欠けていると感じた場合は、Bugzilla のエントリー・フォームからフィードバックを送ってください。 私たちは常に PDE を良いものにしようとしています。


ダウンロード

内容ファイル名サイズ
SimpleView Template Plug-inos-eclipse-pde.zip12KB

参考文献

学ぶために

製品や技術を入手するために

  • Eclipse プラットフォームをダウンロードして、直ちにEclipseを開始してください。
  • IBM alphaWorksclipse テクノロジーの最新ダウンロードを確認してください。
  • IBM 試用版ソフトウェアを使用して最新のオープン・ソース開発プロジェクトを導入してください。試用版ソフトウェアはダウンロードすることも DVD から入手することもできます。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source
ArticleID=247532
ArticleTitle=Eclipse Plug-in Development Environment を使ってテンプレートを作成する
publish-date=02062007