僕は一寸
2026/07/12

いくつかの拡張機能を Firefox に port した

Chrome Web Store にしか公開されていない拡張機能はたくさんある。Chromium 系ブラウザはユーザー数が圧倒的に多いので,当然と言えば当然。複数のストアへの公開などをするコストも考えれば,仕方のないことだ。

とはいえ,ぜひ使いたい! と思う有用な拡張機能がいざ AMO1 に公開されていないと,Firefox ユーザーとしては少々不便である。

…… 泣き寝入りする必要はない。そう,WebExtensions があるから。2017 年秋の Firefox 57 の鮮烈なリリースを覚えているだろうか。あの時をもって Firefox は XUL/XPCOM ベースの古いアドオンと決別し,より安全でパフォーマンスへの影響が低く,そして Chromium 系ブラウザとほぼ共通の WebExtensions API ベースのアドオンへと全面的に移行した。当時は一部のパワーユーザーなどを中心に強い反発もあり,今でも XUL/XPCOM 時代の Firefox からフォークした Pale MoonBasilisk といったブラウザは存在している。しかし,Apple,Google という営利目的の巨人と肩を並べる唯一の非営利のブラウザベンダーである Mozilla にとっては,内部実装から古く複雑化したコードベースを一掃するこの決断は避けて通れないものであったはずだ。あれから Firefox はコードベースのあらゆる場所で使われていた XUL/XPCOM ベースのコンポーネントを少しずつモダンな実装に置き換え続け,そして今でも Chrome や Safari と共にモダンブラウザの第一線を張っている。最近は現行の Firefox をベースにした FloorpZen Browser なども衆目を集めるようになっていて,Firefox 好きとしては嬉しい限りだ。

閑話休題。

Firefox が WebExtensions API を採用したことで,拡張機能の API は安定し,互換性も高まった。Chromium 系向け拡張機能の移植は,かなり簡単にできるようになっている。大抵の場合は,manifest.json で適当な browser_specific_settings を設定したり,バックグラウンドスクリプト周りの記述を適当に書き換えるだけで済む。最近 2 つの拡張機能を Firefox に port したので,以下に載せておく。

Spatial Navigation

Spatial Navigation (port) – 🦊 Firefox (ja) 向け拡張機能を入手

空間ナビゲーションを実現する拡張機能。空間ナビゲーションとは,一般的な Tab でのフォーカス移動と違い,方向キーによって視覚的な上下左右の対応に基づいて要素間を移動できるようにする機能だ。

実は Chromium にはネイティブの実装が存在し,起動時に –enable-spatial-navigation を渡すことで有効化できる。Vivaldi は設定画面にこのオプションを露出させており,個人的にお気に入りの機能の一つだった。

この拡張機能ではさらに,任意のショートカットを押すことで画面上のクリック可能な要素とキーを対応させてくれる。これがすこぶる便利で,キーボードからあまり手を離さずにウェブブラウジングをすることが可能になった。

Spatial Navigation 拡張機能を使用している様子。Google 検索で「Spatial Navigation」と検索している。画面上のクリック可能な要素に対して一つ一つ対応するキーが表示され,またフォーカスされている要素が黄色くハイライトされている。

この拡張機能を port するにあたって必要だったのは本当に最小限の変更のみで,manifest.jsonbrowser_specific_settings を追加し,service_workerscripts 配列に変えるだけで動くようになった。WebExtensions API 万歳。

nicopip

nicopip (port) – 🦊 Firefox (ja) 向け拡張機能を入手

ニコニコ動画およびニコニコ生放送を,流れるコメントと一緒に Picture-in-Picture に表示する拡張機能。

Firefox は長いこと Picture-in-Picture API を実装しておらず,この拡張機能の存在は知っているものの port のしようがない…… という状態が続いていた。しかし Firefox 151 でついに Document Picture-in-Picture API が実装され,(まもなくリリースされる) Firefox 153 では Picture-in-Picture API も実装される。ようやく必要な API が出揃ったので,port を行った。

この拡張機能の場合は,先述の manifest.json の変更のみでは動かなかった。Document Picture-in-Picture API 周辺の実装がまだ枯れていないというのが大きいが,wrappedJSObject を噛まして Isolated world から Main world にアクセスする必要があった。とはいえおそらくこの点も今後修正される2 ので,じきにこの変更も不要になるだろう。

おわりに

細かな挙動の差異こそあれど,ここまで簡単に拡張機能を移植できるというのは非常にありがたい。新たな拡張機能によって,手前の Firefox がさらに便利になった。

余談。ウェブの相互運用性とブラウザの多様性は決して二項対立ではないが,一方でこの 2 つを両立させるのには大変なコストがかかる。快適なウェブブラウジングが開発者たちの血と汗の結晶の上に成り立つものであることに感謝しよう。

そして,もしも財布に少し余裕があって,たまにはそんな日もあっていいかな,と思う時があったら,好きな非営利団体に寄付とかしてみよう。

Donate Now - Mozilla Foundation

1

Firefox Add-ons のこと。

2

Bug 2053139 などを参照

← アイドルマスター関連の情報が得られる有志のサイト これ以上新しい投稿はありません