最近の新しい Google Chrome にストア以外から拡張をインストールする

はじめに

Google Chrome では、ストア以外から拡張をインストールすると、次回起動時に無効化されてしまいます。

(開発者モードでパッケージ化する前の状態の拡張をインストールすると、次回起動時でも有効になりますが、 起動のたびに開発者モードがonになってますよとポップアップで警告してくれます。)

社内で使うために手元で作ってるのに、登録してストアからインストールするのもつらいよなぁ (個人アカウントは使いたくない、会社用にアカウントを作るのは社内手続きが面倒)

みたいな状態だったので、なんとかしたいと調べてみた感じのことを書こうと思います。

本題

  1. なにはともあれ、拡張を作らないと始まらないので作りましょう。
  2. 作ったらパッケージ化します。
  3. パッケージ化したのをインストールしてappIDを確認しておきます。(パッケージ化前とはID変わります、バージョンアップのために鍵はなくさないようにしましょう)
  4. 拡張インストール用XMLを作成します。
  5. グループポリシを利用してレジストリに書きます。

以上で次回Google Chrome起動時に自動で拡張がインストールされ、使えるようになります。(アンインストールや無効化できません)

拡張インストール用XMLの作成

Autoupdating - Google Chrome

拡張インストール用XMLというよりは、拡張の自動アップデート用XMLなんですが、

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

調べておいたappIDを入力します、 codebase には、拡張の場所を記載します。 “c:\temp\xxx.crx” みたいなローカルパスも書けます。バージョンは実際の拡張(crxのmanifest)に書いてあるバージョンにしましょう。

レジストリへの記載

Policy List - The Chromium Projects

パスは HKLM\Software\Policies\Google\Chrome\extensioninstallforcelist です。 プロパティ名 1 とか 2 とかで REG_SZ なものに “appid;pat/to/xml” のような形で記載します。 ここでの path/to/xml についても c:\temp\xxx.xml みたいなローカルパスが指定できます。

デバイス用の Chrome ポリシーを設定する - Chrome for business and education ヘルプ こちらを参考にポリシーテンプレートをインストールしてActiveDirectoryなどを利用してレジストリ設定値をpush配信するほうが楽ですし、書き換えられてもログイン時に設定を強制できるので良いかと思います。

運用的な

XMLと拡張を何らかの管理ツールで各PCにpush配信するなり、Webサーバを用意して置くなりしましょう。

バージョンアップしたいときはXMLファイルを書き換えて再度 pushするなりWebサーバに配置するなりすれば、勝手にバージョンアップしてくれます。

終わりに

Firefox のWeb Extension APIはpromise対応していたりするのに Chrome のWeb Extension APIはpromise非対応な感じだったりしてつらいです。

この方法、個人のPCでも当然行えるので、オレオレ拡張を自分が使うだけなら有効だったりします。