はじめに
2004年に、私はあるゲームソフトメーカーの依頼で、同社の業務で使われているXMLベースのワークフローを修正する仕事を担当しました。依頼の内容は、SFとゲームのカンファレンスに出席しているライターが、インターネットに接続していない環境でも自分のノートパソコンにレポートを書き込めるようにしてほしいというものでした。当時はFirefoxが爆発的に普及し始めていたので、私はもっとよく理解しようと、このブラウザのXULインターフェースをかなり詳しく調べました。
作業の末にかなり高度なエディタを何とか作り上げ、その過程でFirefoxの仕組みをかなりの程度まで理解することができました。また、XHTMLとJavaScriptとCSSの組み合わせは、XULと同じくらい強力で、XULよりも柔軟性に優れ、しかも多くのアプリケーションでXULよりもサポートが進んでいるということも分かりました。
さらに、Firefoxのアドオンを作成するのはそう難しくないことも分かりました。とは言うものの、開発には何かと手間がかかります。なぜなら、特にアドオン作成専用の正式な開発IDEがあるわけではないからです(最も近いのはVenkmanですが、そのものではありません)。そのためコンポーネントを作成する場合は、XULのサポートとオーバーレイを構築し、JavaScriptとCSS(とサポートに必要な任意のXBL)でバインドしてから、1つ以上の構成ファイルを更新することが必要になります(構成ファイルはバージョンが変わるたびに変更されると思われます)。そして、内容をzipファイルに圧縮し、新しいアドオンを読み込み、ブラウザを再起動し、ブラウザをクラッシュさせるようなミスを犯していないかどうかドキドキしながら待つことになります。
大きなアプリケーションの場合はそれでもアドオンを作成するだけのメリットはありますが、単純なものならばバインドしてzipし、更新するという面倒な手続きをせずに済む“その場しのぎ”の拡張を作成するのがよいでしょう。特に作成しようとするアドオンが、単にシステムの基本的なタスクを実行するシステムシェルスクリプトのようなものである場合は、その方が手軽です。
Mozillaの研究開発チームがUbiquityを作成しようと考えたのもそのためです。これは、ブラウザ用のコマンドラインを使用可能にするアドオンと言えます。例えば、私はいつもかなり長い記事を書いてしまうのですが、私のコンテンツ作成の場は最近ますますWeb上へと移っているので、1段落にどのくらいの単語数を書いたか簡単にはわからないことがあります。
Ubiquityを使えば、テキストを選択して、Ctrl+Spaceキー(キーは変更可能です)を押すことでコマンドライン"shell"を起動し、プロンプトに"word-count"と入力できます。これで、プロンプトの真下に選択範囲内のかなり正確な単語数が表示されます。Returnキーを押すと、コマンドラインが消えて単語数はポップアップメッセージとして画面の右下隅に表示されます。
Ubiquityの各種コマンドはJavaScriptで書かれており、ローカルリソースとして内部に保管されています。ブラウザから通常使用できる一連のJavaScript機能に加えて、Ubiquityはページの閲覧や変更を容易にする数多くの追加機能もサポートしています。また、マウスクリック、キープレス、ページロードやアンロードなどのイベントをキャッチするフックも用意されています。この点に関しては、UbiquityはGreasemonkeyと非常によく似ています。ただし、Greasemonkeyはロード時に文書上のスクリプトを実行します。それに対して、Ubiquityスクリプトはロード時だけでなく、いつでも使用できるという長所があります。