ブラウザのタブ開きすぎ問題

相変わらずタブを開きすぎで、いい加減にChromeが重い。
そもそもなぜタブが増えていくのかというと…

  • 多数のリソースを同時参照しながら作業したい
  • 私にとってのタブとは「後で読む」リストでもある
  • いつか見たくなる日が来るから安易にタブを閉じられない…(積読状態)

でもこのままだと重いので、一旦どうにかしたい。

  • ブックマークしてから閉じるのはめんどくさい
  • 開いているタブのURLさえ控えておけば、安心してタブを閉じられる

開いている全タブのURLを一括取得する手段

  • 公開されているChrome拡張機能を使う
    • もちろん一番手っ取り早い
    • でも無闇に第三者の拡張機能を入れたくない…
  • Tabs API を使う - MDN
    • JavaScriptでブラウザのタブを操作できるAPIがある
    • tabs.query()を使えば全タブの情報を取得できる
    • しかし権限の都合上、ブラウザ拡張機能の中のJSでしかこのAPIは呼び出せない
  • AppleScriptを使う(MacOSのみ)
    • 対応しているアプリケーションであれば、AppleScriptでOS側から指示を出せる
    • .scptファイルにスクリプトを書いて実行するのが普通だが、ワンライナーも作れる

AppleScriptワンライナーで実現する

次のワンライナーをターミナルで実行すると、

osascript -e 'tell application "Google Chrome" to get URL of tabs of front window' | tr ',' '\n'

Chromeの最前面にあるウィンドウの、全タブのURLが1行ずつ表示される:

https://tetracalibers.github.io/webgl-practice-ground/norm-lerp-map/
https://gabrielgambetta.com/computer-graphics-from-scratch/13-shading.html
https://samruddhichitnis02.medium.com/how-to-do-image-convolution-from-scratch-using-numpy-902541f08a9a
https://www.sfu.ca/~jtmulhol/py4math/linalg/ap-image-convol/
https://medium.com/@whyamit404/numpy-2d-convolution-a-practical-guide-b01a759712e2
https://zenn.dev/rchiji/books/201199bf94a67e/viewer/5ee54e
https://note.nkmk.me/python-numpy-generate-gradation-image/
https://note.nkmk.me/image-processing/
https://okaydev.co/articles/dive-into-webgpu-part-1

このURL一覧をメモアプリ等にコピペしておけば、未練なくウィンドウを閉じられる。

ワンライナーの解剖

Chromeアプリに指示を出す部分

osascript -e 'tell application "Google Chrome" to ...'
  • osascript:AppleScriptを実行するコマンド
  • -e '...':インラインでAppleScriptを書くオプション
  • tell application "Google Chrome":Chromeをオブジェクトとして操作する

最前面ウィンドウの全タブのURLを取得する部分

get URL of tabs of front window
  • front window:最前面に表示されているChromeのウィンドウ
  • tabs of ...:そのウィンドウに含まれる全タブ
  • get URL of ...:その全タブが持っている URL プロパティを取得

これで全タブのURLがカンマ区切りのリストとして取得される:

"https://example.com", "https://example.org", ...

1行ずつの表示に整形する部分

| tr ',' '\n'
  • |:前のコマンドの出力を次のコマンドに渡す(パイプ)
  • tr ',' '\n':カンマ,を改行\nに置換する