| Eclipse Corner Article |

Summary
この Tutorial では EclipseCon 2005 で行われた Tutorial をサマリで Part 1, Part 2 に分けて紹介します。Part 1 ではとってもシンプルなアプリケーションを開発し、配布して動作を確認しました。今回はさらに別のアプリケーションを作成してヘルプの追加と更新の仕組みを追ってみます。
※ このコンテンツは EclipseCon 2005 で行われた Tutorial 08: Developing Eclipse Rich Client Applications のテキストを翻訳したものです。原本の著作権は次のとおりです: copyright 2005 by Frank Gerhardt, Christian Wege; made available under the EPL v1.0
By Toru Kawashima, NTT COMWARE CO.
2005 / 4 / 25
Part 1 では、Hello RCP アプリケーションの作成と構造の確認、さらに配布することによって、IDE としての Eclipse ではなく、アプリケーションとしての Eclipse を体験していただけたと思います。
今回は、少々複雑なメールアプリケーションを作成し(といっても template を利用しますが)、ヘルプシステムを追加します。さらに branding を加味した feature を追加します。そして、前回と同様に配布のためにアプリケーションをパッケージングします。さらに、アップデートサイトやアップデートマネージャを利用してどのようにアップデートするかを紹介します。
今回も、Eclipse に同梱されている template を利用します。この template は Eclipse のコンポーネントを追加したり、開発の Step をデモンストレーションするのに非常に役に立ちます。
前回までで、もっともシンプルなリッチクライアントアプリケーションが作成できました。次はもう少し複雑なものにチャレンジしてみましょう。
rcpmail
を作成してみましょう
生成されたアプリケーションを見てみましょう。
起動した画面はさきほどの rcpdemo とは違っています。この画面は Plug-in Manifest Editor によって branding されたプロダクトになっています。
Plug-in Manifest Editor の "extention" タブの
org.eclipse.core.runtime.product
を見てみましょう。そこでは、ウィンドウイメージやダイアログイメージ、アバウトダイアログテキストが定義されています。さらにスタートアップで起動するプロダクトも定義されています。
パースペクティブクラスには、閉じることのできないツリーナビゲータとひとつの閉じることのできるスタックビューが加えられています。さらに、追加されたUI要素(サイズなど)のプロパティも定義されています。
メニューから "about dialog" を開いてみましょう。feature 表示のない、標準的なダイアログが出てきます。RCP はアップデートマネージャを持っていないので、"features" に関する表記を持っていません。ですので、ここには表示されないのです。
この "about dialog" を開くという行為は Action なので、ActionBuilder
クラスによって追加されます。このダイアログアクションはApplicationActionBarAdvisor クラスの中の
Eclipse の ActionFactory によって生成されます。
aboutAction = ActionFactory.ABOUT.create(window); register(aboutAction);
ヘルプシステムは RCP にオプションとして追加できます。それでは rcpmail にヘルプを追加するステップを追ってみましょう。
ヘルプを作成するために、ヘルプコンテンツを含むヘルププラグインを作成します。
Helpプラグインを作成してみましょう
ヘルププラグインをテストするために、Eclipse に同梱されているヘルプシステムとコンテンツを利用し、ヘルププラグインにそのコンテンツを表示させます。rcpmail はまだヘルプシステムを持っていませんので、まずは Eclipse 上でヘルプシステムが動作することを確認します。
ヘルプを起動してみましょう
rcpmail にヘルプを追加するために、メニューとメニューから起動されるアクションとヘルプシステムそのものを追加します。一般に、Eclipse はUI を追加するための2つの方法を提供しています。Java で自分で記述する方法と、拡張ポイントを利用する方法です。ここでは、最初の方法を使います。2つ目の方法は後ほど紹介します。
生成した rcpmail はすでにいくつかのメニューとアクションが設定されています。これらが定義されている
ApplicationActionBarAdvisor クラス上の定義を拡張してみましょう。
ここからの手順をおってヘルプメニューを追加してみましょう
まず、属性を追加します。
private IWorkbenchAction helpAciton;
次に、ユーザがメニューからヘルプを起動したときのアクションを定義します。
protected void makeActions(final IWorkbenchWindow window) {
...
helpAction = ActionFactory.HELP_CONTENTS.create(window);
register(helpAction);
...
}
最後にメニューにヘルプのメニューを追加します。
protected void fillMenuBar(IMenuManager menuBar) {
...
helpMenu.add(helpAction);
}
それでは次の Step で
rcpmail を起動してみましょう。
もしアプリケーションが起動しなかったらログをチェックしてみます。
これで rcphelp プラグインが追加されました。もう一度起動してみましょう。
メニューにヘルプが見つかりましたか。しかし、まだヘルプが起動ができません。実はまだ足りないプラグインがあるのです。
RCP は org.eclipse.help
というプラグインを含んでいます。これはヘルプシステムそのものではなく、ヘルプシステムの拡張ポイントを定義しているだけです。当のヘルプシステムは Eclipse
SDK にあるいくつかのプラグインで実装されているのです。PDE
環境では、これらのプラグインを追加する必要があることになります。具体的には次のプラグインです。
org.eclipse.help.appserver
org.eclipse.help.base
org.eclipse.help.ui
org.eclipse.help.webapp
"Add required
plug-ins" を実行して新たにプラグインを追加してアプリケーションを実行してみましょう。
しかし、まだヘルプシステムが起動しません。ここで、エラーメッセージとともにログを見てみましょう。次のようなメッセージが出力されています。
org.eclipse.core.runtime.CoreException: Exception occurred starting application server.
at org.eclipse.help.internal.appserver.AppserverPlugin.startWebappServer (AppserverPlugin.java:142)
log:
<workspace-dir>\runtime-EclipseApplication\.metadata\.log
この部分のソースコードを見ると、拡張ポイントの拡張が誤っていることがわかります。ちなみに、このソースコードを見るためには、現在の workspace にプラグインをインポートする必要があります。
if (appServer == null)
throw new CoreException(new Status(IStatus.ERROR, PLUGIN_ID,
IStatus.OK,
AppserverResource.getString("Appserver.start", null))
この原因をさがしてみましょう。
ここでの設定が間違っているようです。元をたどっていくと、APP_SERVER_EXTENSION_ID で指定されている拡張ポイントのようです。この拡張ポイントがどこにあるのか探して見ます。
検索の結果、org.eclipse.tomcat が見つかりました。実は、Eclipse のヘルプシステムは
Application Server として TOMCAT を利用します。よって TOMCAT を利用するためのプラグインも追加する必要があります。
プラグインを追加してみましょう
org.eclipse.tomcat を "Add required
plug-ins" で追加
org.eclipse.ant も追加される
ここまでで見てきたように、Eclipse を使った開発で必要なプラグインを見つけるということはまだまだ十分とはいえません。チュートリアルとしてははじめから必要なプラグインを示して追加すればすんでしまいますが、このように Eclipse の内部構造や拡張ポイントについて調べてみることも後々役に立つと思われます。かといって毎回調べなければならないようならば、開発効率の点からみても早急に改善されることが望まれます。
配布用にアプリケーションをエクスポートするためには、config.ini を修正する必要があります。これは簡単な操作で行えます。
Eclipse をすでに利用している方ならご存知のことと思いますが、Eclipse のプラグインのインストールは、該当するファイルを plug-in ディレクトリにコピーするだけで、特にコンフィグレーションファイルを操作していることはありません。これは Eclipse のコンフィギュレータが起動時に動的にプラグインリストを構成しているからです。よって、rcpmail もこの形で起動できるようにしてみましょう。
コンフィグレーションを修正してみましょう
osgi.bundles=org.eclipse.core.runtime@2:start, org.eclipse.update.configurator@3:start eclipse.product=rcpmail.product
org.eclipse.update.configurator を追加
もしここで起動に失敗した場合、古いコンフィグレーション設定を使ってしまった可能性があります。Eclipse runtime は、初めて起動するときには必要なプラグインのリストを作成し、それをコンフィグレーションエリアに格納します。次回の起動からはこのキャッシュ情報を利用して起動します。PDE application launcher では、起動時に毎回コンフィグレーションエリアを初期化するように設定できます。
いつでも起動時に初期化する必要はありませんが、開発中など、プラグインの追加削除が頻繁に行われるときにはとても有効です。
rcpmail の展開は rcpdemo の時よりも若干複雑になります。rcpdemo の時はありませんでしたが、rcpmail は RCP distribution にはないプラグインを含んでいるからです。しかし、3.1M5 のバージョンから Eclipse には RCP export wizard が用意されたおかげで簡単に手順を踏めるようになりました。
wizard を起動する前に、product configuration ファイルを用意します。これはまた別の wizard により生成できます。
コンフィギュレーションファイルを用意しましょう
次に、product configuration wizard が起動してきます。"Overview" タブはプロダクト ID やアプリケーションなどの基本設定があります。では、順次設定していきましょう。
"Configuration" タブは launch configuration から抽出した必要なプラグインのリストがあります。config.ini ファイルも同等です。すでに config.ini はありますのでそれが選択されています。
"Branding" タブでは、アプリケーションの見栄えを変更できます。
展開してみましょう
zip ファイルを指定して export
zip を展開
Update manager は Eclipse ベースのアプリケーションの update を配布するのにとても役立ちます(Eclipse のソフトウェアの更新で楽をしている方も多いでしょう)。RCP においてはオプションの位置づけといえますがこの仕組みはぜひ入れておきたいものです。そこで、rcpmail に update manager を追加していくことにします。Update Manager は Eclipse の feature としてパッケージされます。
約束事として、feature project の名前は "...-feature" として命名します。よって rcpmail の feature は rcpmail-feature となります。しかし、feature 作成ウィザードにおいて、feature ID はそれに反して "rcpmail" になります。これは、どの feature も branding プラグインを持つであろう事に関係しています。一般には、branding プラグインの ID は feature ID と同じになります。feature マニフェスト上では異なった branding プラグイン ID を付与することもできます。このチュートリアルのケースでは、今ある rcpmail プラグインが brnading プラグインの位置づけとなります。
では早速、新規 feature のための branding プラグインを作成しましょう。
branding
プラグインを作成しましょう
この branding プラグインは次の feature を必要とします。
feature
プラグインを作成しましょう
ここで今まで作成したプラグインを含む feature を作成しましょう
ヘルプシステムの時のように、update manager dialog をメニューに追加し、いくつかのプラグインを launch configuration に追加します。ここで、参考に Eclipse SDK のメニューを見てみましょう(Help > Software Updates > Find and Install)
Eclipse
はどうなっているか?
org.eclipse.ui.ide の plugin.properties を開く
UpdateActionSet.updates.label の定義を確認
org.eclipse.ui.ide マニフェスト上のこの定義を確認
<extension
point="org.eclipse.ui.actionSets" >
<actionSet
label="UpdateActionSet.label"
visible="true"
id="rcpmail.softwareUpdates">
<menu
label="%UpdateActionSet.menu.label"
id="rcpmail.updateMenu">
</menu>
<action
label="%UpdateActionSet.updates.label"
icon="icons/usearch_obj.gif"
class="rcpmail.rcp.InstallWizardAction"
menubarPath="help/rcpmail.updateMenu"
id="rcpmail.newUpdates">
</action>
</actionSet>
</extension>
org.eclipse.ui.ide
のマニフェストを見ると、org.eclipse.ui.internal.ide.update.InstallWizardAction
を参照していることがわかります。先ほどコピーした拡張の設定ではこのプラグイン内部のクラスに依存してしまいます。自分で作ったプラグインが Eclipse
内部のクラスに依存するのは管理上好ましくないので、InstallWizardAction をコピーし rcpmail
ローカルのクラスを生成します。先の設定ではすでに action の class の設定がそのようになっています。
このコピーしたクラスは org.eclipse.update.ui
プラグインを参照しています。よってこれをプラグインリストに追加する必要があります。
プラグインを追加して起動してみましょう
org.eclipse.update.ui を追加し、保存
ここでは update manager を利用して更新できるように rcpmail feature をエクスポートします。
feature を更新できるようにするにはアップデートサイトの feature.xml を用意します。
アップデートサイトを準備しましょう
org.eclipse.update.core
org.eclipse.update.ui RCP export wizard を利用してアプリケーションをエクスポートします。今回は、アップデートマネージャを利用して更新できるように feature として作成してきています。そこで、product configuration を feature 用の product configuration に変更する必要があります。これによって product configuration ファイルのプラグインリストの管理から開放され、feature の管理のみすればよいようになります。rcpmail においては rcpmailbase feature 1つだけです。
エクスポートしてみましょう
アップデートサイトは、アップデートや既存 feature の新バージョン、まったく新しい feature を提供します。アップデートマネージャを利用して更新を可能にするためにはなによりアップデートされた feature が必要です。
アップデートを作成してみましょう
ApplicationWorkbenchWindowAdvisor.preWindowOpen()
の workbench window サイズを変更してみましょう
これで feature がアップデートできました。これをパッケージングしてアップデートサイトにアップします。Eclipse 上でアップデートサイトプロジェクトの作成は次のようになります。
アップデートサイトプロジェクトを作成してみましょう
次にユーザ側で更新してみましょう
いかがでしたか?Part 2 はこれにて終了です。お疲れ様でした。
このチュートリアルで作成するアプリケーションの zip ファイルは、原本サイトのこちらから取得できます。
今回は Part 1 よりちょっと複雑なアプリケーションを使って、ヘルプの追加や更新マネージャの利用などを行ってきました。基本的に用意された仕組みを使って独自のコンテンツのみを開発すればよいことがお分かりいただけたと思います。このあたりは、通常の Plug-in 開発とも同じなので、いろいろ応用ができるかと思います。
さて、このシリーズの最終回 Part 3 では、RCP における試験を JUnit を利用して実施していきます。
※ Part 3 は近日公開予定です。
EclipseCon 2005, Hyatt Regency
Javaおよびその他のJavaを含む商標は、米国 Sun Microsystems, Inc. の商標であり、同社のJavaブランドを使用した技術を使用した製品を指します。
Windowsは、米国Microsoft Corporationの米国および その他の国における登録商標です。
Windows の正式名称は、 Microsoft(R) Windows(R) Operating System です。
記載されている製品名、会社名は、それぞれの会社の 登録商標または商標です。