ブラウザのタブ切り替えを自動にする|Macでの3つの解き方

タブの切り替えを自動にしたいと考えるとき、頭の中にある絵は人によってまったく違います。壁のモニターに複数の画面を順番に映したい人もいれば、作業中に勝手に別のタブへ飛ばされるのを止めたい人もいます。この2つは向かう方向が正反対で、片方の解き方をもう片方に当てても何も改善しません。最初に自分がどちらなのかを決めると、あとの選択は短時間で終わります。

「自動」で検索している人は3通りに分かれる

1つ目は巡回表示です。1つのタブを一定時間映して、次のタブへ移り、最後まで行ったら先頭へ戻る。営業所の壁に掛けたモニターや、開発チームの2枚目の画面で、監視画面と問い合わせ一覧を交互に出す用途がこれにあたります。誰かがずっと見ているわけではなく、ふと目をやったときに必要なものが映っていればよい、という要求です。

2つ目は逆方向で、切り替わってほしくない側です。書きかけの文章に集中しているのに、他のアプリからリンクを開いた拍子に画面が別のタブへ飛ぶ。これを「自動で切り替わる」と表現して検索する人は多く、探しているのは止め方であって作り方ではありません。

3つ目は鮮度の話です。タブが見えている必要はないけれど、見に行ったときには最新であってほしい。巡回表示を組む動機を掘っていくと、実は表示の問題ではなくこの鮮度の問題だった、という例がかなりの割合を占めます。

この3つは必要な道具が違います。巡回表示にはスクリプトか専用の道具が要り、勝手な切り替えを止めるには設定と経路の切り分けが要り、鮮度はブラウザが裏側のタブに何を許しているかという別の話になります。順番に見ていきます。

勝手に切り替わるときに疑う4つの経路

止めたい側から先に片付けます。Macで作業中にタブや窓が勝手に前へ出るとき、経路はだいたい次の4つのどれかです。

  • 外部アプリからのURL起動。メールアプリやチャットアプリの中のリンクを押すと、既定のブラウザが前面に出て新しいタブが開き、そのタブが選択された状態になります。これはmacOSの標準的な振る舞いで、ブラウザ側の設定では止まりません。リンクを「新しい窓で開く」側に寄せると、少なくとも作業中のタブ並びは壊れなくなります
  • ページ側のスクリプト。認証の途中で別ドメインへ飛ばす処理や、決済の完了画面に自動で遷移する処理は、タブの中身を書き換えます。切り替わったように見えて、実際には同じタブが別のページになっている状態です
  • 拡張機能。タブを整理する種類の拡張機能には、条件に合ったタブを前へ出す動作を持つものがあります。心当たりがなければ、拡張機能をすべて無効にした状態で再現するかどうかを見ると1回で切り分けられます
  • 起動時の復元。前回のタブを開き直す設定にしていると、起動直後の数秒間は読み込みの完了順に応じて表示が動くことがあります

この切り分けを飛ばして拡張機能を探し始めると、原因が外部アプリからの起動だった場合に永久に解決しません。まず経路を確定させてください。

巡回表示はAppleScriptで作れる

巡回の側に話を戻します。Chromeには、タブを一定時間ごとに送る機能は用意されていません。設定画面のどこを探してもタイマーの項目は無く、そこは拡張機能か外部のスクリプトが担う領域として空いています。

macOS版のChromeはAppleScriptの辞書を持っていて、その中で窓の属性として active tab index(アクティブなタブの番号)が定義されています。読むだけでなく書き込めるので、この属性に順番に値を入れていけば巡回になります。拡張機能も追加のインストールも要りません。

tell application "Google Chrome"
  set w to window 1
  set n to count of tabs of w
  repeat
    set i to (active tab index of w)
    if i is n then
      set active tab index of w to 1
    else
      set active tab index of w to i + 1
    end if
    delay 30
  end repeat
end tell

スクリプトエディタでアプリケーション形式として保存すると、Dockから終了できる常駐物になります。同じ命令はショートカットアプリの「AppleScriptを実行」からも呼べるので、常に回し続けるのではなく、集中モードに入ったときだけ動かす、といった組み方もできます。

