Eclipseプラグイン実践テクニック(6)
拡張ポイントを作成してレッツ、コントリビュート!
NTTデータ先端技術 竹添直樹
NTTデータ 基盤システム事業本部 岡本隆史
2007/2/13
今回の主な内容 |
以前の連載「作って覚えるEclipseプラグイン」から足かけ1年半にわたってEclipseプラグイン開発のさまざまなトピックを取り上げてきた本連載ですが、いよいよ今回で最終回となります。
これまでは主に、「ほかのプラグインによって提供されている拡張ポイントを使用する」方法について説明してきたわけですが、今回は「自分のプラグインを拡張ポイントによって拡張できるようにする」方法について解説したいと思います。
編集部注:拡張ポイントそのものについて詳しく知りたい読者は、「Hello♪」を表示するだけのEclipseプラグインのコラム「拡張ポイントとは」をご参照ください。
拡張ポイントで「Hello, World!!」
■まずは、拡張ポイントを追加する
拡張ポイントはマニフェスト・エディタの「拡張ポイント」タブで作成できます。
図1 拡張ポイントの追加 |
「追加」ボタンをクリックすると拡張ポイントを追加するためのダイアログが開くので、拡張ポイントIDと拡張ポイント名を入力します。「プラグインのID.ここで入力した拡張ポイントID」が実際の拡張ポイントのIDになります(例として、ここでは「[jp.sf.amateras.extension].[hello]」となります)。
拡張ポイントを追加すると、schemaフォルダ内にexsdという拡張子を持つスキーマファイルが作成され、以下の図2のような拡張ポイント・スキーマ・エディタが開きます。拡張ポイントのスキーマはXMLスキーマのサブセットで定義するのですが、このエディタによってグラフィカルにスキーマを編集できます。
図2 拡張ポイント・スキーマ・エディタ |
■拡張ポイントのスキーマ定義はどうなっているか?
まずは簡単な例として、メッセージをコントリビュートすると、その文字列をダイアログで表示する、という簡単な拡張ポイントを考えてみます。
リスト1 シンプルな拡張ポイント |
<extension point="jp.sf.amateras.extension.hello"> |
図3 コントリビュートされたメッセージを表示 |
拡張ポイントのスキーマは「定義」タブで編集できます。以下のようにhello要素と、message属性を追加します。またmessage属性はrequiredにしておきましょう。
図4 hello要素とmessage属性を追加 |
次に、extension要素を右クリックし「新規」→「コンポジター」→「sequence」を選択し、シーケンスを追加します。さらに、追加したシーケンスを右クリックし、「新規」→「参照」→「hello」で先ほど作成したhello要素への参照を追加します。
hello要素は任意の数を記述できるようにしたいので、最大発生数のアンバウンドにチェックを入れておきましょう。これでextension要素の配下にhello要素を記述できるようになります。
図5 シーケンスを追加 |
このときのexsd ファイルのスキーマ定義は以下のようになります(実際のexsdファイルには、このほかにも拡張ポイント・スキーマ・エディタで入力したドキュメンテーションが含まれます)。
リスト2 hello.exsd |
<?xml version='1.0' encoding='UTF-8'?> |
■コントリビュートされた内容を読み取る
次に、拡張ポイントでコントリビュートされた内容を読み取って処理を行う部分を実装します。コントリビュートされた拡張情報はorg.eclipse.core.runtime.Platformから取得できるIExtensionRegistryを使用することで読み込めます。今回は以下のようにアクションで読み込むようにしてみます。
リスト3 コントリビュートされた拡張を読み込む |
public class SampleAction |
実際には、プラグインの各機能の実装コードで直接拡張を読み取るのではなく、拡張情報読み込み用のクラスを用意するなどして1カ所にまとめておくとよいでしょう。
1/2 |
INDEX | ||
第6回 拡張ポイントを作成してレッツ、コントリビュート! | ||
Page1 拡張ポイントで「Hello, World!!」 まずは、拡張ポイントを追加する 拡張ポイントのスキーマ定義はどうなっているか? コントリビュートされた内容を読み取る |
||
Page2 Javaオブジェクトをコントリビュートするには? プラグイン内のリソースもコントリビュートできる 最後に…「Eclipse開発の効率をアップするために」 |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|