XPagesでLotus Notes/Dominoアプリ開発入門
連載インデックスへ
XPagesでLotus Notes/Dominoアプリ開発入門(1)

サーバサイドJavaScriptやJavaでWebアプリが作れる
XPagesとは


日本アイ・ビー・エム株式会社 ソフトウェア開発研究所
Lotusテクノロジー開発 ソフトウェアエンジニア 佐藤 淳
2012/5/11


クライアント/サーバサイドJavaScriptをサポート

 アプリを作るときには、ユーザーの操作に応じて処理をするなどのさまざまなロジックの実装が必要になります。

 XPagesでは、そのロジックの実装にスクリプト言語として広く普及しているJavaScriptを使用できます。JavaScriptで実装されたロジックはLotus NotesやWebブラウザといったクライアントか、Lotus Domino(サーバ)で実行されます。

クライアントサイドJavaScript

 クライアントで実行されるクライアントサイドJavaScriptは、JavaScriptのコードがそのままWebブラウザに送られ、Webブラウザが搭載しているJavaScriptのインタプリタで実行されます。クライアントサイドJavaScriptでは、Webブラウザがサポートしているすべてのクラスやメソッドを使えます。

サーバサイドJavaScript

 サーバで実行されるサーバサイドJavaScriptは、Lotus Dominoに搭載されているインタプリタで実行されます。このインタプリタはECMA 262に準拠していますので、一般的なJavaScriptのクラスやメソッドを使用できます。

 ● Lotus Notes/Dominoアプリにアクセス

 また、Lotus Notes/Dominoアプリにアクセスするためのメソッドやクラスも用意されています。サーバサイドJavaScriptを用いることでLotus Notes/Dominoアプリに格納されているデータを取得したり、逆にデータを格納したりすることができます。

 例えば、リストボックスコントロールを使うときの例を考えましょう。リストボックスに表示する選択肢は、あらかじめ複数の固定値を設定することもできますし、Lotus Notes/Dominoアプリに格納されているデータを使用することもできます。サーバサイドJavaScriptを用いることで、Lotus Notes/Dominoアプリから必要なデータを動的に取得して、リストボックスの選択肢にすることができます。

 ● グローバル変数・スコープ変数

 またサーバサイドJavaScriptには、いくつかのグローバル変数が用意されています。それによって、XPages内でWebブラウザの言語情報やWebブラウザの種類を示すエージェント情報などのさまざまな環境変数を取得できます。データソースが定義されていれば、そのデータソースにアクセスするためのグローバル変数も用意されています。

 その他には、スコープ変数も用意しており、アプリ単位、セッション単位、ビュー単位、リクエスト単位で変数を使用できます。ページが切り替わった際に前のページで入力した値を遷移先のページでも使用したい場合などに使用できます。

 ● Javaクラスへのアクセス

 もう1つ、サーバサイドJavaScriptで紹介したい機能が、Javaクラスへのアクセスです。Lotus Notes/Dominoアプリの設計要素の1つとして、Javaクラスを組み込めます。組み込まれたJavaクラスや、製品がもともと持っているJavaクラスにJavaScriptから直接アクセスできます。

 例えば、外部アプリとの連携モジュールがJavaで作られていた場合、XPagesのサーバサイドJavaScriptを利用して、その外部アプリとXPagesとを連携できます。

ロジックはクライアント/サーバを柔軟に実装できる

 JavaScriptによるロジックの実装によって、XPages全体や配置したコントロールのイベントに紐付けられます。

 例えば、ページが読み込まれる前にロジックを実行する、配置したボタンコントロールのボタンが押された際にロジックを実行するなどが可能です。また、入力された値の妥当性チェックにも、ロジックを実装して必要とするチェック機能を実現できます。このようなロジックをクライアントサイドJavaScriptとサーバサイドJavaScriptのいずれか、または両方を組み合わせて柔軟に実装できます。

XPagesのアーキテクチャ

 XPagesは、コントロールを組み合わせて画面を構成し、JavaScriptでロジックを実装することで作られます。作られたXPagesのソースはXMLで構成されますが、それがどのような仕組みでHTMLに変換されてWebブラウザやLotus Notes上で実行可能になるのか、またどのような仕組みでサーバサイドJavaScriptが実行されるのかを紹介しましょう。

基盤技術はJava Server Faces(JSF)

 XPagesはJava Server Faces(JSF)を基盤技術として採用しています。JSFはJava EEアプリ・フレームワークの1つで、WebアプリのUIを構築するフレームワークです。詳細は、以下の記事を参照してください。

[特別企画]JavaServer Facesを理解する 
JSFはWeb開発を飛躍的に向上させるフレームワークだ。Javaの標準仕様となる予定のJSFを2回にわたり詳細に解説する

 XPagesでは、JSFとの互換性を保ちながら、以下のような簡略化を目的としたカスタマイズを行っています。

  • JSP/サーブレットコンテナとの依存性の除去
  • Javaの隠ぺい
  • スクリプト言語のサポート(サーバサイドJavaScript)
  • データソースのサポート機能の追加
  • デプロイ作業無しで実行可能にする仕組み

 Lotus Notes/Dominoアプリの設計要素としてXPagesが作成されると、内部的にはJavaのクラスファイルに自動変換されてアプリ内に格納されます。そのXPagesにWebブラウザからアクセス要求があると、XPagesの実行環境がアプリ内に格納されているJavaのクラスファイルを読み取ります。そして、インスタンス化し、Javaクラスが処理を実行して、Webブラウザへレスポンスを返します。

 内部で行われる処理はJSFと同様のライフサイクルを持っており、それぞれのフェイズにおいてXPagesで実装されたロジックが実行されます。

 その際に、Lotus Notes/DominoアプリのオブジェクトにアクセスするようなサーバサイドJavaScriptの実装があると、内部的にNotes Java APIを呼び出し、Lotus Notes/Dominoアプリのオブジェクトにアクセスします。

XPagesの実行環境は Dominoサーバ上のOSGiコンテナ

 上記のような動作を実現するXPagesの実行環境はLotus Dominoに搭載されているOSGiコンテナ上に展開されています。そして、そのOSGiコンテナはLotus Dominoが保持するHTTPサービスと連携するように配置されています。

 OSGiはEclipseなどでも採用されている、モジュール化されたJavaクラスをダイナミックにロードし実行させるための標準化された仕様です。XPagesから変換されたJavaクラスは、このOSGiの手法に従って実装されており(OSGiバンドル)、Lotus Notesが保持しているOSGiコンテナにも展開されています。詳細は、以下の記事を参照してください。

EclipseやSpringで使われている基盤技術OSGiとは
Java本来の実力を引出すOSGi徹底解説 EclipseやSpring、JBoss、GlassFishなどに使われているオープンソースの基盤技術について概要や特徴、ツールなどを解説
Java Solution」フォーラム 2009/5/12

 Lotus Notes上でXPagesアプリを使用する際にはサーバではなくLotus Notes上のXPagesの実行環境で動作します。このとき、先に説明したXPagesのJavaクラスの変換やインスタンスのロードはLotus Notesで行われます。従って、レプリカ機能を利用してアプリをローカルPCに複製することで、XPagesアプリをオフラインでも利用できます。

図5 XPagesのアーキテクチャ図

XPagesの開発環境はEclipseベース

 最後に、XPagesを含めたLotus Notes/Dominoアプリの開発環境であるLotus Domino Designerを紹介します。XPagesが登場する前のLotus Domino DesignerはWindowsネイティブアプリとして実装されており、拡張性はありませんでした。しかし、XPagesが登場したLotus Notes/Domino 8.5からはLotus Domino Designerも大きな進化を遂げています。

 一番の大きな変更点は、基盤技術に統合開発環境として広く普及しているEclipseを採用したことです。それによって、Eclipseが提供しているコードアシスト機能付きのエディタなど、開発生産性を向上するさまざま機能がLotus Domino Designerでも使用できるようになりました。

 その一方で、従来のLotus Domino Designerの機能はEclipseプラグイン化されてEclipseに統合され、新しい開発環境でも従来の操作感とほぼ同様に使えるようになっています。

 Eclipseの最大の特徴は高い拡張性です。Lotus Domino DesignerにEclipseを採用したことで、Eclipseの高い拡張性を利用した新機能も搭載されています。その新機能での目玉がXPages用のデザイナツール機能です。Eclipseにおけるアプリ開発と同じ感覚で操作ができるため、従来のLotus Domino Designerを使用したことがない開発者の方でも、直感的に使えるようになっています。

図6 Lotus Domino Designer

 Eclipseのプラグイン技術を利用して、Lotus Domino Designerを拡張するための拡張ポイントも公開されています。Lotus Domino Designerに不足している機能があっても、プラグインを作成して新たに機能が追加できます。

次回以降は、XPagesアプリの作り方

 今回は、連載初回ということでXPagesの概要を簡単に紹介しました。次回以降は、XPagesアプリの作り方を紹介しますので、お楽しみに。

■ @IT関連記事


ラムダ式、JAR脱獄、JavaScript/Node.jsへの接近
JavaOne Tokyo 2012まとめレポート(後編) JDK 8の新機能のうち、Lambda、Jigsaw、Nashornについて解説した講演を詳細にレポートする。そしてJava SE 9はどうなる?
Java Solution」フォーラム 2012/4/19
JavaとJavaScriptの親しい関係
小山博史のJavaを楽しむ(1) 
教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた 筆者が、独自の視点からJavaの面白さを掘り下げていく
Java Solution」フォーラム 2006/8/18

1-2

 Index
第1回 サーバサイドJavaScriptやJavaでWebアプリが作れるXPagesとは
  Page1
標準Web技術でNotes/Dominoアプリを作れる「XPages」
XPagesのUI設計要素
XPagesのUIパーツ「コントロール」3種
Page2
クライアント/サーバサイドJavaScriptをサポート
XPagesのアーキテクチャ
XPagesの開発環境はEclipseベース
次回以降は、XPagesアプリの作り方


Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間