ファイヤープロジェクト
パッケージの作成
2005-02-22T11:45+09:00   matsu
XULアプリケーションのパッケージ作成方法について調査してみた.
XULアプリケーションの構成物がだいたい以下からなることは以前に記述した.
  • XULファイル.
  • cssファイル.
  • js(JavaScript)ファイル.
  • rdfファイル.
  • その他画像ファイルなど.
今まではXULファイルの記述方法,特にwidgetの記述方法について説明してきた.それらは常に1ファイルで完結していた.次にcssファイルやJavaScriptファイル,画像ファイルなど,複数ファイルからなるプログラムを作成したい.XULにおいてそれら複数のファイルを読み込み指定するには,何らかの同じ単位に含まれていて,その中での「位置」を指定できるとポータビリティが増す.この単位をパッケージと呼ぶ.XULアプリケーションではスキンやロケールの変更にも便利な構成になっている.本節では,今後複数のファイルからなるXULアプリケーションを作成していくために必要なこのパッケージの最も簡単なサンプルを示す.
今までのサンプルでは,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パッケージを配置する場所は,
$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.rdf
XULアプリケーションの構成を記述する.
これでHello Packageの作成は完了である.最後に作成したパッケージをレジストリの末尾に追加する.まず
$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へのパス
Hello Packageをjarファイルで固める例を示す.
$> 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
※ フィールドの見出し(フィールド名)は,便宜上の理由で私が勝手につけた.
matsu(C)
Since 2002
Mail to matsu