Creating XPI Installer Modules

Mozilla のための新しいパッケージを作る(Creating New Packages for Mozilla)

この記事はかなり古い上に、Mozilla Suite および SeaMonkey (Toolkit へと変換されるまで)にしか当てはまりません。さまざまな Toolkit のためのアドオンは、異なる方法で パッケージしてください。

はじめに

Mozilla は、テーマや UI の他のパーツすべてをパッケージするという方法に 大きな変化を取り入れました。最近のビルドの chrome\ ディレクトリの下には パッケージサブディレクトリに加えて、一にぎりの JAR ファイル や Java アーカイブがあることに気が付くでしょう(下の図を参照してください)。 これらのアーカイブはサブディレクトリに余分にあります: Mozilla は現在、あなたが自分で Mozilla をビルドするときに変更できるように、UI の圧縮されたバージョンと圧縮されていないバージョンの両方をインストールするのです。

これらの JAR ファイルに加えて、いくつかの新しい RDF ファイルもあります。 これらの新しいファイルは Mozilla UI がパッケージされ、インストールされる方法の 変更を表します。chrome ディレクトリにはまだ圧縮されていないファイルのサブディレクトリが 標準で含まれていますが、ファイルを集めて配付する新しい方法はパフォーマンスを改善し、UI コンポーネントを小さく、インストールしやすくし、インストール作業をひじょうに簡単なものにしました。

画像:chrome_dir.gif

しかし、この新しい取り決めは、web 開発者やユーザーインタフェース開発者にとっては 簡単になっていません。 chrome サブディレクトリから適切なリソース(すなわち、XUL、JavaScript、CSS ファイル) をみつけて それをテキストエディタで編集するという 比較的単純な作業は、 数多くの開発者が より混乱し難解と思う何かに置き換えられました。 ここでは Mozilla の新しいパッケージングのしくみを述べ、新しいパッケージを作る (それによって 再配布し、インストールし、ユーザーが利用可能になる)ための チュートリアルを提供します。

新しいパッケージングのしくみ

新しいパッケージングのしくみの完全な説明は、このページの他にあります。 より詳しいのは最近 mozilla.org のウェブサイトに追加された Jar パッケージング で、設計、目標、jar パッケージングにとりうるオプションが詳しく説明されています。 ここでフォローするのは、設計のごくかんたんな概要と Mozilla がインストール可能なパッケージに期待するものの説明です。

リソースは、トップレベルにあるcontents.rdf にその中身が定義されている JAR アーカイブに集められます。contents.rdf ファイルは Mozilla の chrome レジストリに対して、アーカイブの構造と内容を記述していて、記述が正確な限り あなたの好きなようにアレンジすることができます。このチュートリアルにしたがって あなたが作るパッケージでは、たとえば、すべてのリソースは content\ サブディレクトリの下におかれますが、単純に skin や locale リソ−スといっしょに 直接トップにアーカイブすることもできます。あなたがそうしたいのなら。

以前は、1つのmanifest.rdf ファイルが全体のパッケージディレクトリや アーカイブ内のリソースを記述していましたが、現在contents.rdf ファイルはあなたのやりたいように、パッケージ記述の大部分を占めることも、 ほんの一部を担うこともできます。すなわち、あなたのパッケージの中に、いろいろな パーツを記述するために複数のcontents.rdf を使うこと(例えば 1つはあなたのパッケージの skin のために、別のは content のために といったふうに)も、従来通り 1つだけのcontents.rdf で済ますこともできます。

Mozilla はこれらの内容の記述や インストレーション作業の一部(このチュートリアルで説明しているように)として レジストレーションによって あるいは installed-chrome.txt という名前のショートカットファイルによっても処理されるリソース に敏感です。 installed-chrome.txt によって開発者は独自の contents.rdf ファイルを指定することができ、開発する内容に応じて登録することができます (ここでは説明していない作業)。別の方法として、chrome レジストリは contents.rdf ファイルに示されます。contents.rfd ファイルは新しいリソースへ指定を変更し、 リソ−スはその時点で Mozilla に登録され、ユーザーが利用できるようになります。

新しいパッケージを作る

このセクションで説明しているパッケージはとてもシンプルなものですが、 新しいパッケージのしくみや 自身をその一部をして含む再配布可能なソフトウェアを作る chrome レジストリを使います。ここで説明しているようなパッケージを一度作ってしまえば、 Mozilla ユーザーは そのダウンロードとインストールを 1ステップで行うことができます。

