まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。
この広告は、90日以上更新していないブログに表示しています。
4 年前に Firefox 拡張機能の作り方についての記事を書いた のですが、いい加減内容が古いので、改めてFirefox 拡張を作ろうと思った人向けにFirefox 拡張の作り方について概要を記しておこうかと思います。
タイトルにあるように、本記事は 2013 年に書かれたもので、現在ではすでに内容が古くなっています。 現在でも通用する部分もありますが、基本的には一から調べなおした方が良いと思います。
これ以降は古い内容である可能性がありますので、ご注意ください。
3 種類の方法があるので、拡張機能を作り始める前にどの方法を使うかを決める必要があります。
個人的な感触としては、上の方が初心者向けです。 最も多くのことができるのは従来からあるXUL オーバーレイを用いる方法です。 Add-onSDK を用いる方法が一番できることは少ないです (が、実験的にXPCOM の使用が可能になっているので、それを使えば他の 2 つでできるほとんどのことは可能になります)。
従来からあるXUL オーバーレイを用いる方法では、Firefox 拡張インストール後に再起動が必要です。 他の 2 つはインストール後のFirefox 再起動は不要です。
それぞれについての概要を以下で説明します。
Add-onSDK はローカルホスト上の開発環境であり、Add-on Builder は web 上での開発環境です。 ローカルホスト上に環境構築できないなどの理由がなければ、Add-onSDK を使えばいいでしょう。 (これ以降、特に Add-on Builder については言及しませんが、基本的には Add-onSDK を使う場合と同じだと思います。 使ったことがないのでわかんないのですが。) ちなみに Add-onSDK は、昔はJetpackSDK と呼ばれていました。 Add-onSDK で開発したFirefox 拡張は、Firefox 4 以降にインストールできます。
Add-onSDK を使うと、主にJavaScript と HTML、CSS を使ってFirefox 拡張を開発することができます。 Add-onSDK のAPI としてFirefox 拡張に必要な機能がある程度提供されているので、Firefox 独自のXUL*1 やXPCOM*2 について知らなくても、拡張機能を開発することができます。
まずは Add-onSDK をインストールします。 下記ページが参考になります。
コマンドラインを使い慣れているなら、特に難しいところもないはずです。Python 2 系が必要になるので、場合によってはそれがちょっと面倒かもしれません。
Add-onSDK のインストールが完了したら、cfx コマンドが使えるようになります。 cfx コマンドを使うことで、Firefox 拡張の雛形を生成したり、開発中のFirefox 拡張を試してみたりテストを実行したりできます。
あとはチュートリアルなどを見れば、どのようなことができるのかわかると思います。
チューリアルの 「開発テクニック」 の中にリンクがあるので改めて説明する必要はないかもしれませんが、特に最初は動作を調べる上で重要だと思いますのでここにも書いておきます。
Add-onSDK を使って開発する場合は、拡張機能のコードの中でconsole.log
関数などを使ってデバッグ出力を行うことが出来ます。cfx run
によってFirefox を起動した場合は、そのコマンドラインにconsole.log
の出力が表示されます。 それ以外の場合は、Firefox のエラーコンソール (Ctrl + Shift + J で開くウィンドウ) に出力されます。
Firefox 拡張で可能な機能でも、全ての機能が Add-onSDK のAPI で提供されているわけではありません。 例えばローカルファイルの操作などは Add-onSDK のAPI では現在のところ不可能です。 そういった機能は、XPCOMコンポーネントとして提供されています。 Add-onSDK を使ってFirefox 拡張を開発する場合でもXPCOMコンポーネントは使用できますので、Add-onSDK のAPI では不足する場合はXPCOMコンポーネントを直接使用しましょう。 下記ページが参考になります。
ただ、この機能は今のところ Add-onSDK の実験的な機能ということですので、XPCOMコンポーネントを使用しないといけないような拡張機能が作りたい場合はXUL ベースの拡張機能として開発する方が良さそうです。
Firefox の UI はXUL という言語で記述されています。 この開発方法ではFirefox アプリケーションの XUL を拡張機能側から上書きする (オーバーレイ) ことで UI を変更したり、読み込むJavaScript ファイルを決定したりします。拡張機能のメインのJavaScript ファイルは、オーバーレイしたXUL から読み込まれることで実行されるわけです。 (UI の変更自体は、XUL オーバーレイを使用しなくても、JS 側から DOM 操作で変更することも可能です。)
基本的には、DOM 操作によるXUL の変更やイベントハンドラの追加と、XPCOM コンポーネント を使用することで拡張機能としての処理を実装することになります。 例えば、アクティブなブラウザウィンドウを取得するのにもXPCOMコンポーネントを使用する必要があります。 (FUEL という拡張機能用のAPI もありますが、あまり主流ではなさそうです。)
他の 2 つの方法とは違い、この方法で開発したFirefox 拡張はインストール時にFirefox の再起動が必要となります。 また、他の開発方法ではFirefox 4 以降にしかインストールできませんが、この方法ではFirefox 3.6 やそれより前のFirefox にもインストールできる拡張機能を開発できます。
従来からのXUL オーバーレイを用いた拡張機能については参考になるページが結構豊富なので、参考になるページを見ながら開発を進めると良いでしょう。
開発の流れは、下記ページにまとまっています。
上記ページでは、XPI ファイルにパッケージングする際に JAR ファイルを作成していますが、実際にはわざわざ JAR ファイルを作成する必要はなく、全てまとめて ZIP 圧縮して拡張子を XPI に変更しても良いです。 もともと JAR ファイルに固めるようになっていたのはパフォーマンス上の理由からだったようですが、Firefox 4 以降ではむしろ JAR ファイルに固めない方が良いようです。
XUL オーバーレイの際に読み込まれたJavaScript ファイルは、Chrome ウィンドウ (Firefox そのもののウィンドウやダイアログなどのウィンドウを表すオブジェクト) の名前空間で実行されます。 そのため、例えば JS 中で alertメソッドを呼び出すとそのまま alert が表示されます。 もっとも簡易なデバッグ出力はこの方法だと思います。
他にも、エラーコンソールに出力するなど、デバッグ用の出力の方法はいくつかあります。 詳細は 「5章:Firefox拡張機能を作ってみよう! 開発環境の準備 - Firefox拡張機能開発チュートリアル (XHTML)」 の下の方のコラム (「JavaScriptデバッグ方法」) をご覧ください。
ブートストラップ型ではないXUL ベースの拡張機能の開発の際の考え方としては、
という風にするのが良いのかなーと思っています。 私は下記のことを最初のころ理解できてなくて苦労しました。
ここら辺のことについて saneyuki さんから言及頂きましたので合わせてご覧ください。
従来からのXUL ベースのFirefox 拡張は、インストール時にFirefox の再起動が必要なわけですが、Firefox 4 からは再起動不要の拡張機能も開発出来るようになっています。 Add-onSDK を使った拡張機能は全て再起動が不要になるようになっているのですが、Add-onSDK を使わずに再起動不要の拡張機能を開発する方法もあります。
DOM 操作でXUL をいじったり、XPCOM を使ったりという部分はブートストラップ型ではないXUL ベースの拡張機能と同じなのですが、XUL オーバーレイを使用しないという点で大きく異なっています。
最低限必要なファイルは、下記の 2 つです。
install.rdf は、ブートストラップ型でないXUL ベースの拡張機能でも使用していたものと基本的には同じですが、ブートストラップ型にするために下記内容を追加する必要があります。 ((ここでem
は名前空間URI “http://www.mozilla.org/2004/em-rdf#” を表すプレフィックスです。))
<em:bootstrap>true</em:bootstrap>
bootstrap.js には、インストール時や拡張機能の有効化、無効化時、アンインストール時などに呼び出されるいくつかの関数を記述します。 サンプルを Gist にあげました。
この 2 つのファイルを ZIP に固めて拡張子を XPI に変更すると、Firefox にインストールできる形になります。
bootstrap.js はChrome ウィンドウとは独立な名前空間で実行されます。JavaScript コードモジュールから全ての UI 操作を行うのと同じような感じで開発を進めることになると思います。 例えば、ウィンドウにツールバーボタンを追加するような拡張機能の場合、新しいウィンドウが開かれる際のイベントを検出して、新しいウィンドウが開かれたらそこにツールバーボタンを追加する、というようなことを拡張機能が行う必要があります。
また、拡張機能の無効化時などに再起動がされないので、拡張機能で行った UI 変更などは拡張機能自身が責任を持って元に戻すということをしなければなりません。
他の 2 つの開発方法と比べて考えるべき事が多くて難しいので、Firefox 拡張周りの知識が乏しい状態でブートストラップ型のXUL ベースのFirefox 拡張を開発するのはやめておいた方が良いんじゃないかなーと思います。
作成した XPI パッケージは、基本的には 「Add-ons forFirefox」 で公開すると良いでしょう。Mozilla の人によるレビューがあるのでアップロードしてから実際に一般ユーザーが使用できるまでに 1 週間程度かかりますが、「Add-ons forFirefox」 で公開しておくと拡張機能のバージョンアップ時に自動的にアップデートされるようになるので、その点は便利です。
Firefox 拡張開発にあたっては下記の書籍が参考になります。 特にブートストラップ型のXUL ベースの拡張機能の開発についてはあまり web 上にまとまった情報がないので、『Firefox Hacks Rebooted』 は非常に参考になりました。 (Firefox 8 のころの情報なので、多少最新の情報とは違う部分もありますが、本質的な部分の勉強には最適だと思います。)
Firefox Hacks Rebooted ―Mozillaテクノロジ徹底活用テクニック
Firefox 3 Hacks ―Mozillaテクノロジ徹底活用テクニック
Web 上では、下記ページにMozilla による情報がまとまっていますので目を通すと良いでしょう。
あと、Mozilla 関係の開発者向けの情報はだいたい MDN (Mozilla Developer Network) にまとまっているので、何か調べたいことがあれば、調べたいキーワードに 「MDN」 をくっつけてググると良いです。
*2:クロスプラットフォームなコンポーネントオブジェクトモデル。 これらにより、例えばローカルファイルの読み書きをする機能などが提供される
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。