レベル: 中級 Chris Aniszczyk (zx@us.ibm.com), Software Engineer, IBM Benjamin Muskalla (bmuskalla@innoopract.com), Software Engineer, Innoopract Informationssysteme GmbH
2007年 10月 23日 Ajax (Asynchronous JavaScript + XML)、そして Web 2.0 の概念は、Web ベースのアプリケーションにライブ感を与える手法として開発コミュニティーに広く普及しています。RAP (Rich Ajax Platform) は、そんな Ajax 対応の Web アプリケーションを Eclipse 開発モデルを使って構築するための手段です。この記事では RAP の概要として、RAP 開発環境のセットアップ手順を説明し、デモを披露します。そして最後にわかりやすいサンプル・アプリケーションを紹介して記事を締めくくります。
RAP プロジェクトの狙いは、開発者が Eclipse 開発モデルを使用してリッチ・インターネット・アプリケーションを構築できるようにすることです。「Eclipse 開発モデル」とは具体的に何を意味するのかと言うと、RAP では開発者が Java™ ライブラリーと Eclipse API を最大限活用してブラウザー・ベースの Ajax アプリケーションを構築できるようにしますが、その手段として、Web 対応の SWT、JFace、そして Eclipse Workbench の実装を提供するということです。この記事では、単純なサンプル・アプリケーションを用いて RAP を紹介します。
2 ステップのみのセットアップ
RAP のセットアップは至って簡単です。必要なステップは 2 つだけで、最初のステップで RAP をダウンロードし、そして次のステップで Eclipse が RAP を使うように構成します。
ステップ 1: RAP をダウンロードする
Eclipse.org から RAP を入手してください。その際には、最新の安定したマイルストーンを選ぶことをお勧めします。この記事では 1.0 リリースを使用しました。RAP ターゲット・プラットフォームが含まれるアーカイブ・ファイルをダウンロードしたら、ディレクトリーを選択してそこにファイルを解凍します (図 1 を参照)。ここで選択するディレクトリーは重要です。なぜなら、このディレクトリーが次のステップでターゲット・プラットフォームを設定するときに使用するディレクトリーとなるからです。
図 1. RAP ターゲット
ステップ 2: ターゲット・プラットフォームを設定する
Eclipse PDE (Plug-in Development Environment: プラグイン開発環境) では、ターゲット・プラットフォームという概念を用いています。ターゲット・プラットフォームとは、一連のプラグインのみで構成され、開発を行う対象 (ターゲット) を表すものです。デフォルトでは、ターゲット・プラットフォームはその時点で実行している Eclipse インスタンスのプラットフォームに設定されます。つまり、開発中のプラグインは現在実行中のインスタンスで動作するようにデフォルト設定されるということですが、ターゲット・プラットフォームの素晴らしい点は変更が可能だというところにあります。そのため例えば、ターゲット・プラットフォームの対象を Eclipse V3.2 システムに設定したり、さらには別の製品のランタイムに設定することもできます (この巧妙な手段により、開発対象が何であろうと最新の Eclipse を使用することができます)。
ここでの開発対象は RAP プラットフォームなので、RAP プラットフォームをターゲットにしなければなりません。それにはターゲット・プラットフォームのプリファレンス (設定) (Window > Preferences... > Plug-in Development > Target Platform) をステップ 1 で RAP プラグインを解凍したディレクトリーに設定します (図 2 を参照)。
図 2. ターゲット・プラットフォームとしての RAP の設定
ターゲット・プラットフォームは正しく設定されました。これで RAP アプリケーションを開発できるようになりましたが、コードに取り掛かる前に単純なデモを紹介します。このデモで、RAP の機能を知ると同時に RAP ベースのアプリケーションを立ち上げる方法に慣れておきましょう。
 |
