Mozilla Flux

Mozilla関係の情報に特化したブログです。

FirebugはFirefox 49本体に統合 現行の2.0.x系列はマルチプロセス機能(e10s)に対応せず

Firebugは2006年から開発が続けられているWeb開発者向けツールで、「あなたはあらゆるWebページのCSS、HTML、及びJavaScriptをリアルタイムに編集、デバッグ、またはモニタすることが出来ます。」というのがうたい文句だ。Firefoxの拡張機能の中で最も有名なものの1つであり、現在でも200万人を超すユーザーがいる。開発チームのリーダーであるJan Odvarko氏はMozilla Corporationに在籍しているし、かつてはFirebugの動作に支障が出ることが、Firefox正式版のリリースを止めるバグ(Blockerバグ)にカウントされていたこともある。別格のアドオンといえるだろう。

そのFirebugが、Firefox 49で本体に統合される。公式ブログの記事"Unifying Firebug & Firefox DevTools"で説明されているとおり、FirebugはFirefoxの開発ツールに統合され、そのルック&フィールは開発ツールのテーマとして維持されることになる(Bug 1244054)。Pixel Perfect*1FireQueryWebSocket MonitorといったFirebugの拡張機能も統合版Firebugと協調して動作する。

f:id:Rockridge:20160626212728p:plain

他方、現行のFirebug 2.0.x系列は、Firefoxのマルチプロセス機能(e10s)に対応しない。といっても、すぐに使えなくなるわけではない。たとえばFirefox 48の時点では、拡張機能が1つでもインストールされているとe10sが有効化されない仕様となっている。Mozillaもe10sが拡張機能に与える影響の大きさは十分承知しており、しばらくは上記の仕様が維持されるだろう。それとは別にe10sの有効・無効を切り替える設定もあるので、無効化してFirebug 2.0.x系列を使い続けることも可能だ。今のうちにFirefox Developer Editionで統合版Firebugを少しずつ試しておき、2.0.x系列からの乗り換え時期を探る手もある。

振り返ってみると、Firebug 3が2.0.x系列とは大きく違った形になることは、早くも2014年11月の時点でアナウンスされていた。"Firebug 3 – next generation of Firebug"はFirebug 3 alphaがリリースされたときの公式ブログの記事だが、そこではFirefoxの開発ツールが充実していく中、Firebugの重複する部分を整理し、Firefox本体との緊密な統合を実現することによって、ユーザー体験とともにパフォーマンスや安定性を向上させるという方針が示されていた。また、Firebug 3 beta 1がリリースされた2015年10月には、"Firebug & DevTools Integration ★ Mozilla Hacks – the Web developer blog"という記事が出て、Firebug 3はFirefox本体の開発ツール上に築かれた薄いレイヤーとなり、Firebugの独自機能も次第に開発ツールに移植されていくと説明されていた。

Firebug 2.0.x系列がe10sに対応しないことも、2014年12月の時点でアナウンスされている。"Firebug 3 & Multiprocess Firefox (e10s) ★ Mozilla Hacks – the Web developer blog"で述べられている内容は、要するに、e10sが有効化されるとFirebugはchromeプロセス側に置かれる一方で、操作の対象となるWebページはcontentプロセス側に置かれるので、処理の全面的な書き換えが必要になるということだ。本体の開発ツールと競合するのが目に見えているのに、膨大なコストをかけて書き換えを行う理由はない。そこで開発ツールと統合されたFirebug 3が作られることになった。

ただ、微妙な方針の変化もあったようだ。2015年12月にFirebug 3 beta 3がリリースされたのを最後に、拡張機能としてのFirebugは提供されなくなり、2016年2月には"Merging Firebug into the built-in Firefox Developer Tools"という公式ブログの記事で、Firebug 3のすべての機能をFirefoxにビルトインされたツールにする旨が発表された。当初は拡張機能としてのFirebugを残す方針だったが、どこかの時点で完全統合の方針に切り替わったのだろう。上記の記事によれば、Firefox本体の開発ツールに欠けた決定的な機能を提供する場合にのみ、Mozilla Add-ons(AMO)でFirebug 3を公開するという。

Firebug 3の統合はFirefox 49で完了するが、現行版のあらゆる機能が本体の開発ツールに実装されたわけではない。Bugzilla@Mozillaには「Firebug Gaps」というバグが立てられており(Bug 991806)、今後もFirebug 2.0.x系列の機能の移植は続く。それでも、Firebugがその役割を終えたことは、Firefoxの開発ツールが1つのマイルストーンに達したことを意味する。WebExtensionsの普及という観点からも、Firebugが障害にならないのは大きいだろう。

Firefox 49本体のみで履歴等データベースのVACUUMが可能に

FirefoxはSQLiteというデータベース管理システムを用いて履歴とブックマークを管理しており、このデータベースのことをPlacesと呼ぶ。具体的にはplaces.sqliteというファイルだ。places.sqliteの肥大化と断片化はFirefoxのパフォーマンスを低下させるおそれがあるため、Firefox 3.6以降、データベースの断片化割合を推測しながら30日から60日に1回、アイドル時にVACUUM処理が行われる仕様となっている(Bug 512854)。places.sqlite内の項目が削除されて生じた空きレコードは、VACUUM処理によって解消され、それによって初めてファイルが圧縮されることになる。

