第2回 「Hello♪」を表示するだけのEclipseプラグイン


萩原 巧
リトルソフト株式会社
2006/8/4




 前回「仕事に役立つEclipseプラグインを使いたい」では、作成を行うプラグインの[プラグイン・プロジェクト]の作成や、[プラグイン・プロジェクト]の特徴について説明しました。今回は作成した[プラグイン・プロジェクト]に対して、処理を実装してプラグインを完成させます。最後に完成したプラグインの動作確認方法についても説明をします。

Eclipseの機能を拡張しよう

 プラグイン・プロジェクトを無事作成することができた田中君。長尾君はプラグイン・プロジェクトに対する設定について一歩ずつ丁寧に説明を行う。

田中君 「プラグイン・プロジェクトを作成したけど、次に行う作業は? 早速、ソースコードを書くの?」
長尾君 「もちろんソースコードを書くことも行うけど、その前に、Eclipseに対して『この機能を追加(拡張)しますよ』」ということの設定を行わなければならないんだ」
田中君 「考えてみれば当然かな、ソースだけ書いてもそれをEclipseに伝えられないよね」
長尾君 「その設定の方法だけど、さっき作ったプラグイン・プロジェクトの構成ファイルに[MANIFEST.MF]があるよね。それをダブルクリックしてみて。そうすると、プラグインの編集画面が表示されるんだ」

プラグインの編集画面 概要タブ

長尾君 「この設定画面には[概要]タブをはじめとするさまざまなタブがあって、タブにはそれぞれ重要な役目があるのだけど、いまのところは[拡張]タブと[依存関係]タブに着目してほしいな。まずは[拡張]タブを開いてみて」
田中君 「[拡張]タブだね」

拡張タブ

田中君 「開いたよ、この[拡張]タブではどのような設定を行うのかな?」
長尾君 「言葉のとおり、Eclipse機能の拡張を行う設定を行うのだよ。このタブはプラグイン開発でとても重要な役割を担っているんだ」
田中君 「……あまりピンと来ないけど、Eclipse機能の拡張って具体的にはどのようなことなの?」
長尾君 「とても重要なことなんだけど、プラグインを作成するということは、Eclipse機能の拡張を行っていると言い換えることができるんだ」


長尾君 「この画面を見て。今回作成する部分に赤で丸を付けているけど、このツールバーの部分は完全にEclipseに統合されているよね。このように、プラグインを作ることによって、Eclipseに新たな機能(この場合はツールバーにボタンを設定した)を追加できるんだ。じゃあ、この機能をどこで追加するのかというと、[拡張]タブで行うわけなんだ」
田中君 「そっか、Eclipseに機能を追加したい場合(プラグインを作成する場合)は[拡張]タブに対して設定を行うのだね。具体的にはどのように行うのかな?」
長尾君 「[拡張]タブの[追加]ボタンをクリックすると表示される[新規拡張]ダイアログで使用する[拡張ポイント]を指定するんだ」

新規拡張ダイアログ

コラム 拡張ポイントとは
拡張ポイントとはプラグインを作成するために、Eclipseによってあらかじめ用意されたインターフェイスやクラスを指します。
これらインターフェイスの実装およびクラスの継承をしたクラスを作成することによってプラグインの実装を行います。

田中君 「あれ? でも、拡張ポイントの欄に何も表示されないけど、これってどうするのかな?」
長尾君 「いまはこの状態でいいんだ。いったん、新規拡張ダイアログを閉じてから、プラグイン編集画面から、[依存関係]タブを開いてみよう」

依存関係タブ

長尾君 「このタブでは、[作成するプラグインが必要とするプラグイン(※)]の指定を行うんだ。さっきもいったけど、[Eclipse機能の拡張を行うことでプラグインが作成される]ので、その拡張元となるEclipseの機能を依存関係として設定するんだ」
長尾君 「[必須プラグイン]欄の[追加]ボタンをクリックすると、[プラグインの選択]ダイアログが表示されるから、このリストの中からプラグインを選択しよう。[org.eclipse.ui]は、Eclipseのツールバーに対して機能を追加することのできるプラグインなんだ」