RAP と Google Web Toolkit との違い GWT (Google Web Toolkit (GWT)) と RAP はどちらも Java を使ってリッチ・インターネット・アプリケーションをコーディングできるという点では似ていますが、この 2 つには大きな違いがあります。それは、GWT はクライアント上で動作する一方、RAP は主にサーバー上で動作するという点です。サーバー上で動作する RAP では、すべての Java API にアクセスし、OSGi を介して有名な Eclipse プラグイン・モデルを利用することができます。また Eclipse の観点からすると、GWT はスタンドアロンの SWT アプリケーション (単なるウィジェット・ツールキット) のようなものですが、RAP では Web アプリケーションに RCP スタイルの手法を適用できるという違いがあります。 |
|
デモ
RAP を使用する第一歩として、ここではデモを用います。RAP を操作するには、RAP を立ち上げるための起動構成を作成する必要があります。それにはまず、Run ダイアログを開き (Run > Open Run Dialog...)、OSGi フレームワークの起動構成を新規に作成してください。新しい起動構成を作成したら、VM 引数が -Dorg.osgi.service.http.port=8000 -Dosgi.noShutdown=true に設定されていることを確認します (図 3 を参照)。これらの引数によって、RAP がポート 8000 で自動的に起動し、起動直後に Eclipse がシャットダウンしないようにできます。
図 3. RAP の起動構成
これでブラウザーを立ち上げて http://localhost:8000/rap?startup=controls にアクセスすると、コントロールのデモが表示されるはずです (図 4 を参照)。このデモは、SWT Examples のセットに含まれる有名な ControlExample に基づいています。
図 4. RAP のコントロールのデモ
サンプル・アプリケーション
ここからは、PDE に用意された RCP (Rich Client Platform) テンプレートに基づく 2 つの例を見ていきます。
Hello World の例
Hello World は、従来から決まって使われるプログラミング・サンプルです。まず始めに、単純な RAP アプリケーションを実行させるのに必要な作業から取り掛かります。
図 5. RAP バージョンの Hello World
RAP バージョンと RCP バージョンとの大きな違いは、プラグインの依存関係とアプリケーションのエントリー・ポイントにあります。プラグイン・マニフェスト (リスト 1 を参照) を見ると、異なる依存関係があることに気付くはずです。
リスト 1. RAP の Hello World の依存関係 (MANIFEST.MF)
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Helloworld Plug-in
Bundle-SymbolicName: rap.helloworld; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: rap.helloworld.Activator
Require-Bundle: org.eclipse.rap.ui
Eclipse-LazyStart: true
|
org.eclipse.rap.ui への依存関係にお気付きでしょうか。これは、RCP ベースの標準 org.eclipse.ui プラグインと同様の RAP プラグインです。OSGi とImport-Package ヘッダーを熟知している場合は、特定のプラグインに依存する必要はまったくなく、必要なパッケージに依存するだけで構いません。しかし、RAP と RCP の両方で機能するようにコードを構成するには、この依存関係が重要になります。例えば、ワークベンチ・アドバイザーのコードを RAP の場合 (リスト 2 を参照) と RCP の場合 (リスト 3 を参照) とで見比べると、同じようなコードとインポートされたパッケージがあることがわかります。
リスト 2. RCP のワークベンチ・アドバイザー
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("Hello RCP");
}
}
|
リスト 3. RAP のワークベンチ・アドバイザー
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("Hello RAP");
}
}
|
RAP アプリケーションと RCPアプリケーションとの間のもう 1 つの大きな違いは、エントリー・ポイント (Java 言語での main(String[] args) メソッドのようなもの) です。RCP では、org.eclipse.core.runtime.applications 拡張ポイントで IApplication (Eclipse V3.3 より前は IPlatformRunnable として知られていたことに注意) を定義します。RAP でこれに相当するのは org.eclipse.rap.ui.entrypoint 拡張ポイントで、この拡張ポイントが定義するのは IEntryPoint です。RCP コンテキスト (リスト 4 を参照) と RAP コンテキスト (リスト 5 を参照) の典型的なエントリー・ポイントのコードを比較すると、類似点があることがわかります。いずれのコードでも、ワークベンチ・アドバイザーを実行するための表示とワークベンチを作成しています。
リスト 4. RCP アプリケーションのエントリー・ポイント (org.eclipse.core.runtime.applications)
public class Application implements IApplication {
public Object start(IApplicationContext context) throws Exception {
Display display = PlatformUI.createDisplay();
try {
int returnCode = PlatformUI.createAndRunWorkbench(display,
new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART)
return IApplication.EXIT_RESTART;
else
return IApplication.EXIT_OK;
} finally {
display.dispose();
}
}
public void stop() {
final IWorkbench workbench = PlatformUI.getWorkbench();
if (workbench == null)
return;
final Display display = workbench.getDisplay();
display.syncExec(new Runnable() {
public void run() {
if (!display.isDisposed())
workbench.close();
}
});
}
|
リスト 5. RAP アプリケーションのエントリー・ポイント (org.eclipse.rap.ui.entrypoint)
public class Application implements IEntryPoint {
public Display createUI() {
Display display = PlatformUI.createDisplay();
PlatformUI.createAndRunWorkbench( display, new ApplicationWorkbenchAdvisor() );
return display;
}
}
|
RCP Mail の例
よく知られた RCP
Mail のサンプル・アプリケーション (図 6 を参照) は、ほとんど変更を加えなくても RAP 環境 (図 7 を参照) で実行することができます。この例から、ワークベンチの概念 (特にビュー、パースペクティブ、エディター) は RAP 内でも使用できることがわかるはずです (各概念のマッピングについては表 1 を参照)。この RCP Mail のサンプル・アプリケーションと前のサンプル・アプリケーションのソース・コードを入手して、いろいろと手を加えてみてください。
表 1. RAP と RCP の比較
| RAP | RCP |
|---|
| OSGi(サーバー側) | OSGi | | SWT (Standard Widget Toolkit) | RWT (RAP Widget Toolkit) | | JFace | JFace | | ワークベンチ | Web ワークベンチ |
図 6. RCP Mail の例
図 7. RAP Mail の例
まとめ
この記事では単純なサンプル・アプリケーションとデモを用いて RAP を紹介しました。RAP では、Eclipse で培った今までのスキルを生かしてリッチ・インターネット・アプリケーションを作成することができます。さらに、デスクトップ (RCP) とブラウザー (RAP) の両方で再利用できるようにコードを構成することもできます。要するに、RAP によって Eclipse がブラウザーと Web 2.0 の仲間に加わったということです。
ダウンロード | 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|
| Sample code | os-eclipse-richajax.zip | 52KB | HTTP |
|---|
参考文献 学ぶために
製品や技術を入手するために
議論するために
著者について  | 
|  | Chris Aniszczyk は IBM Lotus の Eclipse コミッターとして、OSGi 関連の開発に取り組んでいます。最近主に専念しているのは、Eclipse のプラグイン開発環境 (PDE) を改善し、IBM Lotus 社内で Eclipse の支持者を増やすことです。 オープン・ソースの熱烈な支持者である彼は、オープン・ソースを広めることを専門としています。自身のブログでは Eclipse の魅力を説き、Eclipse Foundation の役員会では Eclipse コミッターの代表も務めています。ここをクリックすれば、彼は冷たい飲み物を口にしながら、オープン・ソースと Eclipse に関する議論にいつでも応じてくれます。 |
 | 
|  | Benjamin Muskalla は、ドイツ・カルルスルーエにある Innoopract Informationssysteme のソフトウェア開発者兼コンサルタントです。彼は RAP (Rich Ajax Platform) プロジェクトのコミッターとして、主にワークベンチ実装に取り組んでいます。また、Eclipse プラットフォームにも積極的に貢献しています。 |
記事の評価
|