Firefox 3ではじめる拡張機能開発

第7回インストーラの作成

前回まででタグヘルパー拡張機能の開発は完了しました。今回は、第6回での「全OS共通スキン」版のソースファイルを元に、タグヘルパー拡張機能を配布するためのインストーラの作成を行います。

なお、実際に作成したインストーラは、下記URLから入手可能です。

インストーラのフォルダ構成

拡張機能のインストーラは、XPI(クロスパッケージインストーラモジュール)と呼ばれる拡張子が「.xpi」のファイルですが、実は単純なZIP形式の圧縮ファイルです。とはいえ、これまで開発してきたソースファイルのフォルダ構成をそのまま単純に圧縮すればよいというものではなく、インストーラ内部のフォルダ構成は、タグヘルパー拡張機能の場合であれば通常図1のようになります。インストーラのファイルを「taghelper.xpi」とすると、その内部には「chrome」フォルダ、インストールマニフェスト、クロムマニフェストの3つが圧縮されており、さらに「chrome」フォルダ内には、⁠content⁠⁠、⁠locale⁠⁠、⁠skin」の3フォルダを圧縮した「taghelper.jar」が格納されています。

図1 インストーラのフォルダ構成
図1 インストーラのフォルダ構成

クロムマニフェストの修正

インストーラ内部が図1のようなフォルダ構成となるため、クロムマニフェストに記述した⁠各パッケージのソースファイルを格納したフォルダへの相対パス⁠を、リスト1の内容に変更する必要があります。そこで、テストインストール用のクロムマニフェストをファイル名「chrome.manifest.bak」のようにしてバックアップ後、リスト1のように修正してください。

リスト1 インストーラ作成用のクロムマニフェスト
content  taghelper  jar:chrome/taghelper.jar!/content/ 
locale  taghelper  en-US  jar:chrome/taghelper.jar!/locale/en-US/ 
locale  taghelper  ja-JP  jar:chrome/taghelper.jar!/locale/ja-JP/ 
skin  taghelper  classic/1.0  jar:chrome/taghelper.jar!/skin/classic/ 
overlay  chrome://browser/content/browser.xul  chrome://taghelper/content/overlay.xul 

なお、インストーラ作成後、再びテストインストール状態での拡張機能の開発を続けるには、バックアップした「chrome.manifest.bak」を元に戻してFirefoxを再起動してください。やや面倒ですが、今後はテストインストール用のクロムマニフェストと、インストーラ作成用のクロムマニフェストの両者を管理していく必要があります。

インストーラの作成

引き続き、ファイルを圧縮してリスト1のフォルダ構成のインストーラを作成する作業を行います。なお、圧縮ファイルを作成するには、Windows XPであれば圧縮フォルダ機能(圧縮対象のファイル・フォルダを選択し、右クリックから「送る⁠⁠→⁠圧縮 (zip 形式) フォルダ」を実行)でも構いません。ただ、7-Zip[1]のような圧縮率を指定して圧縮可能なツールを使用すると、最適化されたインストーラを作成することが可能です。

はじめに、⁠content」⁠locale」⁠skin」の3フォルダを圧縮し、⁠taghelper.jar」を作成します。次に、作業フォルダ直下へ「chrome」フォルダを作成し、その中へ「taghelper.jar」を格納します。最後に、⁠chrome」フォルダ、⁠chrome.manifest」リスト1のように修正済み⁠⁠、⁠install.rdf」の3ファイルを圧縮し、⁠taghelper.xpi」を作成します。以上でインストーラの作成は完了です。

なお、圧縮率を指定して圧縮する場合、⁠taghelper.jar」の圧縮率は低く、⁠taghelper.xpi」の圧縮率は高くすることでインストーラが最適化されます。

インストーラの動作確認

インストーラの作成が完了したら、実際にインストールできることの確認を行います。ただし、現在開発用に使用しているプロファイルは、タグヘルパー拡張機能がすでにテストインストール済みであるはずですので、別のプロファイル上で動作確認を行う必要があります。

Firefoxのプロファイルマネージャ[2]を起動し、新しいプロファイルを作成するか、タグヘルパー拡張機能がインストールされていない別のプロファイルを選択し、Firefoxを起動してください。その後、インストーラのファイル「taghelper.xpi」をFirefoxのウィンドウへドラッグ&ドロップし、インストールが正常に開始されることを確認してください。さらに、インストール完了後Firefoxを再起動し、タグヘルパー拡張機能が正常に動作することを確認してください。