プラグインの選択ダイアログ

コラム プラグインの選択
プラグインの選択ダイアログには、さまざまなプラグインが選択可能であるので、初めてプラグインを作成する方にとっては、大いに悩むところの一つになります。
「必要となるプラグインが分からない!」ということはよくあります。
解決方法としては、機能ごとに必要となるプラグインの一覧は、Eclipseの[ようこそ] ― [ヘルプ目次]メニューから表示されるEclipseオンラインヘルプの[Platformプラグイン・デベロッパー・ガイド]から[Eclipse プラットフォームプラットフォーム・プラグイン・マップ]をご覧ください。このマップには、必要となるプラグインの大まかな表が示されています。
なお、プラグイン[org.eclipse.ui]には、Eclipseで基本となるコンポーネントが定義されています。

長尾君 「プラグインの選択をしたら再度[拡張]タブに戻って、タブ内の[追加]ボタンをクリックして[新規拡張]ダイアログを表示させてみよう」

新規拡張ダイアログ(プラグイン[org.eclipse.ui]追加後)

田中君 「ダイアログにたくさんの[拡張ポイント]が表示されたね」
長尾君 「この拡張ポイントに対して機能を拡張するんだ。今回作成するプラグインは、Eclipseのツールバーにボタンを表示するけど、Eclipseのツールバーにボタンを追加するためには、[org.eclipse.ui.actionSets]と呼ばれる拡張ポイントを指定する必要があるんだ」

コラム 拡張ポイントの選択
拡張ポイントの選択は、コラム1で説明したプラグインの選択同様、プラグイン開発では分かりづらい部分の一つだと思います。
プラグインの選択と同じく、拡張ポイントはとても多く存在しているので、すべてを覚えるのはほぼ不可能といってもよいです。
必要となる拡張ポイントの設定は、Eclipseオンラインヘルプに記載されています。その中でも、Eclipseのメニューやポップアップメニューに関する拡張ポイントについては、[Platformプラグイン・デベロッパー・ガイド]から[拡張ワークベンチの概念]→[ ワークベンチ・メニューの組み込み]をご覧ください。

[org.eclipse.ui.actionSets]を追加後

田中君 「[すべての拡張]欄に[org.eclipse.ui.actionSets]が追加されたね」
長尾君 「ここまでの作業でactionSetsを使ったプラグインの前準備は終わったよ。でも、これだけでは、Eclipseには設定した拡張ポイントを使うことを指定しただけだから、プラグインとしてはまだ動かないの。だから、実際のEclipseにアクションを設定する必要があるんだ」
田中君 「この作業でプラグインの骨格を作るんだね」
長尾君 「追加した拡張ポイント[org.eclipse.ui.actionSets]を右クリックして表示されるポップアップメニューから、[新規]→[actionSet]と選択してアクション・セットを追加しよう」

actionSetの追加

長尾君 「アクション・セット[HelloPlugin.actionSet1]が追加されたら、続いて、右クリックして表示されるポップアップメニューから、[新規]→[action]を選択してアクションを追加しよう」

actionの追加

長尾君 「アクション[HelloPlugin.action1]が追加されたね、このアクションに対して、アイコンの設定や実装を行うJavaクラスの設定を行うんだ」

actionの追加後

長尾君 「アクション[HelloPlugin.action1]にはたくさんの設定要素(プロパティ)があるのだけど、いまの時点では必要な部分の設定のみ教えるよ」

[HelloPlugin.action1]のプロパティ設定