ここまでは前提のおさらいだが、そうした知識があるかは別にして、要するにVACUUMすればFirefox本体の動作が軽くなると考えて、手動でこれを行うべく拡張機能を導入するユーザーが一定数存在する。実際には頻繁にVACUUM処理を実行してもあまり意味はないのだが、それはさておき拡張機能を入れるとなると互換性の問題が生じる。つまりFirefoxをバージョンアップすると動かなくなるケースが出てくるわけだ。

しかし、Firefox 49でトラブルシューティング情報(about:support)のページに「Places Database」(Placesデータベース)の欄が加わり、"Verify Integrity"(整合性の検証)というボタンが付いたことで、状況が変わるかもしれない(Bug 522668)。about:supportはロケーションバーに直接打ち込むか、メニューパネルのヘルプメニューから「トラブルシューティング情報」を選択すると呼び出せるが、そこにある整合性の検証ボタンをクリックすると処理が始まる。しばらく待つと結果が表示され、その中でVACUUM処理がされたことがわかる。処理前後のデータベースサイズを示してくれるので親切だ。

f:id:Rockridge:20160614000628p:plain

新規プロファイルで試してみた結果を以下に示しておこう。VACUUMの項目を見るとデータベースサイズは変わっていないが、削除された履歴やブックマークがない状態なのでこうなるのは当然である。

> Integrity check
+ The database is sane
> Coherence check
+ The database is coherent
> Orphans expiration
+ Database cleaned up
> Vacuum
Initial database size is 10240 KiB
+ The database has been vacuumed
Final database size is 10240 KiB
> Statistics
Database size is 10240 KiB
user_version is 32
page_size is 32768
cache_size is -2048
journal_mode is wal
synchronous is 1
History can store a maximum of 104858 unique pages
Table moz_places has 11 records
Table moz_historyvisits has 4 records
Table moz_inputhistory has 0 records
Table moz_hosts has 4 records
Table moz_bookmarks has 15 records
Table moz_keywords has 0 records
Table sqlite_sequence has 0 records
Table moz_favicons has 8 records
Table moz_anno_attributes has 3 records
Table moz_annos has 1 records
Table moz_items_annos has 4 records
Table sqlite_stat1 has 14 records
Index sqlite_autoindex_moz_inputhistory_1
Index sqlite_autoindex_moz_hosts_1
Index sqlite_autoindex_moz_keywords_1
Index sqlite_autoindex_moz_favicons_1
Index sqlite_autoindex_moz_anno_attributes_1
Index moz_places_faviconindex
Index moz_places_hostindex
Index moz_places_visitcount
Index moz_places_frecencyindex
Index moz_places_lastvisitdateindex
Index moz_historyvisits_placedateindex
Index moz_historyvisits_fromindex
Index moz_historyvisits_dateindex
Index moz_bookmarks_itemindex
Index moz_bookmarks_parentindex
Index moz_bookmarks_itemlastmodifiedindex
Index moz_places_url_uniqueindex
Index moz_places_guid_uniqueindex
Index moz_bookmarks_guid_uniqueindex
Index moz_keywords_placepostdata_uniqueindex
Index moz_annos_placeattributeindex
Index moz_items_annos_itemattributeindex

もはやPlacesをVACUUMするためにわざわざ拡張機能を入れる理由はなくなった。拡張機能を入れなければ、互換性問題に悩まされることもない。ただし、より高度なメンテナンスを行う場合は、Places Maintenanceのような拡張機能にもまだ出番がある。

Firefox 50でページ内検索結果の表示方法が変更(再追記あり)

Firefox page search improvements - gHacks Tech Newsで既報のとおり、Firefox 50ではページ内検索結果の表示方法に変更が加えられた(Bug 384458)。ヒットした結果が目立つように、背景が薄暗く表示される一方、対象項目はかなり明瞭な形で強調表示されるようになっている。加えて、ヒット数の上限も100件から1000件へと引き上げられた。

f:id:Rockridge:20160612210920p:plain

ヒットした項目は、黄色っぽい背景のボックスごと飛び出たような感じになり、特に最初の項目は文字のサイズも大きくなっている。画面内に他にヒットした項目がある場合、それらは薄暗い背景にそこだけ光が当たったかのように明るく表示される。次の項目に移るときは、上記の黄色っぽいボックスが、ビヨーンとジャンプするようなエフェクトがかかる。全体的にかなり派手な印象だ。

f:id:Rockridge:20160612210939p:plain

面白い機能だが、デザインに関しては好みが分かれそうである。元の表示に戻したいときは、about:configの画面でfindbar.modalHighlightとfindbar.highlightAllの設定を両方ともfalseに変更すればよい。

(16/09/18追記)
この機能はFirefox 50では無効化されている。開発中に多数のバグが見つかったためだが、現在ではそれらも概ね修正されており、Firefox 51リリース版では初期設定で有効化される見通しだ(Bug 1291284)。なお、Firefox 50では完全一致検索のオプションが設けられている(Bug 269442)ため、ページ内検索機能の改良点がなくなったわけではない。

