Edited at

Firefoxで検索プラグインを追加・編集する方法

More than 1 year has passed since last update.

Firefoxで、検索プラグインを追加したり、追加した検索プラグインを編集したりする方法を纏めた。本記事の内容は、Quantumにも旧式環境にも対応している。

ウェブブラウザに於いて、検索プラグインとは、検索バーやアドレスバーから検索をする機能に組み込まれる検索エンジンごとのプログラムである。Firefoxを含め殆どのウェブブラウザで、OpenSearch仕様1に準拠している。

筆者の環境は、次の通り。


  • OS: Windows 10

  • ウェブブラウザ(1): Mozilla Firefox 55.0.3 64bit版

  • ウェブブラウザ(2): Mozilla Firefox Developer Edition 60.0b4

  • ウェブブラウザ(3): Waterfox 56.0.4.1


検索プラグインの追加


検索エンジンサイトから追加

追加したい検索エンジンのウェブサイトで検索プラグインが提供されていることが間々有る。その場合は、「Firefox で検索エンジンを追加または削除する | Firefox ヘルプ」の通りである。

因みにウェブサイト側は、"Creating OpenSearch plugins for Firefox | MDN"に示されているように設定している。


検索プラグインの配布サイトから追加

次のような、様々な検索エンジンのプラグインが配布されているウェブサイトから入手する。

特にMycroft Projectは、検索プラグインの配布に特化したサイトで、豊富に取り揃えられており、お薦めだ。

因みに、Firefoxのオプション ‐ 検索パネルに「検索エンジンを追加...」というリンクが有り、初期設定では前記のFirefox Add-ons 検索プラグインが開かれるようになっている。これは、リンク先をMycroft Projectの検索ページなどに変更することもできる。オプションパネルに無い高度な設定項目である

"browser.search.searchEnginesURL"

の値を

"http://mycroftproject.com/search-engines.html"

などとする2


アドオンで検索フォームから追加

次のいずれかのアドオンを使用し、追加したい検索エンジンのウェブサイトに有る検索フォームから検索プラグインを自動で生成する。

いずれのアドオンも検索フォームのコンテキストメニューから動作する。BurningMoth AddSearchはQuantumに対応しているが、外部のウェブサーバを経由して動作する3。Waterfoxなど旧式アドオンを使用できる環境であれば、Add to Search Barが良いだろう。


アドオンで検索プラグインを作成して追加

次のいずれかのアドオンを使用し、アドオンの設定パネルで検索プラグインを作成する。

但し、いずれののアドオンも、URL(Url)・名前(ShortName)・アイコン(Image)(とSearch Engine Creatorはこれらに加えて説明(Description))しか設定できず、厳密にはPOSTリクエストに対応していない4。又、Search Engine Creatorは非ラテン文字を正しく処理できない虞が有る。Search Engines HelperはQuantumに対応しているが、外部のウェブサーバを経由して動作する3


検索プラグインを自作して追加

次の検索プラグインの編集節を参照されたい。


検索プラグインの編集

残念ながら、現状、検索プラグインの編集をGUIで行える方法は存在しないと思われる。検索プラグインのデータはプロファイルフォルダ直下のsearch.json.mozlz4ファイルであり、JSONドキュメントがLZ4形式で圧縮されたものであるものの、ヘッダにFirefox独自のアルゴリズムが用いられている。これに対し何らかの方法で編集を行う。本節ではこれについて纏めているので、検索プラグインのデータのソースコードに於ける記述の方法に関しては"Creating OpenSearch plugins for Firefox | MDN"を参照されたい。


XMLドキュメントを編集

OpenSearch仕様に於いて検索プラグインはXMLドキュメントである。XMLドキュメントを編集し、これをsearch.json.mozlz4に反映させることができる。


XMLファイルの取出し

先ず、編集する検索プラグインをXMLファイルとして取り出す。これには、次のアドオンを使用する。

又は、取分け旧式アドオンを使用できない環境では、スクラッチパッドでウェブブラウザを実行環境としてExport your search engines in only-WebExtensions Mozilla Firefox buildsスクリプト6を実行する7。現用の検索プラグインが全てエクスポートされる。

又、ビルトインの検索プラグインは、Firefoxのオプション ‐ 検索パネルで削除したものも含め、"resource:///chrome/browser/searchplugins/"8(Waterfoxでは"resource:///chrome/en-US/locale/browser/searchplugins/")から取り出せる。


XMLファイルの取込み

取り出したXMLファイルを編集した後、Firefoxに取り込む。これには、次のアドオンを使用する。

又は、取分け旧式アドオンを使用できない環境では、スクラッチパッドでウェブブラウザを実行環境としてImport search engines in only-WebExtensions Mozilla Firefox buildsスクリプト6を実行する7


JSONドキュメントを編集

search.json.mozlz4を解凍し、JSONドキュメントを編集し、MOZLZ4ファイルへ圧縮し、既存のsearch.json.mozlz4と置き換える。これには、次のアドオンを使用する。

mozlz4-editは、MOZLZ4ファイルやJSONファイルをアドオンのエディタに開き、JSONドキュメントとして編集し、MOZLZ4ファイルやJSONファイルとして保存することができる。Firefox 58.0以上の環境を必要とするが、編集するMOZLZ4ファイルやJSONファイルは任意に指定できるので、斯かる環境を有してさえいれば、Firefox 58.0未満の環境のsearch.json.mozlz4も編集できる。

又は、取分けFirefox 58.0未満の環境では、次に示した方法を用いる。


MOZLZ4ファイルを解凍

先ず、search.json.mozlz4をJSONファイルへと解凍する。これには、次のいずれかのアドオンを使用する。

但し、mozlz4-editはFirefox 58.0以上、Search Engines Helperは同57.0以上の環境を必要とする。

又は、取分けFirefox 57.0未満の環境では、次のいずれかのプログラムやソフトウェアを使用する。


MOZLZ4ファイルへ圧縮

解凍されたJSONファイルを編集した後、MOZLZ4ファイルへ圧縮する。これには、次のアドオンを使用する。

但し、mozlz4-editはFirefox 58.0以上の環境を必要とする。

又は、取分けFirefox 58.0未満の環境では、次のいずれかのスクリプトやソフトウェアを使用する。


ビルトインの検索プラグインの編集

ユーザが追加する検索プラグインをビルトインのものと同じ名前(ShortName)にすることはできない。これは、ビルトインの検索プラグインがオプション ‐ 検索パネルで削除されている場合も例外でない。然しながら、ビルトインの検索プラグインに満足いかないことも有るものだ。例えば、日本語版ロケールにビルトインされている"Twitter"検索プラグインは「話題のツイート」を対象に検索をするが、筆者は「すべてのツイート」を対象にしたい。「Twitter 全てのツイート」とか「ツイッター」というようにビルトインの検索プラグインと異なる名前にすれば追加できるが、純粋に"Twitter"としたいのだ。


プロファイルの検索プラグインのデータを編集

ビルトインのものと同じ名前の検索プラグインを追加することはできないので、ビルトインの検索プラグインのデータに対し何らかの方法で編集を行う。即ち、JSONドキュメントを編集節の方法を用い、search.json.mozlz4に含まれるビルトインの検索プラグインのデータを編集する。然し、Firefoxが更新されると、search.json.mozlz4に含まれるビルトインの検索プラグインのデータも更新される11ので、この編集は無に帰してしまう。そこで、編集したsearch.json.mozlz4のバックアップを保存しておき、Firefoxが更新された際には、バックアップのsearch.json.mozlz4に含まれるbuildIDappVersion各オブジェクトの値を現在のものに書き換え12、現在のsearch.json.mozlz4と置き換える。


インストールフォルダの検索プラグインのデータを編集

ビルトインの検索プラグインの大元のデータは、インストールフォルダの\browserディレクトリのomni.jaファイルに格納された13XMLファイルである。ビルトインの検索プラグインのXMLドキュメントを編集し、omni.jaファイルへ格納することで、ビルトインの検索プラグインの大元のデータを編集することができる。然し、omni.jaも亦、Firefoxが更新されると上書きされるので、その都度作業を繰り返さなければならない。omni.jaの編集はsearch.json.mozlz4よりも面倒なので、通常は前のプロファイルの検索プラグインのデータを編集節の方法の方が良いだろう。14


検索プラグインの名前の末尾に空白を加える

苦肉の策だが、検索プラグインの編集節の方法を用い、ビルトインの検索プラグインの名前の末尾に空白を加えた名前で検索プラグインを新たに作成する。この方法であれば、Firefoxが更新される度に作業を繰り返す必要は無い。実際上、見た目に大きな差異は無いので、然程違和感無く使用できると思われる。15


検索プラグインの仕様に関して