プロパティ名称 内容
Id (※) このアクションに対するプラグインで一意の値を設定します。 一般的には[プラグインID.アクション名]で表します。
label(※) Eclipse上に表示されるラベルを設定します。アクションでは、プロパティ[icon]を設定した場合、labelの値は表示されません。
toolbarPath ツールバーに設定するためのパスです。Eclipseのヘルプによると値は自由に設定できるので、ここでは[プラグインID.アクション名]と設定します。
icon メニューバーに表示させるアイコンです。Eclipseのプロジェクトパスからの相対パスで設定します。
今回は赤丸のアイコン[]を設定します。なお、透過gifの設定も可能です。
style メニューバーに表示するスタイルです。ここでは[push]を選択します。
class アクションが実行されたときに動作するJava実装クラスを指定します。詳しくは後述します。

コラム 拡張ポイントの設定要素(プロパティ)について
アクション・セットをはじめとする拡張ポイントには、上記で説明したほかにも数多くの設定要素があります。
今回定義した拡張ポイント[org.eclipse.ui.actionSet]やその他拡張ポイントの設定要素についての詳細は、Eclipseのオンラインヘルプの[Platformプラグイン・デベロッパー・ガイド]→[解説]→[拡張ポイント参照]をご覧ください。

田中君 「プロパティをいろいろ設定したけど、このアクションに対する動作はどうやって設定するのかな?」
長尾君 「田中君鋭いね、確かにアクションの設定を行ったけど、そのアクションに対する動作の定義をしていないよね。だから最後に、アクションが実行されたときに動作するJava実装クラスを設定しよう。[HelloPlugin.action1]のプロパティ設定画面の[class]のリンクをクリックしてみよう」

実装クラスの設定画面

田中君 「いつものJavaクラス設定画面が表示されたね」
長尾君 「この画面から実装するJavaクラスを定義するんだ。以下のように定義しよう」

項目 内容
パッケージ プラグイン開発でも、機能ごとにパッケージングを行うのが一般的です。
アクションのパッケージは一般的に、[プラグイン名称].actionsと定義します。
今回は[helloPlugin.actions]とします。
名前(クラス名) アクションのクラス名は、一般的に[機能]+Actionと命名します。
今回は[HelloPluginAction]とします。

田中君 「見慣れないインターフェイスが設定されているんだけど、これは何かな?」
長尾君 「これは、設定したアクション[HelloPlugin.action1]を実行するときに必要な抽象メソッドが定義されているインターフェイスなんだ、意味については実際ソースをコーディングするときに説明するよ」
長尾君 「これですべての準備はできたよ、最後に、生成された定義ファイルを確認しよう、[plugin.xml]タブを開いてみて」

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin>
    <extension
        point="org.eclipse.ui.actionSets">
      <actionSet
            id="HelloPlugin.actionSet1"
            label="HelloPlugin.actionSet1"
            visible="true">
        <action
                class="helloPlugin.actions.HelloPluginAction"
                icon="icons/hello.gif"
                id="HelloPlugin.action1"
                label="HelloPlugin.action1"
                style="push"
                toolbarPath="HelloPlugin.action1"/>
      </actionSet>
    </extension>
</plugin>

長尾君 「[plugin.xml] には、[依存関係]タブや[拡張]タブで設定を行った内容が、xml形式で保存されるんだ。逆にいえば、[plugin.xml]を直接編集すれば[依存関係]タブや[拡張]タブに対して反映もされるんだよ。このファイルは[ProjectRoot]に作成されるよ」
長尾君 「ここまで、プラグインの定義について説明したけど、この後はいよいよ機能の実装に入るよ」
田中君 「いよいよだね、どんな実装をするのかな?長尾君この調子でよろしくね」

 さて、いよいよ田中君はプラグインの実装を経験することになる。

1/3

Index
第2回 「Hello♪」を表示するだけのEclipseプラグイン
Page1
Eclipseの機能を拡張しよう
  Page2
Helloプラグインを実装しよう
  Page3
Helloプラグインの動作確認をしよう



Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間