Barley パッケージ

The Barley windowbarley(オオムギ)パッケージは、2つのボタンと1つの画像要素からなるシンプルな XUL ウィンドウです。 "show aphids" のボタンは、JavaScript ファイルbarley.js で定義された function を呼び出して、 アラート・ダイアログを表示します。

私たちはこのウィンドウへの特別なアクセスのために Mozilla UI を(たとえば、Tasks メニューやほかのどこかの項目として)更新することはないので、barley パッケージを前述のようにユーザーが使える状態にインストールするには、 特別なスタートアップオプションを使って Mozilla を起動します:

mozilla -chrome chrome://barley/content

このオプションは Mozilla に、デフォルト、すなわちメインブラウザウィンドウ以外の chrome をロードすることを指示します。このオプションが機能するためには、指定された chrome がインストールされ、Mozilla に正しく登録されている必要があります。 chrome:// url ポインタは Mozilla/bin/chrome/barley/content ディレクトリに相当し、 インストールされていれば、そこにメインの XUL ファイルや他のリソースが存在します。

パッケージ作成の概要

このチュートリアルは、新しいパッケージを作るための 次のような手順を説明します:

次の XPI ファイルをダウンロードして zip ソフトウェアを使って開き、 ここで説明しているパッケージをしらべる(かインストールする!)ことができます。

ここで説明しているリソースはすべて XPI アーカイブに含まれていて、 あなたの独自の開発に使うために改変することができます。

リソースを開発

いうまでもなく、あなたが最初に作成しなければならないもののひとつは、 あなたが実際に再配布可能にしようとするソフトウェアです。Barley パッケージ UI は、画像のついた単一の XUL ウィンドウです:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?>

<window title="barley window"
  xmlns:html="http://www.w3.org/1999/xhtml"
  xmlns="http://www.mozilla.org/keymaster/gat...re.is.only.xul"
  width="175" height="375" x="20" y="20" persist="width height x y"
  orient="vertical"
  autostretch="always">

  <script src="barley.js"/>

  <image src="barley.gif" />
    <box orient="horizontal" autostretch="never">
      <button label="barley corn" />
      <button label="show aphids" onclick="bar();" />
    </box>
</window>

ウィンドウがインポートする他のファイルは 濃い青 で色分けしてあります。XUL ファイルの先頭のスタイルシート処理手順は新しい skin を参照するのではなく、communicator.css をインポートして その skin の基本的なウィジェットの スタイルを実現することに注意してください。

JavaScript ファイルbarley.js は、以下のように定義された単一の function、bar() を含んでいます:

function bar() {
	alert("aphids");
}

Barley パッケージで使われているのと同じ GIF 画像を使いたいのなら ここ からひっぱることができます。

これらのリソースを開発していて、そのパッケージを作る前なら、 Mozilla の File -> Open(ファイル -> 開く)を使ってbarley.xul を開いて 基本的なレイアウトと機能をテストすることができます。Mozilla はそのファイルを別のウィンドウでは表示しないかもしれません (まして別のパッケージとしては解釈されません)が、画像や JavaScript function がbarley.js に定義されたように働くのは見ることができるはずです (3つのファイルは同じワーキングディレクトリに置かれます)。

リソースを体系づけ(Organizing)

パッケージに含めるための基本的なファイルができたら それらを束ねることができるように、すべてを 1つのディレクトリに置きます。 パッケージに独自のテーマや言語パック、その他のコンポーネントを含めるのなら、それもここです (別のパーツの役割を反映するサブディレクトリ構造を作る必要はありません)。 Barley パッケージのためには、1つのサブディレクトリ content\ を作ればいいだけです (下の図をみてください)。

barley/
  content/
    barley.gif
    barley.js
    barley.xul

contents.rdf ファイルを作成

ソフトウェアパッケージのもっとも重要な要素のひとつがcontents.rdf ファイルで chrome レジストリが認識できる条件としてパッケージの内容を記述するものです。 このような独自の中身をもつ、しかし特別なローカリゼーションやカスタムスキンを持たないパッケージでは、contents.rdf ファイルは Mozilla パッケージの "root" との相対関係で パッケージを記述します。 次のリストでは、赤色の項目は barley パッケージのための記述で あなたの独自のディストリビューションのためには書き換えることができます。

