mozilla

Creating XPI Installer Modules

この記事は Mozilla Japan 翻訳部門または関連グループにより過去に翻訳された文書を移行したものです。 移行元の文書。よって、英語版と内容が異なる場合や、MDN の他の記事との整合性がとれていない場合があります。

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 はこれらの内容の記述や インストレーション作業の一部(このチュートリアルで説明しているように)として レジストレーションによって あるいは <tt>installed-chrome.txt</tt> という名前のショートカットファイルによっても処理されるリソース に敏感です。 <tt>installed-chrome.txt</tt> によって開発者は独自の 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="<font color="darkblue">barley.js</font>"/>

  <image src="<font color="darkblue">barley.gif</font>" />
    <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#">

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

 <font color="green"><!-- package information --></font>
 <RDF:Description about="urn:mozilla:package:<font color="darkred">barley</font>"
   chrome:displayName="<font color="darkred">Barley Grain</font>"
   chrome:author="<font color="darkred">Ian Oeschger</font>"
   chrome:name="<font color="darkred">barley</font>">
 </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 のためには、そのインストレーションスクリプトは次のようになっています。:


<font color="green">// initInstall(name + version, name, version); </font>
var err = initInstall("<font color="darkred">barley v</font>", "<font color="darkred">barley</font>", "");
logComment("initInstall: " + err);

addFile("<font color="darkred">Barley Grain</font>",      <font color="green"> // displayName from contents.rdf </font>
  "<font color="darkred">barley.jar</font>",               <font color="green">// JAR source </font>
  getFolder("Chrome"),      <font color="green">  // target folder </font>
  "");                       <font color="green"> // target subdir </font>

<font color="green">// registerChrome(TYPE, location, source)</font>
registerChrome(PACKAGE | DELAYED_CHROME, getFolder("Chrome","<font color="darkred">barley.jar</font>"), "<font color="darkred">content/</font>");

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

Note that there is no version number on Barley, and so the name + version parameter has a "v" and then nothing else. Note also the use of resource attributes specified in the contents.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 the install.js script and the barley.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[zip] again to archive the JAR file and the installation script install.js. The archive, named <tt>barley.xpi</tt>, 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 <tt>mozilla/bin/chrome/</tt> directory, and the XPI itself can be redistributed for installation on other machines.

Notes

  1. 註: zip
    There exist a lot of ZIP archivers/unarchivers. For Unix, you can either use the preinstalled <tt>zip</tt> 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

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

タグ: 
Contributors to this page: Mgjbot, Yama
最終更新者: Yama,