アップデートマニフェストによる拡張機能の自動更新

よく知られているように、FirefoxはFirefox自身やインストールされている拡張機能を自動的に更新する機能を備えています。Firefoxのアドオンマネージャで「更新を確認」すると、各拡張機能に新しいバージョンがあるかどうかをチェックし、新しいバージョンが見つかった場合は「更新」パネルを表示し、ユーザが「更新をインストール」ボタンをクリックすることで簡単にバージョンアップすることが可能となります図2⁠。

図2 アドオンマネージャでの更新のインストール例
図2 アドオンマネージャでの更新のインストール例

このような自動更新の仕組みは、⁠アップデートマニフェスト」と呼ばれる更新情報を記述したファイルによって実現されます。アドオンマネージャにて「更新を確認」すると、各拡張機能のインストールマニフェスト中のタグで示されたURLからアップデートマニフェストを取得します。もし、取得したアップデートマニフェスト中に記載された拡張機能のバージョンが、現在インストールされているバージョンよりも新しい場合、⁠更新」パネルを表示してユーザへ通知します。⁠更新」パネルにて「更新をインストール」ボタンを押すと、アップデートマニフェスト中に記載されたURLから新しいバージョンのインストーラをダウンロードし、インストールを実行します。

ただし、インストールマニフェスト中にの記載が無い場合、アドオンマネージャは自動的に「Firefox Add-ons」注3からアップデートマニフェストを取得しようと試みます。

Firefox 3では、Firefox 2以前とは異なり、暗号化されていない通信経路(すなわちhttpプロトコルのURL)からアップデートマニフェストを取得したり、新しいバージョンのインストーラをダウンロードすることに制約が設けられました。具体的には、インストールマニフェストに記載されたアップデートマニフェストのURLがhttpプロトコルである拡張機能をインストールしようとすると、図3のようなエラーメッセージが表示されます。

図3 安全な更新方法が用意されていない拡張機能をインストールしようとしたときのエラー
図3 安全な更新方法が用意されていない拡張機能をインストールしようとしたときのエラー

このようなセキュリティ的な制約を考慮した上で、開発者が将来的なバージョンアップも見越して拡張機能を配布するには、通常下記の2通りの方法のうちのいずれかを選択することとなります。

  • (1) ⁠Firefox Add-ons」上で拡張機能を配布し、Webサイトによって自動的に生成されるアップデートマニフェストを用いる。
  • (2) 自分で作成したアップデートマニフェストを用い、httpsプロトコルでの暗号化通信に対応したWebサーバ上で拡張機能を配布する。

また、どうしてもhttpsプロトコルでの暗号化通信に対応していないWebサーバ上で拡張機能を配布したい場合、下記(3)の方法があります。

  • (3) 自分で作成したアップデートマニフェストへ電子署名を施して拡張機能を配布する。

多くのレンタルサーバはhttpsプロトコルでの暗号化通信に非対応かと思いますので、レンタルサーバ上で自由に拡張機能を配布したい方は、(3)の方式とする場合が多いでしょう。ここからは、(1)(2)の方法について簡単に解説します。なお、(3)の方法については次回解説します。

「Firefox Add-ons」での拡張機能の配布

もっとも簡単かつ安全にアップデートも含めて拡張機能を配布する方法は、⁠Firefox Add-ons」へ登録して公開する方法となります。前述のように、インストールマニフェストにの記載が無い拡張機能の更新を確認すると、自動的に「Firefox Add-ons」からアップデートマニフェストを取得しようとしますが、その拡張機能が「Firefox Add-ons」で公開されているものであれば、Webサイト側が適切なアップデートマニフェストを自動的に生成して返してくれます。もちろん、このときの通信はすべてhttpsプロトコルで安全に行われます。したがって、開発者はアップデートマニフェストを作成する必要が無く、新しいバージョンのインストーラを作成したら、単純に「Firefox Add-ons」へ再登録すれば良いだけになります。また、⁠Firefox Add-ons」で拡張機能を公開した際のメリットとして、アドオンマネージャの「アドオンを入手」パネルから検索およびインストールが可能となります図4⁠。

図4 アドオンマネージャでの拡張機能の検索例
図4 アドオンマネージャでの拡張機能の検索例