検索プラグインのデータの在り方は仕様変更が重ねられてきており、概してユーザが編集を行いにくいように変化してきている。


  • Firefox 40: ビルトインの検索プラグインのデータは、それまでインストールフォルダの\browser\searchpluginsディレクトリにXMLファイルとして存在したが、\browserディレクトリのomni.jaファイルに格納されるようになった(Bug 1162569)。ビルトインの検索プラグインがユーザの追加に依るものと同じ名前の場合、前者が優先するようになった(Bug 1109354)。

  • Firefox 45: ユーザが追加した検索プラグインのデータは、それまでプロファイルの\searchpluginsディレクトリにXMLファイルとして存在したが、プロファイルフォルダ直下のsearch.json.mozlz4ファイルに格納されるようになった(Bug 1203167)。

  • Firefox 57.0.1: プロファイルフォルダ直下のsearch.json.mozlz4ファイルが削除されるとFirefoxが次に起動した時に再生成されるところ、それまではその際同じプロファイルの\searchpluginsディレクトリにOpenSearch仕様のXMLファイルが有れば取り込まれたが、そうされなくなった(Bug 1405670)。

これらの仕様変更は、勝手に検索プラグインが追加されたり現用の検索プラグインに対し内容の変更や削除が為されたりといった検索ハイジャックを防止するセキュリティ対策を理由とする。尤も、Mozillaは検索プラグインをビルトインすることでその検索プロバイダから利益を得ている16ので、出来るだけビルトインの検索プラグインが使用されるようユーザを誘導する意図が有るのではないかとも囁かれる。それは附随的ないし結果的なものに過ぎないかもしれないが、そのような効果が有るのは確かであろう。そして、こうした対策に依り検索ハイジャックを完全に防止できるわけではないのも亦事実である。そもそも、検索ハイジャックが為されるような汚染された環境こそが問題なのであって、そこでは別のもっと深刻な事態が生じている虞だって有る――泥棒が入り、家財がごっそりやられたが、夫の僅かなへそくりだけは引出しの奥に仕舞い込んであって偶々無事だった、からといってどれだけの意義が有ろうか。「開かれた、誰にでもアクセス可能な」インターネットをミッションに掲げる17Mozillaが、カスタマイズの自由を損なってまですべきことなのか、疑念は拭えない。プロジェクトの運営には金が掛かるから、大義の実現のために多少の犠牲はやむをえないのかもしれないけれど…。


改善の要求

Bugzillaに提起されている検索に関してのバグの内目ぼしいものを挙げておく。



  • Bug 261124「テキストボックスコンテキストメニューに「検索バーへ追加」が有るべき」


  • Bug 335102「検索エンジンの名前の変更を可能に(検索プラグインの名前の変更をサポート)」


  • Bug 353056「既定の(出荷された)検索プラグイン(エンジン)18を上書きできない」


  • Bug 1209390「非標準のjsonlz4・mozlz4でなく標準のlz4ファイル形式を用いよ」




  • Bug 1428948「検索エンジンポリシー:追加・削除・既定の設定・ブロック Web API」


  • Bug 1352598「インストールされた検索エンジンを一覧するためのAPIを追加せよ」




  • Bug 1213660「よく似た検索プラグインを見分けられない」19


  • Bug 1223454「ユーザに検索エンジンのグループ分けをさせてくれ」


補足

2018/09/05追記。筆者の環境は次の通り。


  • OS: Windows 10

  • ウェブブラウザ(1): Mozilla Firefox 61.0.2 64bit版

  • ウェブブラウザ(3): Waterfox 56.2.2

XMLドキュメントを編集する方法で検索プラグインの編集を行う場合、Url要素のtemplate属性の値には&記号を含められないようである。そうでないと、「不正なフォーマット」というタイトルの「検索エンジンを次の場所からインストールできませんでした」というエラーメッセージが表示されてしまい、XMLファイルを取り込むことができない。従って、リクエストパラメータは、単数の場合を除き、Param要素に依り指定する必要が有る。

以前は問題なかったような気がするが、定かでない。Url要素のtemplate属性の値に&記号を含む検索エンジンを提供しているウェブサイトも見受けられる20。尚、XMLドキュメントを編集する方法で検索プラグインの編集を行う場合以外については、十分確認できておらず分からない。


参考文献・情報源


検索プラグインの編集


XMLドキュメントを編集


JSONドキュメントを編集


検索プラグインの仕様に関して


