Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

URL から profile を自動判別する Smart Google Chrome を作ろうとした

結論

URL を見て profile を自動判別して開くアプリ、もうあるってよ

brew install --cask choosy

Chrome の profile

Google Chrome の profile 機能を使っていますか? これは、ブックマークや履歴などの情報や設定を使い分けることができるものです。

support.google.com

例えば、仕事用と私用で使い分けるのが良くあるパターンですね。 id:arthur-1 は計4つの Google アカウントを持っているので、それぞれに対応した profile を Chrome に登録しています。

こいつが便利なんですが、痒い所に手が届かないのです。

複数の profile のウィンドウを同時に立ち上げている時に問題が起こります。Slack のアプリなどに表示されるリンクを踏んだとき、自分が開きたい profile のウィンドウでページが開かないことがあるのです。

挙動としては一貫性があり、直近でアクティブだったウィンドウの profile にタブが追加されます。しかし、サイトを開く前に開きたいウィンドウをアクティブにするのは面倒です。業務システムへのアクセスをプライベートな profile のブラウザでしてしまうことになりかねません。

profile を指定してページを開く方法

MacGoogle Chrome で、特定のWebページを特定の profile で開きたい場合はこのスクリプトを実行すれば良いです。

open -na "Google Chrome" --args "https://example.com/" --profile-directory="Profile 1"

"https://example.com/" のところには開きたいページを、 --profile-directory オプションには profile ディレクトリ名を指定しましょう。

profile ディレクトリ名は chrome://version/ というページを開くと分かります。下の図のような表示であれば "Profile 2" と指定すれば良いです。

「プロフィールパス」の末尾に注目

smart-google-chrome.sh

URL を見て開きたい Profile を判別させるために、こんなシェルスクリプトを書いてみました。

#!/bin/zsh

p1_website_regexs=(
  '^[http?s://]?blog\.arthur1\.dev'
)

# 引数指定がない場合は通常通り Chrome を開く
if [[ $# -eq 0 ]]; then
  open -na "Google Chrome"
  exit 0
fi

# 引数がある場合には p1_website_regexs にマッチするなら Profile 1 で開く
for regex in $p1_website_regexs; do
  if [[ $1 =~ $regex ]]; then
    open -na "Google Chrome" --args $1 --profile-directory="Profile 1"
    exit 0
  fi
done

# どれにもマッチしなかったので、profile を指定せず開く
open -na "Google Chrome" --args $1

以下のようにスクリプトを指定すると、引数に渡した Web ページが Chrome で開きます。

smart-google-chrome.sh https://blog.arthur1.dev

このとき、URL が p1_website_regexs 配列に指定した正規表現にマッチするならば、Profile 1 を明示的に指定して開く、という挙動になります。

Automator でアプリ化も...

macOS には、Automator という地味に便利な仕組みがあります。Automator を使うと、シェルスクリプトをアプリケーションのように動かすことができます。

これにより、作ったスクリプトをアプリ化したものをデフォルトブラウザとして指定すれば、URL をクリックした時に自分が開きたい profile でページを開く最高体験ができるのでは、と考えました。

しかし、作ったものをデフォルトブラウザに指定することはできませんでした。Xcode を使ってきちんと mac のアプリとして作らないとブラウザとして認識してもらえないようです。

stackoverflow.com

車輪の再開発回避

仕方ないから Swift 入門するか、と思って諦めていたとき、社の先輩が「それ、Choosy というアプリでできそう」と教えてくれました。

choosy.app

これがまさに自分が欲しかったものそのものでした。どのアプリから開いたリンクか、URLの文字列が何から始まるか、などの条件に応じて、どのブラウザ(profile 指定も可能)で開くかというルールを自由に設定できます。

また、ルールにマッチしなければ、ブラウザを開く前にポップアップが表示されどのブラウザかを選択する、といったことも可能です。

Choosy はブラウザのプロキシアプリケーション的な存在なので、これをデフォルトブラウザにして生活します。

シェアウェア($10)ではありますが、自分は気に入ったので課金しようと思います。

まとめ

profile を使い分けている方は choosy を使うとペインが解消されるかも?という情報でした。