第10回 辞書検索プラグインを作る
的場聡弘(NTTデータ ビジネス開発事業本部)
岡本隆史(NTTデータ 技術開発本部)
2004/8/14
第8回「Eclipseプラグインを作る(1)」、第9回「Eclipseプラグインを作る(2)」の記事で、プラグインの作り方のおおよそをご理解いただけたことと思います。今回は、プラットフォームAPIなども使いながら、Eclipse開発環境と関連しながら動作するプラグインを作っていく様子をより詳細にご紹介します。
今回作成するプラグインは、辞書を検索するプラグインです。Javaアプリケーションを開発するに当たっては、国際化プロパティファイルを作成するときなどのような、しばしば辞書を検索したい場面がありますが、このプラグインを使えば、文字列を選択して、そのまま辞書を引くといったような、シームレスな作業が可能になることが期待できます。
なお、本稿の解説は前回と同様にEclipseのヘルプを参照しながら話を進めていきます。Eclipseには、ヘルプ・サーバという内部サーバ機能が用意されており、Webブラウザからヘルプページを参照することができます。ヘルプ・サーバを利用するためには[ウィンドウ]→[設定]の[ヘルプ]→[ヘルプ・サーバ]設定画面で、[listenするサーバのポート]に“12080”を設定してOKをクリックした後、[ヘルプ]メニューから[ヘルプ目次]を実行して、ヘルプサーバを起動しておいてください。記事中のリンクをクリックするとヘルプページを参照できるようになります(ヘルプ・サーバで参照できる記事中のリンクは< >で囲われています)。
|
郵便番号を引くプラグインを作成する |
まずは、第6回「Eclipseをプロファイラとして活用する」で利用した、郵便番号を引くZipCode.javaというプログラムを実行するプラグインを作成することから始めましょう。
入力領域と結果領域を持つビューを作成し、入力領域に何か入力されたら、辞書を検索して結果を表示するプラグインを作成します。前回の記事を参考に、“org.ocharake.matobaa.dictionary”というIDのプラグインプロジェクトを作成し、ビューを拡張して、createPartControl()を実装してみました。
実際にZipCode#searchByZip()を呼び出すロジックをどのクラスに置くべきか一瞬悩みますが、取りあえずViewPart1に実装してしまいます。不似合いだったら後でリファクタリングすることにしましょう。
![]() |
| 郵便番号辞書を検索している様子 |
入力領域にSWTのModifyListenerを登録し、ModifyTextイベントを拾って検索を行い、結果を表示するようにします。実装は以下のようになります。
package org.ocharake.matobaa.dictionary; |
|
拡張ポイントを定義する |
プラットフォームが拡張ポイントを提供しているのと同じように、プラグインも、ほかのプラグインによって拡張することのできる拡張ポイントを定義することができます。この仕組みを用いて、検索したい辞書と、その辞書フォーマットを解釈できる検索エンジンをプラグインできるような拡張ポイントを定義し、別の辞書を利用できるようにしましょう。
![]() |
| 拡張ポイントを持つプラグイン |
そのためにはまず、共通的なインターフェイスを作成することから始めます。辞書を検索するために、以下のようなインターフェイスを作成してみました。
package org.ocharake.matobaa.dictionary; |
次に、拡張ポイントを定義します。この拡張ポイントでは、上記インターフェイスを実装したクラスを指定するように定義しましょう。これには、拡張ポイントを定義し、そのスキーマを作成する、という手順を踏みます。では、実際に拡張ポイントを定義しましょう。plugin.xmlを編集するマニフェストエディターで、[拡張ポイント]タブを開き[追加]ボタンを押します。「拡張ポイントID」に、「externalDictionary」と入力して[終了]をクリックすると拡張ポイント定義が作成され、同時にスキーマファイルが作成されて[スキーマ・エディター]が開きます。
次に、スキーマを作成します。[新規エレメント]をクリックし、作成された[new_element1]を選択してプロパティビューでNameを「dictionary」のように修正します。
そして、dictionaryエレメントを選択した状態で、[新規属性]をクリックすると、「new_attribute1」が追加されるので、このプロパティを、以下の画面のように修正します。
最後に、そのツリーの一番頭にある extensionエレメントを選択し、右側にある「エレメント規則」の Sequence を右クリックし、「新規」「参照」「dictionary」と追加して、この拡張ポイントのスキーマが完成です。
![]() |
| classのプロパティと、extension のエレメント規則 |
■作成した拡張ポイントを拡張する
それでは、前回と同じ要領で、この拡張ポイントを利用する拡張を作成していきましょう。マニフェストエディターの[拡張]タブで[追加]し、[スキーマ・ベースの拡張]を選択すると、拡張ポイント一覧に、いま定義した「org.ocharake.matobaa.dictionary.externalDictionary」がありますので、これを選択し、追加した拡張を右クリックして[新規][dictionary]のように追加し、class属性の右端のボタンを押して「新規Javaクラスの作成」を作成します。作成されたスケルトンを基に、ZipCode#zipCodeString() を呼び出すよう実装しましょう。ZipCodeDictionary.javaに実装例を置いておきます。
■プラグインレジストリを検索する
さて、拡張ポイントを提供している側は、どのようなプラグインがインストールされているかを知り、それを呼び出す必要があります。これには、プラグインレジストリを検索する、という実装を行います。<ヘルプ>にそのやり方が書いてあるので、同じように実装してみましょう。
protected IDictionary[] searchExtentions() { |
後は、ViewPart1#modifyText()などから、このメソッドを利用して検索したプラグインのquery(String)を呼び出してやればよいですね。
PDIC形式、PDICテキスト形式、電子ブック形式を検索できるプラグインをそれぞれ登録し、英辞郎、gene95、三省堂ビジネスマン英和辞典を検索してみました。
![]() |
| 英辞郎、Gene95、三省堂ビジネスマン英和辞典を引いてみた |
|
プラットフォームとの連携 − 選択文字列を検索する |
辞書ビューにフォーカスが移ったときに、直前にアクティブだったエディタの選択文字列を拾って自動的に検索できるようにしてみましょう。これには、アクティブなエディタを取得して、そのエディタで選択されている文字列を取得する、という実装を行う必要があります。
こういった、パッケージやファイル、エディタやビューの情報を取得するには、EclipseプラットフォームAPIを使って実現します。<用語>と、APIドキュメントを探検してみましょう。
|
これらのEclipse APIを使って、以下のように選択文字列を取り出せるよう、以下のように実装してみました。
public void setFocus() { |
実行すると、Javaのソースエディターやプロパティエディタで文字列を選択した状態で、辞書ビューをクリックすることで、自動的にその文字列を取り込んで辞書検索するように動作することが確認できます。
この記事で作成しているプラグインはまだまだ中途半端な状態ですが、SourceForge.jpでこの後も継続して開発を進めていく予定です。
Eclipseに同梱されているヘルプは、プラグイン作成に当たって非常に参考になります。サンプルプラグインや、ウィザードによって自動生成されたソースを眺めるのもよいでしょう。
参考になるWebサイトを以下にご紹介しておきます。日本語のリソースも徐々に増えてきました。これからが非常に楽しみです。
|
まとめ − プラグインの開発とは? |
ちょっとした工夫を付け加えるだけで、自分の手になじんだ開発環境が、もっと便利なものになります。「一流の職人は、道具は自分で作る」。この快感を味わうことができるのも、Eclipseプラグイン作成のだいご味ではないでしょうか。
Eclipseという素晴らしい環境をIBMが私たちに与えてくれたように、便利なプラグインを作ったら、オープンソースライセンスで公開し、コミュニティに還元するのがよいでしょう。
本連載「連載:Eclipse徹底活用」は今回で最終回となります。「連載:Eclipseを使おう!」も含めると、Eclipseの導入から始まり、プラグインを利用したいろいろなパターンの開発を行い、最後には自分でプラグインを開発するところまでご紹介してきました。Eclipseの爆発的な普及に伴い、本連載もたくさんの方に読んでいただくことができました。
連載当初は、「Eclipseなんて便利なIDEがあるんだ。へぇ〜」という読者が多かったのですが、いまではJava標準の開発プラットフォームになりつつあります。本連載の筆者一同、あらためて時代の移り変わりの速さに驚いています。
Eclipseを公開してくれたIBMをはじめ、有用なプラグインをリリースされているプラグインデベロッパの方々、Eclipse-MLやWikiサイト「エクリプス」などのコミュニティの皆さんには、筆者自身も大変お世話になりました。併せて、本連載をお読みいただいた読者の皆さまに、感謝します。
機会がありましたら、またお目にかかりたいと思います。また、同じ技術者同士として、コミュニティで一緒に活動する仲間としても、お会いできることを楽しみにしています。
Eclipse徹底活用 バックナンバー
| 関連記事 INDEX | |
| 連載 Eclipseを使おう! | |
| 第1回 オープンソースのEclipseは仕事に使える開発環境 | |
| 第2回 Eclipseの統合開発環境を使いこなす | |
| 第3回 EclipseでTomcatを使ったJ2EE開発を行う | |
| 「Eclipse徹底活用」 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




