このページは、主として XUL についての理解を深めたい、 あるいは Mozilla のプラットフォームが XUL を利用して構築されている理由について知りたいと考えている アプリケーション開発担当者や開発マネージャーを読者に想定しています。
はじめに
XUL (ズールと発音します) は、Mozilla が持っている XML ベースの ユーザーインターフェイス記述言語で、 これにより、高機能でクロスプラットフォーム対応のアプリケーションを作成することが可能になります。 このとき、アプリケーションとしては、インターネットに接続して動作するものでも、切り離されていても動作するものでも作成できます。 さらに、作成されたアプリケーションに対して、テキストやグラフィクス、レイアウトの変更といったカスタマイズを行うことが容易ですので、簡単に商標を設定を行ったり、複数の市場向けにローカライズを行うことが可能です。 また、Web 関連のエンジニアで、すでに Dynamic HTML (DHTML) に慣れているのであれば、XUL の習得は短期間で可能ですので、すぐにアプリケーションの作成に着手できるはずです。
このドキュメントでは、XUL と Mozilla が持っているクロスプラットフォームのアプリケーションを作成する技術が、アプリケーション開発者を惹きつけている理由のいくつかについて説明します。 また、この調査では Mozilla が XUL を開発する動機と、Mozilla のプラットフォームが XUL を利用して構築されている理由についても十分な説明を行います。 以下では、まず XUL の主な機能と利点を調査し、続いて Mozilla がサポートする技術を検証していきます。 最後に、ミニケーススダデイとして、XUL によるカレンダーアプリケーションを作成し、Mozilla を使ってアプリケーションを作成する利点を補足します。
主な機能と利点
強力なウィジェットベースのマークアップ言語 | XUL の目的はクロスプラットフォームのアプリケーションを構築することにあり、 これは Web ページの作成を目的とする DHTML との明確な相違点になっています。 つまり、DHTML が、ページの記述のために見出しレベルやハイパーテキストリンクといった要素を中心に提供しているのに対して、 XUL では、主にウィンドウを作成するためのラベルやボタンといったアプリケーション製品の作成を指向した要素を提供しています。 実際、数多くの開発者が、DHTML による Web アプリケーションの中で、 同様のことを実現するべく多大な努力を投じていますが、 その場合は複雑さに起因するコストや性能の問題、標準化の欠如といった問題があります。 |
既存の標準に準拠 | XUL は W3C 標準の XML 1.0 に基づいた XML 応用言語です。 また、XUL で記述されたアプリケーションは、W3C で追加された標準技術、 特に「HTML4.0」「Cascading Style Sheets (CSS) 1 と 2」 「Document Object Model (DOM) レベル 1 と 2」 「JavaScript 1.5, EMCA-262 Edition 3 (ECMAScript)を含む」 「XML 1.0」に基づいています。 さらに mozilla.org では、次のステップとして eXtensible Binding Language (XBL) の W3C による標準化を推進しています (下記の「XUL をサポートする技術」参照)。 |
プラットフォーム移植性 | XUL は、HTML と同様に プラットフォーム中立に設計されていますので、 作成したアプリケーションは、Mozilla が動作する OS であれば簡単に移植することができます。 現在 Mozilla がサポートしているプラットフォームの範囲の広さを考慮すれば、 このプラットフォーム中立な設計が、XUL のアプリケーションを構築する技術という面での最も重要な特徴のひとつであるといえるかもしれません。 XUL の持つ、ユーザーインターフェイスのコンポーネントを抽象化する機能によって、 「write-once, run-anywhere (一度記述したコードは何処でも動く)」の約束が実現されます。 実際、Mozilla スイートのすべてのコア・アプリケーション (ブラウザ、メッセンジャー、アドレス帳など) のユーザーインターフェイスは、XUL によって記述されており、 これは、単一のコードベースで、Mozilla のすべてのプラットフォームをサポートします。 |
プレゼンテーションとアプリケーションロジックの分離 | 既存の多くのアプリケーションが持っている大きな欠点のひとつに、 ユーザーインターフェイスの要素とクライアントアプリケーションのロジックとが強く結合されていることがあります。 これら 2 つの部分を開発するためには、それぞれに対応するスキルが必要であるため、 多くの場合は、そのために別の担当者を割り当てますが、 そのことが、開発チームの環境に大きな問題を引き起こす要因になっています。 XUL では、クライアントアプリケーションを コンテント (content)、スキン (skin)、ロケール (locale) の 3 つのパートに明確に分離して扱う方法を提供しています。 コンテントパートは、アプリケーションの定義とプログラム的なロジックであり、XUL、XBL、JavaScript により構成されます。 スキンパートは、プレゼンテーション (どのように表示するか) に関する情報で、CSS と画像により構成されます。 最後のロケールパートは、各地の言語固有のテキストラベルを含んでいて、DTD と .properties ファイルで定義される文字列バンドルにより構成されます。 このため、XUL アプリケーションのレイアウトと外観は、アプリケーションの定義とロジックから独立して変更することが可能です。 さらに、アプリケーションは、アプリケーションのロジックや外観に依存することなく、異なる言語や地域用にローカライズすることが可能です。 この分離度によって XUL のアプリケーションは、プログラマーの保守を容易にするとともに、デザイナーと翻訳者も容易にカスタマイズができるようになっています。 また、ワークフローの観点からも、これらの相互に依存するアクティビティの調整を、HTML ベースの Web アプリケーションの場合よりも簡単に行うことができるため、 システム全体の安定性や品質に与える影響を小さくできます。 |
カスタマイズ、ローカライズ、商標設定が容易 | XUL が、アプリケーションロジックと表示、言語テキストの分離を提供することによる、もうひとつ非常に現実的な利点として、異なる顧客や、ユーザーグループのためのカスタマイズが容易なことがあります。 つまり、開発者はアプリケーションについて 1 つの基本となるコードベースを保守するだけで良く、各顧客向けには異なるスキンを提供することでロゴや商標のカスタマイズが可能になります。 また、英語でユーザーインターフェイスを記述して、配備されたアプリケーションについて、同じ顧客用にフランス語に翻訳したものを作成することが可能です。 この場合は、変更範囲が広く、(すべてではなくても) ほとんどアプリケーション全体に影響するにもかかわらず、 翻訳に関する情報についても互いに切り離されているため、すべてのカスタム版が共有するコアとなる XUL 定義とアプリケーションロジックに適用するだけで翻訳を有効にすることが可能になります。 |
XUL をサポートする技術
Mozilla では、上記以外にもクロスプラットフォームの Web アプリケーションを構築するために、XUL を補完するいくつかの技術を導入しています。
XBL | eXtensible Bindings Language (XBL) はマークアップ言語のひとつで、これにより専用の新しい要素、または XUL ウィジェット用の「バインディング」を定義できます。 XBL により、開発者は XUL ウィジェットのための新しいコンテントの定義、XUL ウィジェットへの付加的なイベントハンドラの追加、新しいインターフェイスのプロパティとメソッドの追加が可能です。 すなわち、XBL は開発者に対して、既存のタグをカスタマイズして独自の新しいタグを作成することで、XUL を拡張する手段を提供します。 XBL を使用すれば、開発者は簡単にカスタムユーザーインターフェイスウィジェット、例えばプログレスメーターやファンシーなポップアップメニュー、あるいはツールバーや検索フォームといったものを構築できます。 これらのカスタムコンポーネントは、カスタムタグと関連する属性を指定することで、XUL のアプリケーションの中から使用可能になります。 |
オーバーレイ | オーバーレイ (Overlay) は UI に追加するコンテントを記述するために使用する XUL ファイルのことです。 これは、付加的なコンポーネントの UI を追加するための汎用的なメカニズムで、 XUL ファイルの一部分だけを、UI 全体を再提供することなしにオーバライドしたり、既存の UI の特定の部分を追加コンポーネントから再利用したりすることを可能にしています。 オーバーレイは、既存のアプリケーションのカスタマイズと拡張を行うための強力なメカニズムで、 オーバーレイにより、全く異なる 2 つのアプリケーションを関連して動作させることが可能になります。 オーバーレイは、アプリケーションの定義の中から明示的に読み込みを指定することができるため、 他の言語の include ファイルに該当するものであるという見方をすることが可能です。 また、それだけではなく、オーバーレイはアプリケーションの外部からも指定できるため、 デザイナーは元のソースには手を加えることなくオーバーレイを重ね合わせることが可能です。 実用的な面では、オーバーレイによって、開発者が所定のアプリケーションについて 1 つのコードストリームだけを維持しながら、 各顧客のために、カスタムブランドの設定を適用したり、全く別のコードベースから専用の機能を含めることを可能にしています。 このことは、長期にわたる保守を容易にするため、コスト削減のための包括的なソリューションの導入に利用できます。 また、オーバーレイは、Mozilla にプロプリエタリな状態を保ったまま機能を追加したいと考えている開発者の意図を実現するためにも利用できます。 Netscape Public License (NPL) と Mozilla Public License (MPL) では、 元の成果物 (Mozilla から供給されたソースコードファイル) を変更する開発者は、顧客に対して変更に関するソースコードをリリースすることを求めていますが、 オーバーレイを利用すれば、元の Mozilla のオープンなソースコードを一切侵すことなく、プロプリエタリな変更を加えることが可能になります。 |
XPCOM/XPConnect | XPCOM と XPConnect は外部ライブラリと XUL アプリケーションとを統合することを可能にする補完的技術です。 XPCOM は、「Cross Platform Component Object Model」から取られており、クロスプラットフォームな、モジュラーソフトウェアを作成するためのフレームワークです。 XPCOM コンポーネントは、C と C++、JavaScript で作成することが可能で、C と C++、JavaScript、Python、Java、Perl、Ruby から利用することが可能です。 XPConnect は、XPCOM と JavaScript 間で簡単に相互動作を行うことを可能にする技術です。 XPConnect は、JavaScript のオブジェクトを XPCOM のオブジェクトから透過的にアクセスして、操作することを可能にしています。 また、同様に JavaScript のオブジェクトに、XPCOM オブジェクトを呼び出すための XPCOM コンポーネントのインターフェイスを割り当てることも可能です。 XPCOM と XPConnect をあわせて使用することで、開発者は、コンパイラ言語 (C/C++) の持つ強力な処理能力や、土台となっているオペレーテイングシステムへのアクセスを必要とするような XUL アプリケーションを作成できます。 |
XPInstall | XPInstall は、Mozilla の持つクロスプラットフォーム対応のインストール機構で、 XUL アプリケーションコンポーネントのパッケージ化と、 インストールのために、Mozilla がダウンロードして実行可能なインストールスクリプトについての標準的な方法を提供しています。 XPInstall によって、利用者は、インターネットか企業のイントラネット上のサーバから、 新しい XUL アプリケーションを難なくインストールすることが可能になります。 新しいアプリケーションをインストールするために利用者が必要な作業は、 Web ページや E メール上のハイパーリンクをクリックし、表示される Mozilla インストールダイアログに新パッケージを受け入れることを指示するだけです。 |
todo: describe cool toolkit and xul runner features
ケース・スタディ: Mozilla カレンダーアプリケーション
このミニケーススタディは、OEone Corporation (https://www.oeone.com) で、自社の Calendar アプリケーションを Mozilla プロダクトのコアに統合したときの方法について記述しています。 この Calendar アプリケーションは、 XUL によるフロントエンドと XPCOM コンポーネントから構成されています。 このコンポーネントでは、C 言語で記述されたネイティブ・ライブラリである libical を駆動して、日付操作と Calendar データの保管を行います。 この Calendar は、最初 Linux 専用に開発しましたが、わずか一週間で Macintosh と Windows 両方に移植することに成功しています。
XUL では多機能な UI コンポーネント群を提供しています。 このため、Calendar のユーザーインターフェイスは、全面的に XUL と JavaScript、CSS で記述されています。 このことは、このアプリケーション構築フレームワークの能力と柔軟性を示す証左といえます。 Calendar では、ボックスやグリッド、スタック (日、週、月の表示の合成に使用) といった簡単なコンポーネントを使用しています。 なお、Calendar の最初の実装では、XBL を利用していませんが、 これは、参加した開発者にその補完的な技術 (XBL) についての経験がなかったことによります。 しかし、将来の Calendar の計画では、これらの UI コンポーネントの多くを XBL ウィジェットに変換することで、実装をより簡単にする予定になっています。
XPCOM/XPConnect は、ネイティブコードとの統合を可能にしています。 完全な機能を持ったオープンソースのカレンダーライブラリである libical (https://www.softwarestudio.org/libical/) を、Calendar プロジェクトでは採用することにしました。 libical は IETF が規定する「iCalendar Calendaring and Scheduling protocols」のオープンソースの実装になります (RFC 2445、2446、2447)。 libical は iCal コンポーネントの解析と、コンポーネントプロパティやパラメータ、サブコンポーネントを操作するための C 言語による API を提供しています。 このライブラリは、最初は XPCOM のインターフェイスに適合させるためのラッパーを作成することで統合されましたが、 その後パーフォマンスの向上のために、アプリケーションロジックの大部分も JavaScript から XPCOM コンポーネントに移動しました。
プレゼンテーションをロジックから分離することで、アプリケーションが変更に強くなります。 最初の UI の実装では、月単位と週単位の表示を描画するためにグラフィックを多用していました。 その後、開発者の XUL に対する理解が深まったため、基本的なコンポーネントの実装の完成度が上がり、UI の構造を簡潔にするためのより良い方法を見出すことができました。 これによって、画面の描画性能は向上し、アプリケーションに必要とされるメモリとディスクの使用領域は減少しました。 実際、月と週の表示用の UI を、実質的にアプリケーションのロジックは変更せずに書き換えることができました。
XUL アプリケーションを他のプラットフォームへ移植することは簡単です。 この Calendar は、Linux アプリケーションとして始まり、そのときは他のプラットフォームへの移植は考慮されていませんでした。 しかし、その後、最初の開発者 (OEone Corporation) が Mozilla プロジェクトへソースコードを提供したときに、Calendar を Windows と Macintosh プラットフォームに移植する必要がありました。 XUL アプリケーションの UI は、2 つの新たなプラットフォームでも、ほどんど変更することなく動作したため、移植の苦労はありませんでした。 同様に、 UI のコードも、JavaScript で記述されているため、利用者との対話を制御するロジックについても苦労なく動作させることができました。 しかしながら、libical ライブラリは C 言語で書かれているため、このコンポーネントを他のプラットフォームに移植するためには、より多大な努力を必要としました。
幸運なことに、Macintosh では既に利用可能な libical ライブラリの実装が存在したため、 XPCOM が持つクロスプラットフォームを指向する特質も手伝って、 Macintosh の カレンダーの実装は数日のうちに動作するようになりました。 しかし、当時は Win32 で利用可能な実装が無かったため、開発者は libical を Windows に移植する苦労も引き受けなければなりませんでした。 一週間程度で、この件も完了し、Mozilla は Linux、Macintosh、Windows という主要な 3 つのプラットフォームすべてで稼動するカレンダーを備えることができました。
XPInstall は開発者にも利用者にも簡単です。 この Calendar は Mozilla 1.0 のリリースに合せて配布する予定ではないため、 通常のナイトリーおよびマイルストーンビルドのリリースには、標準コンポーネントとして含まれていません。 このため、Calendar を自分自身で構築できるのは、 Mozilla をコンパイルするために必要なソフトウェアと知識を持ち、オプションの環境変数を適切に設定できるような開発者だけということになります。 しかし、Calendar を試したいと思っている多くの Mozilla 利用者では、この贅沢な要求を満たすことはできません。 XPInstall を使用することで、開発者は容易にパッケージバージョンの Calendar、 すなわちリンクをクリックするだけでインターネット経由で直接インストール可能な Calendar を作成することができました。
おわりに
Mozilla を XUL に着目して見ると、ネイティブなデスクトップのアプリケーションとして十分に高機能なユーザーインターフェイスと、エンドユーザーのエクスペリエンスを備えたクロスプラットフォームのアプリケーションを開発するために欠くことのできない技術をもたらしています。 W3C の標準技術を使用して Web アプリケーションを構築した経験を持つデザイナーは、 ブラウザでの経験を直接デスクトップで活用することが可能です。
利用者がいくつかの異なる種類のデスクトップを利用する状況で、 Web がアプリケーションを提供する標準的な方法になる以前には、 このためにクロスプラットフォームなクライアントサーバーツールが利用されていました。 しかしながら、この方法では常にプロプリエタリな製品に依存するため、 開発者の単価が高コストになり、実行時間単位でライセンス料が発生するため、 ベンダーに強く束縛された低い立場に甘んじるしかありませんでした。 Mozilla は、オープンソースのライセンスだけで、これらのクロスプラットフォームなツールとほとんど同等の価値をもたらします。
急速に成熟しつつあるクロスプラットフォーム技術として、 XUL は、Java J2EE や Microsoft .Net といった、分散オブジェクトをネットワークからアクセスすることを可能にすることに焦点をあてている技術が持つ興味深い隙間を埋めることが可能です。 こういった動的なアプリケーションロジックは、UI のプレゼンテーション層が 「標準に準拠」「スクリプトとして記述可能」「拡張可能」「インターネットを通して配布か同等のことが可能」という特徴を持つことによって、多大な恩恵を受けることになるからです。
XUL にとって、デスクトップのアプリケーションとインターネットブラウザ上のアプリケーションの境界は曖昧です。 これは、XUL がこれらの両方の世界にしっかりと定着していることに起因しています。 既存の Web アプリケーションにも、XUL に移植されることで、恩恵をうけるものもあるでしょう。 そうすることで、高度な UI 機能を備えることができ、サポートされるの全てのプラットフォームにわたって提供される仕様の一貫した実装と、共有ライブラリやローカルファイルシステムといったネイティブなリソースへのアクセスが利用可能になります。
もし、あなたが、 「既存のウェブ・アプリケーションをデスクトップへ移植する必要がある」 「アプリケーションを複数のプラットフォームへ簡単に移植可能にする技術を探している」 「自身が所有するクールな機能をブラウザに統合することを望んでいる」 のどれかに該当するのであれば、XUL は熟慮に値する技術であるといえるはずです。
参照資料
- MDC の XUL ドキュメント。XUL チュートリアル と XUL リファレンス が含まれる
- XUL オーバーレイ
- XBL ドキュメント: XBL 入門, XBL リファレンス
- XPCOM ドキュメント
- XPConnect (スクリプトから利用可能なコンポーネント) ドキュメント。https://www.mozilla.org/scriptable/ も参照
- 拡張機能 ドキュメント。 拡張機能の構築 入門のためのチュートリアルが含まれる
- Mozilla Calendar プロジェクトのページ
Original Document Information
- Author: Peter Bojanic