Getting Started with Firefox Extensions

拡張機能とは何か?

拡張機能 (Extensions) は、Firefox や Thunderbird, SeaMonkey などの Mozilla アプリケーションに新しい機能を付け加える小さなアドオンです。ツールバーボタンから全く新しい機能まで何でも付け加えることができます。ダウンロードのサイズが小さく、追加の機能を必要としているユーザに対して、その個々の必要性にあった機能を提供できます。

これは、拡張機能のページからの引用です。

引用した文にも書かれているように、拡張機能は、Mozilla アプリケーションに新しい何かを追加する小さなアプリケーションです。このチュートリアルは Firefox 用の拡張機能に焦点を当てていますが、同じ (またはよく似た) 原理を Thunderbird や Seamonkey など他のアプリケーションの拡張機能を作成するときにも適用できます。

拡張機能アドオンの定義の違いにも注意する必要があるでしょう。すべての拡張機能はアドオンですが、アドオンにはテーマやプラグイン、言語パックも含まれます。このチュートリアルは拡張機能開発について書かれていますが、テーマや言語パックもよく似た方法で開発されています。プラグインについては、これらと完全に異なるため、このチュートリアルでは扱いません。プラグインとその開発については、プラグインのページをお読みください。

Firefox は、とてもリッチで柔軟性に富んだアーキテクチャを提供しています。拡張機能開発者が機能を追加したりユーザエクスペリエンスを改善したり、ブラウザの機能を完全に置き換えたり削除したりできます。Mozilla Add-ons リポジトリ (AMO) には、莫大な数の様々な機能を持った拡張機能があります: コンテンツフィルタリング (AdBlock Plus, NoScript)、ウェブアプリケーションとの相互連携 (Delicious Bookmarks, eBay Sidebar)、ウェブ開発 (DOM Inspector, Firebug)、子供を保護するもの (Glubble For Families) まであります。これらは上級者向けの複雑な拡張機能です。ここでは、このような拡張機能の開発に必要なことの大部分を学びます (Glaxstar は実際に、上記のいくつかの拡張機能の開発に携わっています)。

拡張機能には現在3種類の形態があります。Add-ons SDK extensions(Jetpacksとも呼ばれます)・bootstrapped extensions、そして従来の拡張機能です。もしあなたがアドオン開発を始めたいだけなら、Add-ons SDKを用いる事が素早くシンプルに作って実行できる良い手段です。このチュートリアルは従来の拡張機能に焦点を当てており、少し異なっています。中でもBootstrapped extensionsは一段と難しいため、試す前にこのチュートリアルに目を通すべきです。

まずは、非常に簡単な拡張機能から見ていきましょう。

Hello World 拡張

私たちの拡張機能のサンプルとチュートリアルは、Firefox バージョン 3 以降を対象にしていますが、ほとんどのものは以前のバージョンの Firefox でも動作します。特定のバージョンでしか動作しない機能については、そのことを明確にしていくつもりです。

初めに、基本的な "Hello World" の拡張機能から始めます。以下のリンクをクリックして拡張機能をインストールしてください。

Hello World をインストール

このリンクは、ウェブサーバが指定したファイルの種類 (Content-type) によって、拡張機能がインストールされるかファイルがダウンロードされます。インストールされるための適切なファイルの種類は、application/x-xpinstall です。このサイトでは、ファイルがダウンロードされます。

ファイルの種類が正しく設定されていれば、このサイトは Firefox へのアドオンのインストールが許可されていないことが通知されるでしょう。これは、ユーザの承諾なしでサイトから拡張機能がインストールされることを防ぐための安全対策であり、悪意のある拡張機能がデータの盗難やファイルの消去、置き換えなど望まれない動作を起こし、他のマルウェアと同様の損害を受けることを防ぐために必要です。AMO は、予めインストールが許可された唯一のサイトです。AMO で公開されたアドオンは、セキュリティチェックを含むレビュープロセスを経ています。