脚注





  1. "Creating OpenSearch plugins for Firefox | MDN"も参照されたい。 



  2. 初期設定値は"https://addons.mozilla.org/%LOCALE%/firefox/search-engines/"である。この設定の詳細は、"Browser.search.searchEnginesURL - MozillaZine Knowledge Base"を参照されたい。 



  3. 外部のウェブサーバを経由して動作するのであっても実際上は然程問題無いと思われるが、技術的なプログラム処理のためだけにそのようにする設計思想には賛同できない。同旨の見解に、Firefoxアドオンの開発者として著名なPiroこと結城洋志氏のツイート。勿論、これはWebExtensions APIの制限に起因するのであって、こうした設計思想を採ったアドオンの作者に非は無い。 



  4. POSTリクエストで動作する検索エンジンであっても、リクエストパラメータがURLへの付加でしか設定できない。それでも一応動作するので、実際上は然程問題無いと思われるが。 



  5. 作者に拠れば、



    • WebExtensionsへの移行は同APIが対応しておらず不可能である。

    • もしWebExtensions APIがOpenSearch仕様のXMLドキュメントのエクスポートかインポートのいずれかの機能に対応するようになれば、WebExtensionsに準拠する更新の作業を行う。

    • WaterfoxやPale Moonのための移行は行わない。

    ということである。"Migrating to WebExtensions (if it will be possible) due to Firefox 57 dropping support for XUL-based add-ons"、"[Ext] XML Search Engines Exporter/Importer (+ Fx57 tools)"を参照。 

  6. XML Search Engines Exporter/Importerアドオンの作者nohamelin氏による作である。 



  7. Firefoxの開発ツール ‐ オプションペインで「ブラウザーとアドオンのデバッガーを有効化」項目を有効と設定する必要が有る。 



  8. 本記事初版時点では、chrome/ja/locale/browser/searchplugins/であった。
    (2018/09/08更新。筆者の環境は次の通り。



    • OS: Windows 10

    • ウェブブラウザ(1): Mozilla Firefox 62.0 64bit版

    ) 

  9. "How do you decompress search.json.mozlz4? • mozillaZine Forums"も同様である。 



  10. "nightly search engine icon (2) - Dead Zone"も同様である。 



  11. オプション ‐ 詳細パネル ‐ 更新タブ「次のソフトウェアを自動的に更新する ‐ 検索エンジン」項目を無効と設定しても、ビルトインの検索プラグインは自動的に更新される。Bug 1436741(「検索エンジンを更新する設定が無効だったのにFirefoxが新しい検索エンジンをインストールした」)、Bug 1444426(「「検索エンジンを自動で更新する」を除去又は非表示化せよ」)を参照。 



  12. FirefoxのビルドIDとバージョンであり、トラブルシューティング情報パネルで確認できる。 



  13. omni.jaファイルを解凍すると、その中のchrome/browser/searchplugins/8(Waterfoxではchrome/en-US/locale/browser/searchplugins/)ディレクトリに存在する。 



  14. omni.jaに関しての詳細は、「omni.ja (かつてのomni.jar)について | MDN」、"How to correctly (re)pack omni.ja in Firefox? - Stack Overflow"などを参照されたい。 



  15. Bug 1154835(「空白は検索エンジン名から取り除かれるべき」)やBug 1226613(「出荷するプラグイン18の名前に酷似した名前の付いた検索プラグインはインストールさせないべき」)がもし実現されれば、こうした方法は用いられなくなる。これに対する、「必ずしも全てのユーザが、既定の検索プラグイン18で扱われるサービスにMozillaの検索プラグインを使用するよう強いられたいわけではないだろうことを、思い起こしてください。上述された使い方の一部は、Bug 353056のような問題への対処であるかもしれません。」とのコメント(Stefan Plewako氏)は、重要な指摘であるように思われる。 



  16. "Mozilla Fdn 2016 Final FS - Short Form 9-28 - 2016_Mozilla_Audited_Financial_Statement.pdf"、"Mozilla Foundation Documents"を参照。 



  17. 更に、マニフェストに「人は誰でも、インターネットとインターネット上での自らの体験を自分自身で形成する力を有するべき」と掲げ、ウェブサイトのトップページで「利益ではなく、人々のためのインターネット」と謳う。 



  18. 「ビルトインの検索プラグイン」のことを指している。 



  19. この問題は、Firefox Search Bar Show Engine Names (Firefox 43+)ユーザスタイルを使用することで、一先ず解決できる。 



  20. 例えば、検索サイトのStartPage(https://www.startpage.com/nih/opensearch.xml)。