Coherence XのChrome拡張機能とは|外すと何が消えるのか

Coherence XのChrome拡張機能を調べている人が最初に感じるのは、たいてい違和感です。ブラウザから逃がすために作ったはずのアプリの中に、ブラウザの拡張機能が動いている。矛盾しているように見えますが、これはこの種の道具の仕組みを一番よく表している事実です。拡張機能は付け足しの機能ではなく、包んだサイトをMacのアプリらしく見せている処理そのものが、そこに入っています。

借り物のブラウザに手を入れる口は1つしかない

この道具はブラウザのエンジンを自分では持っていません。作られたアプリは、そのMacにすでに入っているChromium系のブラウザの上で動きます。対応エンジンとして挙げられているのはChrome、Brave、Edge、Chromium(ungoogled版を含む)です。表示が元のブラウザとまったく同じになるので、Chromeでしか検証していない社内の管理画面もそのまま動きます。

その代わり、動いている窓に手を入れる方法が限られます。自分でElectronのアプリを組むなら、画面の遷移も窓の生成もリンクの扱いも自分のコードで横取りできます。ブラウザを借りる方式にはそれがありません。動いているChromiumの窓へ正規に手を入れられる口は拡張機能のAPIだけです。だから、素のブラウザの窓とアプリを分けている挙動は拡張機能として実装され、その拡張機能が作成したすべてのアプリに自動で入ります。

Coherence apps are based on third-party browsers, so the Coherence extension enables additional functionality that would not otherwise be possible. The extension is lightweight, offline, and private. 出典: help.bzgapps.com

他社のブラウザを土台にしている以上、この拡張機能がなければ実現できない機能がある、という説明です。宣伝ではなく設計上の制約の説明として読むのが正確で、裏を返せば、拡張機能のAPIでできないことはこの道具にもできない、ということでもあります。

拡張機能が担っている3つの仕事

設定はアプリの中から開きます。メニューバーの「Window」から「Extensions」を選ぶと、その画面に入れます。実用上の価値のほとんどは、次の3つに集まっています。

リンクの振り分け

画面の大半は、リンクの振り分け規則に使われています。規則に合うアドレスだけがアプリの中で開き、合わないものは既定のブラウザへ渡されます。

これが、包んだアプリがブラウザに戻ってしまうのを防ぐ仕組みです。規則を入れていないチャットのアプリは、誰かがニュースの記事を貼った瞬間から汎用のブラウザになります。1週間も経てば、窓の中に問い合わせの画面と表計算と読むつもりのなかった記事が3枚並びます。規則を入れておけば、その窓には作った目的のサービスしか入りません。

書き方のこつは、素のドメインより少しだけ広めにすることです。ログインの遷移、ファイルの表示、決済の画面は別のホストに置かれていることが多く、狭すぎる規則は認証の途中で既定のブラウザへ飛ばしてしまいます。「作ったアプリでログインが完了しない」という詰まり方の多くは、この設定に原因があります。

Dockの復帰と、窓の判別

拡張機能が動いていない状態で窓を閉じ、Dockのアイコンを押すと、何も表示していないブラウザの窓が出ます。拡張機能は最後に見ていた状態を覚えていて、そこへ戻します。加えて、利用者が開いた窓とエンジンが出したポップアップを区別するので、ログインのダイアログやファイルの選択画面が新しいアプリの窓として扱われることもなくなります。

小さな話に見えますが、Dockのアイコンこそがアプリを作った理由そのものです。押せば元の場所に戻るならアプリで、たまに空の窓が出るならひと手間多いショートカットにすぎません。

Googleのログインの回避

Googleは、認識できないブラウザの枠からのログインを拒否します。自作の包み方で最初にぶつかる壁がここです。拡張機能は、Googleのログインが発生したときにユーザーエージェントをFirefoxとして申告し、認証が終わったあとに設定を戻せるようにしています。これは機能というより、他社の方針への回避策です。道具を使う理由の1つは、こうした回避策の保守を肩代わりしてもらえる点にあります。

