見出しレベルの順序:■→●→□→○
[[FrontPage]]


表題:
Webサービスを利用したEclipseプラグインの作成

概略:
Eclipseプラグイン開発の基本的な流れを、Google Web APIsを用いたプラグインの作成を通じて紹介します。

■はじめに
Eclipseにはいろいろ便利なプラグインがあり、Javaの開発環境として非常に普及していますが、そのプラグイン自体の開発方法はまだ書籍も少なく、ネットにも情報が少ないのが現状だと思います。そこで本稿では、Eclipse上で「Web Services経由でGoogle検索を行うプラグイン」の作成を通じて、Eclipseプラグイン開発の基本的な流れを紹介したいと思います。



■対象読者
・Eclipseプラグインの開発に興味がある方


■必要な環境
今回は以下の環境で開発・確認を行っています。
・OSはWindows XP Home SP2
・プラグインの開発環境としてEclipse3.1.2
・Javaのランタイム環境としてはJRE1.5.0_06
・デバッグログの制御としては[Log4j[http://logging.apache.org/log4j/docs/]]を使用しています。
・Web Servicesのランタイムライブラリとして[Apache Axis[http://ws.apache.org/axis/]]を使用しています。
・また、今回作成するプラグインはGoogle Web APIsを使用します。[Google SOAP Search API (beta)[http://www.google.com/apis/index.html]]にアクセスしGoogle Web APIs Developer's Kitのダウンロードと、検索時に必要になるキーコードを取得しておいてください。このGoogle Web APIs Developer's KitにはGoogle Web APIsのライブラリとwsdlファイルが格納されています。




■今回作成するプラグインの概要
今回作成するGoogleプラグインの概要はおおむね下の通りです。
・Eclipseでコーディング中にエディタ上のテキストを選択して、エディタのポップアップメニューからGoogle Web APIsを呼び出し、Google検索をすることができます。
・検索結果一覧から、ダブルクリックやポップアップメニューでOSのWEBブラウザを起動し、選択したサイトを表示することができます。
・検索結果一覧から、デスクトップなどへドラッグ&ドロップでURLショートカットを作ることができます。
・プラグインは全てEclipse3.1系向けに作成しています。


@@スクリーンショット[screenshot.gif]@@



■プラグインの構成
今回作成するGoogleプラグインは以下のようなプラグインで構成されています。

nu.mine.kino.plugin.axis
Web Services経由でGoogle検索を行うため、Web Servicesのランタイム環境が必要です。このプラグインはApache Axisのライブラリを格納しているプラグインです。

nu.mine.kino.plugin.log4j
作成するプラグインは、デバッグログなどをすべてLog4jを用いています。このプラグインはLog4jのライブラリを格納しているのに加え、設定ファイルを選択するなどの設定ページを実装してあります。


nu.mine.kino.plugin.google.core
Googe Web APIsを使用してGoogle検索を行うビジネスロジックを実装するプラグインです。GUIに関係しないコアな機能を提供します。

nu.mine.kino.plugin.google.ui
上のコアプラグインを用いたGUIを提供するプラグインです。


上のプラグインのうち、nu.mine.kino.plugin.log4j,nu.mine.kino.plugin.axisに関してはライブラリ的な扱いなので、詳細は割愛させていただきます。詳細はソースコードをご参照ください。


またGoogle Web APIs Developer's KitにはすでにWeb Services Proxyが同梱されていますが、今回はお勉強をかねてwsdlファイルからWeb Services Proxyを自動生成してみました。詳細は割愛させていただきますがAxisのライブラリにクラスパスを通して
 java org.apache.axis.wsdl.WSDL2Java -p nu.mine.kino.googleapis GoogleSearch.wsdl
とすることでProxyのJavaソースを作成する事ができます。今回はこのProxyを使ってGoogle検索を行いたいと思います。


■まずはCoreをつくる
まずはGUIに関係のない、Coreのプラグインを作ります。Eclipseのウィザードでプラグイン開発を選択します。プラグイン・プロジェクトのページ
「プロジェクト名」は nu.mine.kino.plugin.google.core
「プラグインのフォーマット」はバージョンを3.1
「OSGiバンドル・マニフェストを作成」にチェックを入れます。

プラグイン・コンテンツのページ
プラグインのプロパティはそのまま、
プラグイン・クラスは「プラグインのライフ・サイクルを制御するJavaクラスを作成」はチェック、「UIに追加」はチェックを外します。リッチ・クライアント・アプリケーションについてはいいえを選択します。


終了をクリックします。以上でプラグインのプロジェクトが作成できました。


必要なビジネスロジックはGoogleの検索機能を呼び出す事ですが、Google Web APIsはスペルチェックを行う便利な機能があるので、
・指定した文字列に対して、スペルチェックを行い、候補の文字列を返してくれるメソッドgetSplellingSuggestion
・指定した文字列を用いて、Google検索を行うメソッドsearch
を実装したいと思います。インタフェースは以下のようにしました。

・public String getSplellingSuggestion(String myGoogleKey, String text) 
・public GoogleSearchResult search(String myGoogleKey, String searchText)

このメソッドをプラグインクラスnu.mine.kino.plugin.google.core.GoogleCorePluginに実装します。

各メソッドの実装は以下の通りです。
[s:java;各メソッドの実装のソース]
   /**
     * 引数の文字列でGoogle検索を行います。エラーが発生した場合nullが返るか、例外を投げます。
     * 
     * @param myGoogleKey Googleのキー
     * @param searchText 検索文字列
     * @return GoogleSearchResult
     * @throws CoreException 何らかのエラーが発生したとき。
     */
    public GoogleSearchResult search(String myGoogleKey, String searchText)
            throws CoreException {
        logger.debug("search(String) - start");
        GoogleSearchResult result = null;
        if (googleSearch != null) {
            try {
                result = googleSearch.doGoogleSearch(myGoogleKey, searchText,
                        0, 10, false, "", false, "lang_ja", "", "");
            } catch (RemoteException e) {
                logger.error(e);
                log(e);
                IStatus status = new Status(IStatus.ERROR, getPluginId(),
                        IStatus.ERROR, e.toString(), e);
                throw new CoreException(status);
            }
        }
        logger.debug("search(String) - end");
        return result;
    }
[/s]

[s:java;各メソッドの実装のソース]
    /**
     * 引数の文字列にスペルミスがないかをチェックするメソッドです。 
     * スペルミスがある場合、候補を返します。スペルミスがない場合、nullが返ります。
     * 
     * @param myGoogleKey
     * @param text
     * @return
     */
    public String getSplellingSuggestion(String myGoogleKey, String text) {
        logger.debug("getSplellingSuggestion(String, String) - start");

        String suggestionText = null;
        try {
            suggestionText = googleSearch.doSpellingSuggestion(myGoogleKey,
                    text);
        } catch (Exception e) {
            // 文字によっては例外が発生するので、その場合は
            // とりあえず候補がなかったことにして通り過ぎちゃう
            logger.warn(e);
            logger.warn("スペルミス補正でエラーが発生しました。");
        }

        logger.debug("getSplellingSuggestion(String, String) - end");
        return suggestionText;
    }
[/s]


■テストプラグインの作成
さて、作成したプラグインのメソッドをテストして今回は終わりにしようと思います。まずはテスト用のプラグイン・プロジェクトを作成します。

プロジェクト名:nu.mine.kino.plugin.google.core.test

テスト用プラグインには、テスト対象のプラグインnu.mine.kino.plugin.google.coreとorg.junitを依存プラグインに追加しておきます。


●nu.mine.kino.plugin.google.core.testのMANIFEST.MF
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Test プラグイン
Bundle-SymbolicName: nu.mine.kino.plugin.google.core.test
Bundle-Version: 1.0.0
Bundle-Activator: nu.mine.kino.plugin.google.core.test.TestPlugin
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime,
 nu.mine.kino.plugin.google.core,
 org.junit
Eclipse-AutoStart: true



メソッドを実装したクラスnu.mine.kino.plugin.google.core.GoogleCorePluginをパッケージ・エクスプローラで右クリックし、新規>>その他を選択しウィザードを開きます。ウィザードでJUnitテスト・ケースを選択します。junit.jarをビルドパスに追加するかをEclipseが聞いてきますが、テストクラスはテスト用プラグインに配置するので、いいえを選択します。つづいてテストクラスを作成するダイアログが開くので、ソース・フォルダをnu.mine.kino.plugin.google.core.test/sourceに変更します。


がそう


次へをクリックするとテストメソッドの追加画面になりますが、先のメソッド
 getSplellingSuggestion(String myGoogleKey, String text) 
 search(String myGoogleKey, String searchText)
にチェックして終了をクリックします。


がそう


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS