パッケージの作成
XULアプリケーションのパッケージ作成方法について調査してみた.
XULアプリケーションの構成物がだいたい以下からなることは以前に記述した.
- XULファイル.
- cssファイル.
- js(JavaScript)ファイル.
- rdfファイル.
- その他画像ファイルなど.
今までのサンプルでは,HTMLファイルに対するのと同様の方法で,XULファイルを開いた.一方,Mozillaにはchromeシステムというものがあって,そこにインストールされているXULアプリケーションは
chrome://で始まる書式で指定することができる.
$> firefox --help
Usage: /home/matsu/usr/local/firefox/firefox/firefox-bin [ options ... ] [URL]
where options include:
Mozilla options
...省略...
-chrome <url> Load the specified chrome.
...省略...
firefoxというブラウザやヘルプはfirefoxをインストールした時点でchromeシステムに登録されていて,起動時に指定することができる.例えば以下の様に指定すると,いきなりfirefoxのヘルプのみが立ち上がる.
$> firefox -chrome chrome://help/content/これはfirefoxにおいて,実際にはヘルプ機能がブラウザ部分とは別XULアプリケーションとして実装されているからである.chrome://で始まるこの記述はChromeURLと呼ばれるらしい.ChromeURLは以下の構成となる.
chrome://パッケージ名/パート/XULファイル名
では,おそらく最も簡単なパッケージHello PackageというXULパッケージのサンプルを作成してみる.まず,最終的にXULパッケージを配置する場所は,
次に
これでHello Packageの作成は完了である.最後に作成したパッケージをレジストリの末尾に追加する.まず
$MOZILLA_DIR/chromeである.$MOZILLA_DIRはmozilla(あるいはfirefox)のインストールディレクトリである.今回はfirefoxのインストール環境にて試してみる.私の環境では以下のようになっていた.
$> ls chrome/ browser.jar comm.jar inspector.jar overlayinfo toolkit.jar chrome.rdf help.jar installed-chrome.txt pipnss.jar classic.jar icons ja-JP.jar pippki.jar何故かよく分からないが,XULパッケージはjarファイルとするのがはやりらしいが,別に通常のディレクトリでも動作する(※).まず,ここにHello Packageのためのディレクトリを作成する.
$> tree chrome/hello/
chrome/hello/
`-- content
`-- hello
すなわち以下のような構成となる.
パッケージ名/content/パッケージ名contentの部分はChromeURLのパートに該当し,他にlocale,skinが入ったりする.詳細は時頁移行.で,以下のXULファイル
chrome/hello/content/hello/hello.xulを作成する.
chrome/hello/content/contents.rdfXULアプリケーションの構成を記述する.
$MOZILLA_DIR/chrome/installed-chrome.txtを開く.そして末尾に
content,install,url,resource:/chrome/hello/content/hello/と記述する.このファイルの最後の行は改行のみの行となるように注意すること.あとは,
$> firefox -chrome chrome://hello/content/とすると,登録されたパッケージhelloのhello.xulを実行してくれる.以上でパッケージ作成は完了である.ポイントは以下である.
- ディレクトリ構成
- contents.rdfの記述
- installed-chrome.txtの記述
※ jarファイルと通常のディレクトリではXULアプリケーション登録の記述方法が若干異なる.詳細は後述.
contents.rdfの記述について解説する.
<?xml version="1.0"?>rdfファイルはXMLファイルである.冒頭でXML宣言する.
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
名前空間の指定.決めうちでよい.
<RDF:Seq about="urn:mozilla:package:root">
<RDF:li resource="urn:mozilla:package:hello"/>
</RDF:Seq>
このファイルで情報を記述するパッケージ,スキン,あるいはロケールを宣言する.contents.rdfでスキンやロケールを記述するなら,それぞれ「package」とある部分をskin,localeと変更する.そして「hello」の部分を作成するパッケージ,スキンあるいはロケールの名前に変更する.要素RDF:liはHTMLの要素liと同様のリストの要素である.一つのcontents.rdfファイルにて複数のパッケージ,スキンあるいはロケールの任意の組合せを記述できる.
<RDF:Description about="urn:mozilla:package:hello"
chrome:displayName="Hello Package"
chrome:author="matsu@fireproject"
chrome:name="hello">
</RDF:Description>
要素RDF:liで記述したパッケージの詳細情報.各要素RDF:li後とに要素RDF:Descriptionが必要である.両者のマッピングは要素RDF:liの属性resourceの値と要素RDF:Descriptionの属性aboutの値の一致で行う.以下にRDF:Descriptionのその他の属性について説明する.
- chrome:displayName
- ユーザ向けに表示されるパッケージ名.
- chrome:author
- パッケージの作者の名前.
- chrome:name
- パッケージ名.値は属性aboutの値の"urn:mozilla:package:"に続く部分と同じである.この値がchromeULRの最初の部分のパッケージ名となる.
installed-chrome.txtの記述について解説する.繰り返すが,サンプルでは,installed-chrome.txtの末尾に以下を記述した.
content,install,url,resource:/chrome/hello/content/hello/上記のように,installed-chrome.txtの各行はコンマで区切られた4つのフィールドからなり,末尾の行は改行のみからなる.以下に各フィールドについて順に説明する(※).
- タイプ
- 該当レコードは何について書いているかを書く.具体的には「content」「skin」「locale」のいづれか.
- 種別
- インストールの場合は「install」と書く.ユーザprofileディレクトリにインストールされたスキンかロケールの場合には,「profile」とも書ける(特殊なユーザに有意らしい).
- URLタイプ
- パッケージ,スキン,ロケールの場所を示す次項目URLのタイプを指定する.具体的には「url」「path」のいずれか.後者はファイルパスで指定する場合に記述する.
- URL
- パッケージ,スキン,ロケールの場所を示すURL.contents.rdfファイルのあるディレクトリを指定する.jarファイルとして固めている場合は,そのjarファイルのパスとjarファイル名を指定する.jarファイルの場合は
jar:resource:jarファイルのパス!jarファイル内のcontents.rdfへのパス
$> cd hello
$> jar Mcf hello.jar content
$> cd ..
$> jar tvf hello.jar
0 Tue Feb 22 11:32:06 JST 2005 content/
0 Tue Feb 22 11:32:06 JST 2005 content/hello/
462 Tue Feb 22 11:32:06 JST 2005 content/hello/contents.rdf
467 Tue Feb 22 11:32:06 JST 2005 content/hello/contents.rdf~
293 Tue Feb 22 11:32:06 JST 2005 content/hello/hello.xul
499 Tue Feb 22 11:32:06 JST 2005 content/hello/hello.xul~
$> rm -r hello
そして先に編集したinstalled-chrome.txtの最後のエントリを修正する.
content,install,url,jar:resource:/chrome/hello.jar!/content/hello/第4フィールドの変化に注意.起動方法はかわらない(すなわちchromeURLはかわらない).
firefox -chrome chrome://hello/content
※ フィールドの見出し(フィールド名)は,便宜上の理由で私が勝手につけた.