外すと何が消えるか

この拡張機能は自動で入りますが、必須ではありません。環境設定で「Automatically include Coherence extension」の選択を外すと、新しく作るアプリに追加されなくなります。

外した状態で残るのは、サイトを正しく表示する窓だけです。リンクの振り分けは効かなくなり、すべてのリンクがアプリの中で開きます。Dockのアイコンは前の状態に戻さなくなります。Googleのログインの回避策もなくなります。結果として、Chromeが標準で持っている「アプリとしてインストール」とほぼ同じところまで戻ります。有料の道具が無料の経路の隣に存在できている理由が、そのまま消える形です。

外すことに理由があるのは、アプリごとの拡張機能の一覧を厳密に管理する必要がある環境か、注入される処理とサイト側の実装がぶつかる場合です。それ以外では入れたままが既定になります。

アプリごとに別の拡張機能を入れられる

検索して辿り着く人の多くが本当に知りたいのは、こちらかもしれません。作られたアプリはそれぞれ独立したブラウザの実体を持つため、Chromeウェブストアの拡張機能はアプリ単位で入ります。ブラウザ全体にも、他のアプリにも波及しません。

この粒度は実用的です。

  • パスワード管理は必要な2つのアプリにだけ入れて、それ以外には置かない。資格情報に手が届く範囲がそのぶん狭くなる
  • 広告のブロックはニュース系のアプリにだけ入れる。表示が崩れやすい社内の管理画面には入れない
  • 文章の校正は書きもの用のアプリにだけ入れる。給与や取引の画面には出てこない

代償は在庫の管理です。アプリ単位で入れた拡張機能は、アプリ単位で更新と点検が必要になります。同じパスワード管理を5つのアプリに入れれば、追いかける対象が5つになります。実務的な落としどころは、アプリごとの拡張機能をなるべく短い一覧に保つことと、すべてのアプリに要る拡張機能が出てきたら「それはブラウザ側に置くべきものだ」と判断することです。

振り分けの規則で詰まりやすい4か所

リンクの規則は、一度だけ設定して少し間違えたまま放置され、道具のせいにされやすい項目です。詰まる場所はだいたい4つに集約されます。

1つ目はログインです。認証は元のサービスと同じホストでは行われないことがほとんどで、Googleのログインならaccounts.google.com、Microsoftならlogin.microsoftonline.com、社内の統合認証なら認証基盤側のホストを通ります。サービスのドメインだけを規則に入れていると、遷移が起きたその瞬間に既定のブラウザへ飛ばされます。そこで完了したログインはアプリの中には残りません。ホストを足す順番として、認証の行き先は最優先です。

2つ目は添付ファイルと書き出しです。報告書の出力、画像の表示、生成された文書は、別の保管用のホストや署名付きのURLで配られることがよくあります。ここが外へ飛ぶと、サイトとは無関係の理由でアプリが壊れているように見えます。

3つ目は決済と請求の画面です。決済の事業者のドメインに置かれていることが多く、手続きの途中で既定のブラウザへ送られた利用者は、続きをやるのではなく最初からやり直します。

4つ目は逆向きの失敗で、規則が広すぎる場合です。1つのサブドメインが必要だったからといって最上位のドメインごと許可すると、その会社のWebサイト全体がアプリの窓に戻ってきます。規則を作った理由そのものが消えます。

実務的な進め方は、サービスのホストと認証のホストだけで始めて、1週間使い、実際に外へ飛んだものだけを足していくやり方です。この順番で作った規則は短いままで済み、短い規則は1年後に読んでも意味が分かります。

どの経路で誰が仕事をしているか