f:id:Rockridge:20160919001247p:plain

(16/09/29追記)
上記の追記後、Firefox Nightly 52以外では再び初期設定で無効とされた(Bug 1303248)。初期設定で有効化される時期は、Firefox 52リリース版に延期されたものとみられる。

(17/01/23追記)
本機能が初期設定で有効化される時期は、Firefox 52リリース版である(上記Bug 1291284参照)。

(17/04/30追記)
結局、Firefox 52/53リリース版では有効化されなかった。しかもFirefox Nightly 55でこの機能が無効化されており(Bug 1355596)、当面は現行バージョンが維持されることになりそうである。

Firefox 49で追加された「最近のブックマーク」の表示を消す

Firefox Developer Editionがバージョン49.0a2へとアップデートされた。アップデート後にブックマークメニューを開くと、目立つ位置に"Recently Bookmarked"という欄ができ、5項目のブックマークが並んでいるのに気付くだろう。この「最近のブックマーク」は、ユーザーがWebコンテンツをブックマークすると更新されていく。新規のブックマークへのアクセスを容易にすれば使い勝手がよいだろうという配慮だ。

f:id:Rockridge:20160611225438p:plain

Firefox Nightly 47で導入された(Bug 1219804)新機能だが、Auroraチャンネル(Developer Edition)に移行する際に外され(Bug 1254960)、Firefox 48でも同様の措置がとられた(Bug 1267939)。Firefox 49でDeveloper Editionに投入されたところを見ると、このままリリース版でも有効化されるだろう。

しかし、この新機能を鬱陶しいと感じる人もいるはずだ。星アイコンをクリックしてWebコンテンツをブックマークすると、通常は〔未整理のブックマーク〕(Firefox 48以降は〔他のブックマーク〕)というフォルダに格納されるのだが、その項目がそのままメニューに出てきてしまう。Mozillaとしてはまさにそこが狙いで、どこにブックマークしたのか忘れてしまってもブックマークにアクセスできるようにしたわけだが、大きなお世話という感じもする。自分で格納したフォルダと違うところに項目が表示されるのは嫌だという意見もあるだろう。

また、始末の悪いことに、ブックマークメニューの幅は一番長い項目・フォルダ名によって決まるので、長い名前のブックマークをフォルダに格納してメニューの幅を抑えるようにしていても、項目名がそのまま出る「最近のブックマーク」のせいで台無しになってしまう。個人的にはここが一番許せない点だった。

幸い、「最近のブックマーク」は設定でオフにできる(Bug 1248268)。手っ取り早いのは、ブックマークメニュー上で右クリックしてコンテキストメニューを開き、"Hide Recently Bookmarked"(最近のブックマークを隠す)をクリックすることだ。なお、about:configの設定画面を開き、browser.bookmarks.showRecentlyBookmarkedをfalseに変更しても同じ効果が得られる。

f:id:Rockridge:20160611233048p:plain

Firefox 47におけるアドオン利用の注意点

Firefox 47のバージョンアップ後、アドオン(拡張機能やプラグインなどの総称)を使っていて「あれっ?」と思ったら、以下の点を確認してみてほしい。

デジタル署名の強制を無効化する設定は残存

デジタル署名が付されていない拡張機能をインストール可能にする設定は、Firefox 48で削除されることになった。なのでFirefox 47ではこの設定(xpinstall.signatures.required)は生きている。

MozillaはもともとFirefox 42でこの設定を削除する予定だったが、削除時期は、まずFirefox 44へと延期され、次いでFirefox 46に延び、さらにFirefox 47という話になった。今回で4度目の延期である。開発者向けのノーブランド版Firefoxを提供する準備が遅れているらしい

拡張機能の互換性は低下

Firefox 47では、Firefox 3で導入されたFUELが削除された(Bug 1090880)。FUELは拡張機能の開発者向けにFirefoxが提供していたJavaScriptライブラリで、古くはFirefox 4で廃止される話が出ていたことを思えば、ずいぶん長くもったといえるだろう。

はてなブックマーク拡張は、最新版のバージョン2.3.12でFUEL依存を解消したが、2016年3月末でサポート終了となったはてなスクリーンショット拡張も、FUELを使っていたことが明らかになっている。こうした例から、最近メンテナンスされなくなっている拡張機能が、実はFUELに依存しており、Firefox 47以降で全く動かなくなるといった事態が予想される。

クリックして有効化するプラグインが増加

Firefox 47では、Adobe Flashを除くすべてのプラグインが、初期設定で「実行時に確認する」の設定になっている(Bug 1263630)。MozillaはFlashを除くNPAPIプラグインのサポートをFirefox 53で廃止する計画であり、今回の措置はその一環だ。

今まですぐに再生されていたはずの動画が再生されない場合、アドオンマネージャの〔プラグイン〕の欄を確認してみよう。「実行時に確認する」に設定されているプラグインを「常に有効化する」に変更すれば、挙動が元に戻るはずだ。