FirefoxのアドオンをCUIから管理するツールを作ってみた

先日、Firebrewというツールを作成し、RubyGemsにて公開しました。 Githubにて開発しています。

コレは何?

FirefoxアドオンをCUIからインストールしたりアンインストールしたりできる、いわゆるパッケージマネージャーと呼ばれるものです。 これを用いれば各種アドオンのインストール・アンインストールを自動化することができます。 たとえば、Firefoxのキラーアドオンの一つであるVimperatorをインストールする場合は以下のようにします。

$ firebrew install Vimperator

なぜ作ったの?

現在ぼくは、VimやGitなど基本的な開発環境のインストール・設定はプロビジョニングツールであるAnsibleを用いて行っています。 これにより新しい環境への移行が簡単になります。

この基本的な開発環境にはブラウザであるFirefoxも入っているので、インストールおよび設定を自動化したいと考えました。

Firefoxのインストールは、MacであればHomebrew Cask、Linuxであればapt-getやyumなどの各種パッケージマネージャーを用いれば良さそうです。 Vimperatorの設定ファイルである.vimperatorrcなどは指定の場所にコピーすれば問題ないでしょう。 しかし、アドオンのインストールを自動化する既存のよい方法がありませんでした。

そんななか、Firefox開発元のMozillaThe generic AMO APIというアドオンの情報を取得できるAPIを公開していることがわかりました。 このAPIを用いればアドオンのGUIDやダウンロード元URLなどを取得することが出来ます。これはアドオンの自動インストールを行うにあたって十分な情報です。

そして、アドオンのインストール・アンインストールをするにあたって、インストール先のプロファイルパスの取得にはprofiles.iniを、 インストールされているアドオン一覧を取得するには、プロファイルディレクトリのextensions.jsonをそれぞれ参照すれば良さそうです。

これらを踏まえて、Firefoxのアドオンのパッケージマネージャーを作成することにしました。

どうやって使うの?

さて、肝心の使用方法ですが、まずはFirebrewのインストールを行わなければなりません。 幸いにもFirebrewはRubyのgemとして作成されているので、インストールはgemコマンドを用いるだけです(ただし実行にOpenSSLを必要とするので、Windowsだと面倒くさいかもしれません)。

$ gem install firebrew

Firebrewのインストールが終わったところで使用方法を解説しましょう。 まず、firebrewコマンドの基本的な構造は下記のとおりです。

$ firebrew [--help] [--version]
           [--base-dir=<path>] [--profile=<name>] [--firefox=<path>]
           <command> [<args>]

そして、主な機能として以下があります。

  • アドオンのインストール
  • アドオンのアンインストール
  • 公開されているアドオンの検索
  • アドオンの詳細な情報の取得
  • インストール済みアドオンの取得

以下、これらをそれぞれ解説していきます。

アドオンのインストール

名前がnameであるアドオンをインストールします。

$ firebrew install <name>

アドオンのアンインストール

名前がnameであるアドオンをアンインストールします。

$ firebrew uninstall <name>

公開されているアドオンの検索

名前がtermにマッチするアドオン一覧を表示します。

$ firebrew search <term>

アドオンの詳細な情報の取得

名前がnameであるアドオンの詳細な情報を表示します。

$ firebrew info <name>

インストール済みアドオンの取得

インストール済みアドオンの一覧を表示します。

$ firebrew list

また、以下のオプションが使用可能です。

--base-dir

profiles.iniがあるディレクトリを指定します。

-d <path>, --base-dir=<path>

デフォルト値は下記のとおりです。

プラットフォーム
Mac OS X ~/Library/Application Support/Firefox
Linux ~/.mozilla/firefox
Windows %APPDATA%\Mozilla\Firefox

この値はFIREBREW_FIREFOX_PROFILE_BASE_DIR環境変数で上書き可能です。

--profile-name

対象となるFirefoxプロファイル名を指定します。

-p <name>, --profile=<name>

デフォルト値はdefaultで、FIREBREW_FIREFOX_PROFILE環境変数で上書き可能です。

--firefox

firefoxコマンドのパスを指定します。

-f <path>, --firefox=<path>

デフォルト値は下記のとおりです。

プラットフォーム
Mac OS X /Applications/Firefox.app/Contents/MacOS/firefox-bin
Linux /usr/bin/firefox
Windows %PROGRAMFILES%\Mozilla Firefox\firefox.exe または %PROGRAMFILES(X86)%\Mozilla Firefox\firefox.exe

この値はFIREBREW_FIREFOX環境変数で上書き可能です。

最後に

これでFirefoxの構築を自動化できるようになりました。 また、せっかくAnsibleを使っているので、Ansibleモジュールを作ってみようかと思います。

※2014/07/18 追記: Firebrew用のAnsibleモジュールを作成しました → FirebrewのAnsibleモジュールを作ってみた