Firefoxの拡張(extension)機能作成(まとめ)

WindowsFirefox(1.5以降)の拡張機能(extension)を作成する方法のまとめ。詳しくはhttp://kb.mozillazine.org/Getting_started_with_extension_developmentを参照のこと。

  1. 確認用プロファイルの作成
  2. デバッグ用設定
  3. 作業フォルダの作成
  4. 作業フォルダを認識させる
  5. xpiを作成する

確認用プロファイルの作成

通常のブラウズ用とは別途開発用にプロファイルを作成しておく。スタートメニューの[ファイル名を指定して実行]から

firefox -profilemanager

でプロファイルマネージャを起動する。実行する場合には、事前にfirefoxは終了させておくこと。このプロファイルマネージャで開発用のプロファイル名(ここではdev)を作成する。
この作成したプロファイル名で起動するように、以下のバッチを作成しておくといいかも。

set MOZ_NO_REMOTE=1
"C:\Program Files\Mozilla Firefox\firefox.exe" -P dev

デバッグ用設定

作成したプロファイルフォルダに以下の設定をuser.jsとして保存しておくことで、デバッグしやすくなるとのこと。

// Log errors in chrome file to the Javascript Console
user_pref( "javascript.options.showInConsole", true);
// Disable XUL cache, so chrome changes do not require a restart
user_pref( "nglayout.debug.disable_xul_cache", true);
// dump() function outputs to console if application started with -console flag
user_pref( "browser.dom.window.dump.enabled", true);
// Enable strict javascript warnings, to produce clean extensions
user_pref( "javascript.options.strict", true);

作業フォルダの作成

作業フォルダ(ここではC:\FireFox\extest)を作成する。その配下として、以下のファイル、フォルダを用意する。

  • content (overlay用のXULJavaScriptなどを格納するフォルダ)
  • locale (各ロケール用ファイルを保存するフォルダ)
    • en-US (英語用フォルダ)
    • ja-JP (日本語用フォルダ)
    • その他のロケールがあれば
  • skin (XULで使用する画像やCSSなどを保存するフォルダ)
  • chrome.manifest (マニフェストファイル:各ファイルの関連を記述)
  • install.rdf (この拡張機能RDF)
chrome.manifest

chrome.manifestはデバッグ時とxpi作成時とは指定パスを変える。デバッグ時は以下(コメントがxpi作成時)。

content	extest	content/
#content	extest	jar:chrome/extest.jar!/content/
overlay	chrome://browser/content/browser.xul	chrome://extest/content/extension-browserOverlay.xul

skin	extest	classic/1.0	skin/
#skin	extest	classic/1.0	jar:chrome/extest.jar!/skin/
style	chrome://global/content/customizeToolbar.xul	chrome://extest/skin/extension-browserOverlay.css

locale	extest	en-US	locale/en-US/
locale	extest	ja-JP	locale/ja-JP/
#locale	extest	en-US	jar:chrome/extest.jar!/locale/en-US/
#locale	extest	ja-JP	jar:chrome/extest.jar!/locale/ja-JP/
install.rdf

拡張機能に関する記述を行う。最初のDescriptionのidはxpiを配布する場合はGUIDを作成する必要があるが、デバッグ時はメールアドレス風*1のものを設定。作業フォルダを認識させるために必要になる。最後のDescriptionはFirefoxの記述で、id({ec8030f7....})はFirefoxを表すものなので固定。

<?xml version="1.0"?>
<RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#"
         xmlns:NC="http://home.netscape.com/NC-rdf#"
         xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

  <RDF:Description RDF:about="urn:mozilla:install-manifest"
                   em:id="foobar@miyagino.net"
                   em:version="0.1"
                   em:name="Firefox Extension test"
                   em:description="Extension test of Firefox."
                   em:creator="Kazuo Kohchi"
                   em:homepageURL="http://www.miyagino.net/"
                   em:iconURL="chrome://extest/skin/icon32x32.png"
                   em:aboutURL="chrome://extest/content/about.xul">
    <em:targetApplication RDF:resource="rdf:#$abc123"/>
    <em:contributor>Kazuo Kohchi</em:contributor>
  </RDF:Description>
  <RDF:Description RDF:about="rdf:#$abc123"
                   em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
                   em:minVersion="2.0.0.0"
                   em:maxVersion="2.0.0.*" />
</RDF:RDF>

作業フォルダを認識させる

プロファイルフォルダのextensionsフォルダ(なければ作成する)配下に上記install.rdfで指定したメールアドレス風idのファイルを作成して、フォルダパスを記述する。

> cd C:\Documents and Settings\XXXX\Application Data\Mozilla\Firefox\Profiles\ZZZZ.dev\extensions
> type foobar@miyagino.net
C:\FireFox\extest

これで作成したプロファイル用のfirefoxを実行すればよいはず。toolbarへの拡張機能の場合は、最初にツールバーのカスタマイズウィンドウにのみ表示されている。それからツールバーにドラッグしてあげる(このことを知らなくって、なぜツールバーにでないのか、半日悩んだ)。

xpiを作成する

  • chrome.manifestをxpi用に変更を行う。
  • GUIDを作成する。WindowsNT base system用
  • 以下バッチを実行する。7-Zipをインストールしておくこと。
set x=%cd%
mkdir build\chrome
mkdir chrome
xcopy content chrome\content /s/e/i
xcopy locale chrome\locale /s/e/i
xcopy skin chrome\skin /s/e/i
cd chrome
"C:\Program Files\7-Zip\7z" a -tzip "%x%.jar" * -r -mx=0
move "%x%.jar" ..\build\chrome
cd ..
copy install.rdf build
copy chrome.manifest build
cd build
"C:\Program Files\7-Zip\7z" a -tzip "%x%.xpi" * -r -mx=9
move "%x%.xpi" ..\
cd ..
rmdir chrome /s/q
rmdir build /s/q

バッチを作成するときにいつも思うが、shellのほうがやっぱ、数段楽。もうちょっと使い勝手よくなってほしいなぁ。>MSさん。

*1:id:kazuokohchi:20061103