挙動 SafariのDockに追加 Chromeでアプリとしてインストール Coherence X
ログインの分離 macOSが担当 分離されない アプリごとの実体
外部リンクを既定のブラウザへ 標準で対応 なし 拡張機能の規則
Dockの押下で前の状態に戻る 標準で対応 空の窓が出る 拡張機能
アイコンの変更 設定から可能 サイト側のものが使われる 可能
アプリ内の拡張機能 Safari機能拡張をアプリ単位で プロファイルのChrome拡張 Chromeウェブストアをアプリ単位で
Googleログインの回避 不要 不要 拡張機能が担当
必要なもの macOS Sonoma 14以降 現行のChrome macOS 13.5以降とChromium系ブラウザ

右端の列に共通しているのは、Safariが基本ソフトから受け取っている挙動を、Chromium系の包み方では拡張機能から受け取っている、という点です。優劣の話ではありません。導入する前に何を確かめておくべきかが、この違いで決まります。

この観点で道具を選ぶ

この分野の道具を比べるとき、機能の一覧の長さはあまり役に立ちません。役に立つのは、それぞれの機能がどこで実装されているかです。土台が変わったときに何が壊れるかが、それで決まります。

基本ソフトが提供している挙動は、Appleが変えるまで動きます。拡張機能が提供している挙動は、拡張機能の土台が変わるまで動きます。同梱したエンジンが提供している挙動は、同梱物を作り直すまで動きます。更新の止まった包み方の道具が古いページを表示し続けるのは、この3番目に当たるからです。

もう1つの観点は、離れるときの費用です。1つの一覧から数分で作り直せる構成なら、その道具に縛られている度合いはほとんどありません。1つのアプリに20分の設定を積み上げる構成なら、乗り換えのたびに同じ時間をもう一度払うことになります。

一覧ページから読み取れること

先に見ると判断が速くなる情報が2つあります。1つは雛形として用意されているサービスの数と偏りで、対応サービス一覧のようなページには300以上のプリセットからすぐ作れることが掲げられています。その並びを眺めれば、その道具が想定している使い方が見えます。チャットとメールに寄った一覧なら、社内の管理画面を包む用途は想定の外かもしれません。

設定項目の細かさはできることで確認でき、実際にどれだけ手を動かすのかは使い方ガイドで見当が付きます。買い切りか継続課金か、対応するmacOSの下限はどこかは料金にまとまっており、判断が割れやすい点はよくある質問で先に潰せます。

そして、この3種類の経路は排他ではありません。通知と2つ目のアカウントが要るものは標準の経路で、アプリ単位の拡張機能とリンクの振り分けが要るものだけ専用の道具で作る。長く残っている構成は、たいていこの混在型です。

よくある質問

拡張機能は外せますか?外すと何が変わりますか?

外せます。環境設定で「Automatically include Coherence extension」の選択を外すと、新しく作るアプリに追加されなくなります。ただしリンクの振り分け、Dockの押下で前の状態に戻る挙動、Googleのログインの回避策がすべてなくなり、Chromeの「アプリとしてインストール」とほぼ同じところまで戻ります。

アプリの中にChromeウェブストアの拡張機能を入れられますか?

入れられます。作られたアプリはそれぞれ独立したブラウザの実体を持つため、1つのアプリに入れた拡張機能は他のアプリにもブラウザ本体にも現れません。必要なアプリにだけパスワード管理や広告のブロックを置ける代わりに、更新はアプリごとに個別に必要になります。

なぜGoogleのログインでユーザーエージェントをFirefoxにするのですか?

Googleが認識できないブラウザの枠からのログインを拒否するためです。包んだアプリの窓はその対象になりやすく、拡張機能はログインの間だけFirefoxとして申告して認証を通します。認証が済んだあとは設定を元に戻せます。

Dockのアイコンを押すと空のブラウザの窓が出ます。故障ですか?

故障ではなく、拡張機能が有効になっていないときの標準的な挙動です。拡張機能が入っていない状態では、窓を閉じたあとのDockの押下で新しいブラウザの窓が開きます。まずそのアプリで拡張機能が有効かどうかを確認してください。

記事一覧へ戻る