<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:chrome="http://www.mozilla.org/rdf/chrome#">

 <!-- list all the packages being supplied -->
 <RDF:Seq about="urn:mozilla:package:root">
   <RDF:li resource="urn:mozilla:package:barley"/>
 </RDF:Seq>

 <!-- package information -->
 <RDF:Description about="urn:mozilla:package:barley"
   chrome:displayName="Barley Grain"
   chrome:author="Ian Oeschger"
   chrome:name="barley">
 </RDF:Description>

</RDF:RDF>

上のリストのような contents.rdf ファイルをつくって、contents\ サブディレクトリに ほかのパッケージリソースといっしょに置いてください。

 barley/
  content/
    barley.gif
    barley.js
    barley.xul
    contents.rdf

これらの 4つのファイルが、新しいパッケージに必要なすべてです。次のステップは ワーキングディレクトリの中身を zip 化することです。WinZip やその他の ZIP ソフトウェアを使って contents\ サブディレクトリの新しいアーカイブを作り、barley.jar という名前をつけてください:

画像:Barley_JAR.png

このステップが完了すれば、Barley パッケージは Mozilla UI の JAR パッケージと同じ状態になっています。comm.jaren-US.jar、その他のアーカイブされた UI パッケージは似たような(少し複雑だとしても)構造とbarley.jar のような内部仕様をもっています。

Barley インストールスクリプトを作る

あとは、JAR ファイルを Mozilla の XP インストール技術を使ってインストールできるように パッケージかすることです。XPI ファイルフォーマット("zippy" と発音します)は アーカイブをインストールするのに Mozilla の XP インストールを使うことを明示するために使われます。 XPI ファイルは一般的に、インストールされるべきリソース(この場合、Mozilla/bin/chrome ディレクトリにインストールしたいbarley.jar)とインストール作業を導くインストールスクリプト を含んでいます。

Barley のためには、そのインストレーションスクリプトは次のようになっています。:

 

// initInstall(name + version,name,version); 
var err = initInstall("barley v", "barley", "");
logComment("initInstall: " + err);

addFile("Barley Grain",       // displayName from contents.rdf 
  "barley.jar",               // JAR source 
  getFolder("Chrome"),        // target folder 
  "");                        // target subdir 

// registerChrome(TYPE,location,source)
registerChrome(PACKAGE | DELAYED_CHROME, getFolder("Chrome","barley.jar"), "content/");

if (err==SUCCESS)
  performInstall();
else
  cancelInstall(err);

Note that there is no version number on Barley, and so thename + version parameter has a "v" and then nothing else. Note also the use of resource attributes specified in thecontents.rdf file in the JAR. It is the correspondence of this installation script, the resources themselves, and the contents.rdf file that registers the package and makes it available.

Creating a XPI

The final step in the tutorial is to create a XPI archive in which theinstall.js script and thebarley.jar can be redistributed. The archiving of an archive may seem a little redundant--and if you want you can instead use the XPI to archive the install script and "flat", or uncompressed, versions of the resources. But the XPI puts all of the resources of your package together, including the instructions for installing it. Like the JAR format that Mozilla uses to archive the UI packages, the XPI format is just a specially-ordered ZIP file. For a XPI file to be valid and installable, it must contain an installation script like the one above that tells Mozilla XPInstall where to put the new resources and how to register them.

To create a XPI, use your ZIP archiver again to archive the JAR file and the installation scriptinstall.js. The archive, named barley.xpi, should contain the following two files:

barley.jar
install.js

This ZIP file, when opened from Mozilla using File -> Open, will initialize its own installation and display a message like the following:

Image:barley_dlog.png

When you click OK, Mozilla installs the new package. Exit Mozilla and restart it with

mozilla -chrome chrome://barley/content

and the new package displays. The resources are installed in the mozilla/bin/chrome/ directory, and the XPI itself can be redistributed for installation on other machines.

Notes

  1. There exist a lot of ZIP archivers/unarchivers. For Unix, you can either use the preinstalled zip tool, or e.g. 7-Zip (free software). For Windows, you can e.g. use 7-Zip (free software), or WinZip (commercial).

See Also

Original Document Information

 

ドキュメントのタグと貢献者

タグ: 
このページの貢献者: wbamberg, SphinxKnight, Yama, Mgjbot
最終更新者: wbamberg,