ダウンロードしたファイルを Firefox のコンテンツエリアにドラッグ&ドロップしてください。拡張機能のインストールが開始されます。

拡張機能のインストールを知らせるウィンドウが表示されます。ウィンドウには拡張機能の作者名などの情報が含まれ、作者情報が未検証であると表示されるでしょう。デジタル証明書で署名された拡張機能だけが、その真正性を証明できます。署名された拡張機能はごく少数しかありませんが、後で署名する方法についても扱います。

[今すぐインストール] ボタンをクリックしてください。拡張機能がインストールされた後、Firefox の再起動を求められます。アドオン (プラグインを除く) のインストールとアンインストール、有効化、無効化を完了するには、Firefox を再起動する必要があります。これを回避する簡単な方法はありません。これは、他の拡張機能やテーマを操作する拡張機能を作成するときに覚えておくべき重要なポイントです。この問題について扱っていたバグを参照してください。

ブラウザを再起動すると、アドオンマネージャが表示されます。アドオンマネージャには、拡張機能の名前とバージョン、簡単な説明が表示されます。

アドオンマネージャを閉じてください。メインの Firefox ウィンドウにいつもと違うところがないか探してください。

見つけられましたか? メニューバーに "Hello World!" と書かれた新しいメニューが追加されています。このメニューを開き、その下のメニュー項目を選択すると、挨拶のメッセージが書かれたダイアログが現れます。[OK] ボタンをクリックして閉じてください。

この拡張機能がすることはこれだけです。それでは、その内容を探っていきましょう。

拡張機能の内容

インストールした拡張機能ファイルの名前が xulschoolhello1.xpi であることに気が付きましたか? XPI ("ジッピー" と読みます) は、クロス・プラットフォーム・インストーラ (Cross-Platform Installer) から来ています。この形式のインストーラファイルは、すべてのメジャーなプラットフォームで動作し、ほとんどの拡張機能の XPI がこれに当てはまります。XPI は単に ZIP 形式で圧縮されたファイルですが、XPI ファイルのリンクをクリックして Firefox が xpi 拡張子を持つファイルを読み込むと、インストール処理が開始されます。

XPI ファイルの中身を調べるには、インストールではなく、ファイルをダウンロードする必要があります。リンクボタンをクリックするとサーバがインストールを開始してしまうときは、インストールリンクを右クリックしてファイルを保存してください。

次に、XPI ファイルを展開します。ファイルを展開するにはいくつかの方法がありますが、一つは、ファイル名の拡張子を zip から xpi に変更して開く方法があります。もう一つは、ZIP ツールでファイルを開く方法があります。多くのオペレーティングシステムには ZIP 圧縮ユーティリティが付属していますが、インターネット上にはさらに便利なツールがあります。適当な方法でファイルを分かりやすい場所に展開してください。拡張機能のファイルは、次のようなディレクトリ構造で展開されます:

  • xulschoolhello1
    • chrome.manifest
    • install.rdf
    • content
      • browserOverlay.xul
      • browserOverlay.js
    • skin
      • browserOverlay.css
    • locale
      • en-US
        • browserOverlay.dtd
        • browserOverlay.properties

簡単だと思っていたら沢山のファイルが出てきました! でも、心配しないでください。すべてのファイルの目的について知れば、とても簡単であることが分かるでしょう。次のセクションでは、これらのファイルについて調べ、何をするものであるかを見ていきます。

添付ファイル

ファイル サイズ 日時 添付者:
helloworldalert.png
8000 バイト 2010-02-23 00:05:18 Jorge.villalobos
Select on Opera (XCN)
Select closed on Opera on Mac OSX (No tweak)
863 バイト 2012-11-06 02:33:14 Jeremie

Document Tags and Contributors

タグ:
Contributors to this page: ethertank, Marsf, nemunemu
最終更新者: nemunemu,