Mozilla Flux

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

Firefox 63に複数タブの選択・操作機能が実装される見込み

Firefox 56まで、複数のタブを選択してそれらをブックマークしたり、選択したタブ以外を閉じたりする操作は、拡張機能を導入することによって実現できていた。だが、Firefox Quantumのリリースに伴い、WebExtensionsベースの拡張機能は本体の操作とシームレスな形では複数タブの選択・操作ができなくなっており、たとえばマルチプルタブハンドラを導入しても、タブバー上のタブを選択することはできず、拡張機能用のパネルを使って擬似的な操作ができるにとどまる。

Firefox 63では、複数タブの選択・操作機能がネイティブに実装され、初期設定で有効化される見通しであり、上記の問題の解消が期待できる(Bug 1474938)。すでにNightlyチャンネルでは有効化済みだ(Bug 1474704)。該当する設定はbrowser.tabs.multiselectで、Bug 1458007がメタバグ、つまり関連する一連のバグの基点となっている。

f:id:Rockridge:20180722213429p:plain
複数タブの選択・操作機能

タブの選択にはShiftキーとCtrl/Cmdキーを用いる。Shiftキーで範囲選択、Ctrl/Cmdキーで個別選択という使い分けだが、範囲選択後にShiftキー+Ctrl/Cmdキーを押しながら選択範囲を拡張することもできる(Bug 1473187)。選択したタブは最上部の色が変わるようになっており、アクティブでないタブ上にカーソルをホバーさせた場合であっても、未選択のタブとは区別が可能だ。

f:id:Rockridge:20180722213646p:plain
タブの選択とカーソルのホバー