注意点は2つあります。上の書き方は window 1、つまり最後に前面へ出たChromeの窓を対象にするため、別の窓を触ると巡回先が移ります。窓を固定したい場合は窓のidを指定してください。もう1つは、人が使っている画面で回すと操作と競合するという点です。巡回は誰も打鍵しない画面に置くものだと考えたほうが、結果的に長持ちします。

窓を1つに固定する

2枚目のディスプレイに監視画面を出しているMacでは、巡回してほしいのはその窓だけで、作業中の窓は触られたくないはずです。Chromeの辞書は窓ごとにidを持たせているので、最初に一度idを調べてしまえば、以後は番号で名指しできます。開いている窓のidとタイトルを一覧するだけの短いスクリプトを1回走らせて番号を控え、ループの中を window 1 から window id 12345 の形へ書き換えます。idは窓が閉じられるまで変わらないため、周りで別の窓を開いたり動かしたりしても巡回は乱れません。

間隔の値も、既定のまま置かずに決めてください。AppleScriptの delay はスクリプトを止めるので、指定した秒数がそのまま1枚あたりの表示時間になり、1周は表示時間×枚数です。数字が分単位で動く画面なら30秒でも間に合いますが、間隔を詰めるより枚数を減らすほうがたいてい正解です。人が読み取れない速さで流れる画面は、映すものが少ない画面より役に立ちません。

巡回させても中身が古いままになる理由

巡回そのものは動いているのに、映っている数字が数時間前のまま、ということが起きます。これは不具合ではなく、ブラウザが意図してやっている節約が2種類重なった結果です。

1つはメモリの節約です。Chromeのヘルプは、使っていないタブに対する動作をこう説明しています。

パソコンのメモリを節約して、アクティブなタブがスムーズに動作するよう、使用していないタブを無効にします。アクティブでないタブにアクセスすると、自動的に再読み込みされます。 出典: support.google.com

再読み込みされるだけなら平気に思えますが、絞り込み条件を手で入れて作った画面や、描画に時間のかかるグラフは、巡回が回ってくるたびに初期状態へ戻ります。Chromeの設定にある「パフォーマンス」には、常にアクティブにしておくサイトを登録する欄があるので、巡回に載せる画面はそこへ入れておきます。

もう1つはタイマーの抑制です。裏側に隠れたページの中で動いているタイマーは、一定の条件を満たすと実行の頻度が落とされます。Chromeの開発者向け資料は、非表示が5分を超え、かつ音を出しておらず、WebRTCも使っていないページのタイマーは1分に1回しか確認されなくなる、と説明しています。自分でタイマーを回して更新している画面は、この条件に当たると更新が止まったように見えます。WebSocketやServer-Sent Eventsで受け取る作りの画面は影響を受けないので、同じ巡回に載せても片方だけ古くなる、という現象が起きます。巡回の間隔を調整する前に、その画面がどちらの作りなのかを確かめるほうが早く終わります。

目的のタブへ一発で飛ぶ側は、鍵と並び順で解く

3通りのうち2つ目、「探さずに目当てのタブへ行きたい」という要求には、巡回はまったく向きません。動き続ける画面は、視線を戻すたびに読み直しが必要になるからです。ここで効くのは、位置を固定することです。

Chromeのヘルプに載っているmacOS向けのキー操作では、次のタブが ⌘+option+右矢印、前のタブが ⌘+option+左矢印、左から数えた特定のタブが ⌘+1 から ⌘+8、最後のタブが ⌘+9 です。この最後の1つが実務では効きます。よく使う画面をいちばん右へ固定しておけば、左側にタブがいくつ増えても同じキーで着けるからです。

タブグループを折りたたむと、数枚のタブが名前の付いた1つの見出しに縮みます。40枚のタブを抱えた窓でも、案件ごとに6つの見出しに畳めば、視線で追える量になります。タブ列の右端にある矢印から開くタブ検索は、開いているタブをページタイトルで絞り込めるので、名前を思い出せる画面ならここが最短です。

  • 巡回させたい: スクリプトか専用の道具
  • 探さずに飛びたい: 固定位置とキー操作、タブグループ、タブ検索
  • 鮮度だけ保ちたい: 常にアクティブにするサイトの登録と、更新方式の確認