一方、⁠Firefox Add-ons」で拡張機能を公開する(初期登録時のサンドボックス状態から脱出する)にはレビューアによる審査を通過する必要があり、またレビューは新しいバージョンを再登録する都度行われますので、緊急を要するアップデート時でもレビュー完了を待たなければならないといったデメリットがあります。

httpsプロトコルでの暗号化通信に対応したWebサーバでの拡張機能の配布

httpsプロトコルでの暗号化通信に対応したWebサーバでインストーラおよびアップデートマニフェストを公開することで、Firefoxのセキュリティ的な制約を受けることなく拡張機能の自動更新が可能となります。ただし、この方法では「Firefox Add-ons」で配布する場合とは異なり、自分でアップデートマニフェストを作成・公開しなければなりません。さらに、インストールマニフェストへリスト2のように<em:updateURL>タグを追加してアップデートマニフェストのURLを記載する必要があります。なお、リスト2中の<em:updateURL>タグで示したURLは実際には存在しません。

リスト2 インストールマニフェストの修正(例)
<?xml version="1.0"?>

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:em="http://www.mozilla.org/2004/em-rdf#">

  <Description about="urn:mozilla:install-manifest">
    <em:id>taghelper@xuldev.org</em:id>
    <em:type>2</em:type>
    <em:name>Tag Helper</em:name>
    <em:version>0.7</em:version>
    <em:description>Generates bookmark tags from the selection.</em:description>
    <em:creator>Your Name</em:creator>
    <em:homepageURL>http://www.xuldev.org/misc/sd.php</em:homepageURL>
    <em:updateURL>https://some-secure-server/taghelper/update.rdf</em:updateURL>
    <em:localized>
      <Description>
        <em:locale>ja</em:locale>
        <em:name>タグヘルパー</em:name>
        <em:description>選択範囲からブックマークのタグを生成します。</em:description>
        <em:creator>あなたの名前</em:creator>
      </Description>
    </em:localized>
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>3.0</em:minVersion>
        <em:maxVersion>3.0.*</em:maxVersion>
      </Description>
    </em:targetApplication>
  </Description>

</RDF>

次に、アップデートマニフェストを作成します。アップデートマニフェストのファイル名は特に決められておりませんが、⁠update.rdf」とするのが一般的です。アップデートマニフェストの内容はリスト3のようになります。<em:version>タグの値が最新のバージョン番号、<em:updateLink>の値が最新バージョンのインストーラのURLを表します。なお、リスト3中の<em:updateLink>タグで示したURLは実際には存在しません。

リスト3 アップデートマニフェスト(例)
<?xml version="1.0"?>

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:em="http://www.mozilla.org/2004/em-rdf#">

  <Description about="urn:mozilla:extension:taghelper@xuldev.org">
    <em:updates>
      <Seq>
        <li>
          <Description>
            <em:version>0.7</em:version>
            <em:targetApplication>
              <Description>
                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
                <em:minVersion>3.0</em:minVersion>
                <em:maxVersion>3.0.*</em:maxVersion>
                <em:updateLink>https://some-secure-server/taghelper/taghelper.xpi</em:updateLink>
              </Description>
            </em:targetApplication>
          </Description>
        </li>
      </Seq>
    </em:updates>
  </Description>

</RDF>

以上の作業が完了したら、アップデートマニフェストとインストーラを、それぞれリスト2の<em:updateURL>で示したURL、リスト3の<em:updateLink>で示したURLでダウンロード可能となるよう、Webサーバで公開します。なお、Webサーバからインストーラをダウンロードする際、WebサーバはHTTPレスポンスヘッダ「Content-type: application/x-xpinstall」を付加するよう設定しておく必要があります。詳しくは下記URLの「拡張機能 XPI の作り方」を参照してください。

Extension Packaging - MDC
URLhttp://developer.mozilla.org/ja/Extension_Packaging

まとめと次回の予告

今回は、タグヘルパー拡張機能のインストーラを作成する手順と、⁠Firefox Add-ons」あるいはhttpsプロトコルでの暗号化通信に対応したWebサーバ上で拡張機能を配布する方法について解説しました。次回は、アップデートマニフェストへ電子署名を施し、httpsプロトコル非対応のWebサーバで拡張機能を配布する方法について解説します。

おすすめ記事

記事・ニュース一覧