本記事執筆時点で実装済みの操作を列挙しておこう。これらの操作は、タブのコンテキストメニューから項目を選択することによって行えるが、今後はショートカットも実装されていく。

  • 選択したタブを閉じる(Bug 1458022
  • 選択外のタブをすべて閉じる(Bug 1472910
  • 選択したタブをブックマーク(Bug 1458067
  • 選択したタブを再読み込み(Bug 1458061
  • 選択したタブをピン留め・選択したタブのピン留めを外す(Bug 1458060
  • (選択した)タブをミュート・タブのミュートを解除(Bug 1458039
  • (選択したタブを)新しいウィンドウへ移動(Bug 1458049

f:id:Rockridge:20180722220025p:plain:w300
タブの複数選択機能の実装により拡張されたコンテキストメニュー

また、近い将来に以下の操作が実装される予定だ。なお、複数タブの選択時に新規タブを開いた場合、選択が解除されるようになる(Bug 1475693)。

  • (選択した)タブを端末へ送信(Bug 1470555
  • 選択したタブをタブバー上のドラッグ&ドロップで移動させる(Bug 1458066
  • 選択したタブをドラッグ&ドロップで別のウィンドウに移動させる(Bug 1458056

複数タブの選択・操作機能がインストールした直後から使えるのは、たとえばChromeに対するアドバンテージとなるだろう。Firefox 56以前の使い勝手を求めるユーザーにとっても朗報と言える。実装される操作も上記で打ち止めというわけではないだろうから、マルチプルタブハンドラが実現していた、「選択したタブをドラッグ&ドロップで既存のブックマークフォルダにまとめてブックマークする」操作も追加される可能性はありそうだ。

(18/08/03追記)
タブバー上のコンテキストメニューの項目が固まってきたようだ。本追記時点の最新スペックは以下のようになっている。

f:id:Rockridge:20180803103228p:plain
タブ選択時のコンテキストメニュー(2018年8月2日時点)

タブの切り替えをスムーズにするTab Warming機能について(Firefox 61以降)

Windows版・Linux版Firefox 61では、Tab Warmingと呼ばれる機能が有効化されている(Bug 1456602*1。タブを切り替える前にいわばウォームアップを済ませておく機能で、ユーザーに見えないところで処理を先取りするため、結果的にタブの切り替え処理が速くなったように感じられる。

タブ切り替えのウォームアップとは具体的に何だろうか。現行のFirefoxはマルチプロセス化されているので、タブを切り替える場合、メインプロセスから切り替え先のタブを司るcontentプロセスに対し、レイヤーツリーを生成するよう指示が出され、その結果がcompositorプロセスに送られて合成(Compositing)の処理が行われる*2。ウォームアップとは、この一連の流れをタブの切り替えが行われる前から開始しておくという意味だ。その後タブの切り替えが実行されなかったときは、レイヤーツリーは捨てられる。

ウォームアップが開始されるタイミングは複数ある。代表的なのは、切り替え先のタブ上にカーソルがホバーしたとき(Bug 1385453)と、タブを閉じるボタン上にカーソルがホバーしたとき(Bug 1430292)である。そのほか、Ctrl+Tabパネルを表示させたとき(Bug 1430153)やマウスの中ボタンの押下を検出したとき(Bug 1472230:ただしFirefox 63から)も対象だ。いずれも手動または自動でタブが切り替わる直前の操作が選ばれている。

Tab Warming機能の性質上、レンダリング処理に時間のかかるWebページほど効果を発揮しやすい。もっとも、タブの切り替えに要する時間は、平均値・中央値ともに減少することが判明しており、特別なケースでなくともユーザーはメリットを享受できる。ちなみに、browser.tabs.remote.warmup.maxTabsの設定値(デフォルトは3)を変更することで、効果範囲の調節も可能だ。

f:id:Rockridge:20180715164711p:plain
タブ切り替え時間の平均値(Mean)と中央値(Median)が低下

タブのダブルクリックで現在表示させているタブを閉じる小技(Firefox 61以降)

Firefox 61以降、以下の手順で本体の設定を変更すると、タブのダブルクリックによって現在表示させている(=アクティブな)タブを閉じることができる(Bug 1435142)。

  1. アドレスバーに"about:config"と打ち込んでページを開き、「動作保証対象外になります!」という警告が出たときは、「危険性を承知の上で使用する」をクリックして先へ進む。
  2. 検索欄にbrowser.tabs.closeTabByDblclickを入力し、ヒットした設定名をクリックして真偽値をtrueに変更する。

通常、タブを閉じる際はタブの右端にある「×」マークをクリックする。上記の設定をすれば、アクティブなタブに限りダブルクリックで閉じることができるので、手間が省けるわけだ。対象をアクティブなタブに限定しているのは、タブ切り替え時に誤ってタブを閉じてしまう事故を防ぐためである。

タブを閉じる作業を効率よく行うという意味では、マウスジェスチャ系の拡張機能を入れるほうがよいかもしれない。だが、WebExtensionsの制約によって、読み込み途中のページや一部のページではマウスジェスチャが効かない。そんな場合でも、本機能はFirefox本体に搭載されたものなので動作する。併用も選択肢のうちだろう。

Firefox 61でRetained Display Listsが段階的に有効化

Firefox 61のリリース後、当初は無効となっているRetained Display Lists(以下RDL)という機能が有効化されていく(Bug 1467514)。現在の計画では、リリースの2日後にまず25%のユーザーが対象となる。1週間様子を見てから対象を50%に拡大し、さらに1週間様子を見て100%に引き上げるという。

RDLについては、今年の1月にFirefox QuantumのOff Main Thread Painting(OMTP)とRetained Display Listsについて - Mozilla Fluxで紹介した。再描画の処理を軽減する仕組みであり、余力をJavaScriptの処理やレイアウトの実行、入力イベントへの応答などに回せるので、Webページの応答性が向上する。

Retained Display Lists for improved page performance – Mozilla Hacksによれば、MozillaがFirefox 60 Betaのユーザーを対象に行ったテストの結果、RDLを有効化すると描画処理に要する時間の中央値が、4.5ミリ秒から3ミリ秒へと減少したとのこと。

f:id:Rockridge:20180626234920p:plain
〔グラフ〕前半:RDL有効 後半:RDL無効

このように、全体的に見て描画処理に要する時間が3分の2になっただけでなく、16ミリ秒を超える「遅い」描画処理に関しては、ほぼ40%の割合で削減することに成功したという。Firefox 58 Betaの時点ではこの削減割合が「30%近く」にとどまっていたから、その後の改良で効果を増したことがわかる。

今後もRDLは改良が加えられる見込みだ。RDLが効果を発揮できない、ページ全体の再描画を要する場面を早期に検知できるようにするほか、RDLの準備作業にかかる時間も短縮させる。

2019年のFirefoxのリリース予定日

通常版のFirefoxは年に7回、ESR(延長サポート版)は年に1回、メジャーアップデートが実施される。アップデートのリリース間隔は6週間に固定されない変則的なものなので、Mozillaは早い段階でスケジュールを明らかにして、ユーザーがアップデートに備えた計画を立てられるようにしている。ただし、スケジュール公開後もときどき変更が加えられる。

Firefox Release Calendar - MozillaWikiに2019年のスケジュールが掲載されているので、リリース版とESRの日程(米国時間が基準)を紹介しておく。便宜上、リリース未了のバージョンについては2018年のスケジュールも記載するので、対象バージョンはリリース版のFirefox 61から71までとなる。

なお、Firefox ESR 60系列の次がESR 68系列となっている。かつては毎年3月に新しいESR系列に移行していたが、7月まで持ち越されることになった。

リリース予定日 正式版 ESR
2018-06-26 Firefox 61 Firefox 52.9; 60.1
2018-09-05 Firefox 62 Firefox 60.2
2018-10-23 Firefox 63 Firefox 60.3
2018-12-11 Firefox 64 Firefox 60.4
2019-01-29 Firefox 65 Firefox 60.5
2019-03-19 Firefox 66 Firefox 60.6
2019-05-14 Firefox 67 Firefox 60.7
2019-07-09 Firefox 68 Firefox 60.8; 68.0
2019-09-03 Firefox 69 Firefox 60.9; 68.1
2019-10-23 Firefox 70 Firefox 68.2
2019-12-10 Firefox 71 Firefox 68.3