通知から飛ぶ形にすると、巡回が要らなくなる

巡回を組みたくなる動機のうち、「新しい連絡を見落としたくない」という部分は、実は巡回では解けません。8枚を30秒ずつ回すと、1周するのに4分かかります。その間に届いた連絡は、画面に出ていない時間のほうが長いことになります。

見落としを減らしたいなら、こちらから見に行く回数を増やすのではなく、向こうから知らせてもらう形に変えます。Webアプリの通知をブラウザではなくmacOSの通知センターに出るようにしておき、通知をクリックしたときに該当のタブが前へ来るようにする。この形なら、普段の画面は動かないまま、必要なときだけ切り替わります。ChromeはWebアプリ側の通知許可を出していれば標準でこの動きをするので、追加の道具は要りません。

ただし、複数のアカウントで同じサービスを開いている場合、通知がどのアカウントのものか判別できないという別の問題が出ます。通知は届くのに、どのタブを見ればよいのか分からないという状態は、切り替えの手間を減らすどころか増やします。

窓の単位で持つと、切り替えの回数そのものが減る

ここまでの話を1段引いて見ると、自動化で減らそうとしているのは「切り替えにかかる時間」ではなく「どれを選ぶか判断する回数」だと分かります。タブが12枚を超えたあたりからタブ列の文字が消えてアイコンだけになり、Googleの画面が2つ並ぶと見分けがつかなくなる。この状態を放置したまま切り替えを速くしても、選び間違いの回数は減りません。

分ける単位をタブから窓に変えると、判断の回数が構造的に減ります。仕事の種類ごとに窓を1つ持ち、その窓の中には関係するサービスだけを置く。窓の切り替えは ⌘+` で回せるので、タブ列を読む工程がまるごと消えます。この考え方をブラウザ側の仕組みとして持たせたのがアプリ集約ブラウザで、アプリごとに独立したワークスペースという形で、Webアプリごとに固定の置き場所とセッションを与えます。仕事の単位で窓とセッションをまとめる考え方はワークスペースにまとめられており、この形で動くように設定済みのサービスは使えるアプリで確認できます。

すでに同種の道具を使っている場合は、巡回や自動切り替えの機能をどこまで持っているかが製品ごとに違います。機能の範囲と料金を並べたWaveboxとの比較を見ると、いま払っている金額に対して自分が使っている部分がどれだけあるかを判断しやすくなります。

順番としては、まず自分が3通りのどれなのかを決める。巡回なら常にアクティブにするサイトを登録してからスクリプトを書く。探す手間が問題なら、自動化ではなく置き場所を固定する。この順で手を付けると、道具を増やさずに終わる場合がかなりあります。

よくある質問

Chromeにタブを自動で切り替える設定はありますか?

ありません。設定画面にタイマーの項目は無く、標準のキー操作は1回につき1枚ずつ手動で送るものです。一定時間ごとに送りたい場合は、AppleScriptで active tab index を書き換えるスクリプトを常駐させるか、タブを巡回させる拡張機能を入れる必要があります。

作業中にタブが勝手に切り替わるのを止めたいのですが?

まず経路を切り分けてください。メールやチャットのアプリからリンクを開いたときにブラウザが前面へ出るのはmacOSの標準の動きで、ブラウザ側では止まりません。拡張機能が原因かどうかは、すべて無効にして再現するかを見れば判別できます。ページ側の自動遷移であれば、同じタブの中身が変わっているだけです。

巡回表示にしたのに数字が古いままなのはなぜですか?

Chromeが使っていないタブを無効にして再読み込みしていることと、非表示のページのタイマーが5分を超えると1分に1回しか確認されなくなることの2つが重なっているためです。設定の「パフォーマンス」で常にアクティブにするサイトへ登録し、画面がタイマー更新かWebSocket更新かを確かめてください。

巡回させる間隔はどのくらいが適切ですか?

映すタブの枚数から逆算します。8枚を30秒ずつ回すと1周に4分かかるため、数分単位で変化する数字なら30秒でも足りますが、秒単位で見たい監視画面には向きません。枚数を減らすか、重要な画面だけを別の窓に固定して常時表示にするほうが確実です。

記事一覧へ戻る