UserScriptのURLからのインストールと自動更新させる方法

社内向けにちょこちょこUserScriptを書いているが、作成時や更新のたびに、メール添付したりSlackなどのチャットツールでソース流したりと、配布するのが面倒だった。

今回、更新頻度が高くなりそうなスクリプトを書くついでに、UserScript配布サイトのように、リンククリックからのダウンロードや自動更新を行えないか調べたのでメモ。

環境

Tampermonkey v4.10にて確認。

配布方法

TampermonkeyのFAQ、Q102に記載があった。

www.tampermonkey.net

URLの末尾を「.user.js」にしてやると、そのページを開いたときにTampermonkeyやGreasemonkeyといった拡張機能がブラウザに追加されていれば、そのURLのスクリプトをインストールするか確認してくれる。

また、すでにインストールされた状態でアクセスすると、バージョン番号が同じなら「再インストール」、バージョンが上がっていれば「更新」、バージョンが下がっていれば「ダウングレード」と、状況に応じてそれぞれ確認される。

更新方法

Tampermonkeyのドキュメントに記載があった。

www.tampermonkey.net

UserScript冒頭のコメント部分に @updateURL を追加し、そこにスクリプトのURLを記述しておく。

「UserScriptの更新を確認」した場合などに、インストールされているスクリプト@updateURL に書かれたスクリプト@version を比較し、 @updateURLスクリプトが更新されていれば自動更新される。

きちんとバージョン番号の比較を行っているらしく、バージョンが下がった場合は更新されない。

前述のドキュメントには、 @downloadURL も更新に関係しそうな記述があるが、 @updateURL の記述だけでも自動更新は有効だった。

以下のページにあるように、GitサーバーのmasterブランチのrawファイルURLを書いておくのが手っ取り早い。

www.tampermonkey.net

サンプル

サンプルを書いてみた。

GitHub - hepokon365/updatable_userscript

以下、 https://example.com を開くとコンソールログにバージョン番号を出すだけのスクリプト

https://github.com/hepokon365/updatable_userscript/raw/v1.0.0/src/sample.user.js

// ==UserScript==
// @name         Updatable Userscript
// @namespace    https://github.com/hepokon365/updatable_userscript
// @version      1.0.0
// @description  updatable userscript sample.
// @author       hepokon365
// @match        https://example.com/
// @grant        none
// @updateURL    https://github.com/hepokon365/updatable_userscript/raw/master/src/sample.user.js
// @downloadURL  https://github.com/hepokon365/updatable_userscript/raw/master/src/sample.user.js
// @supportURL   https://github.com/hepokon365/updatable_userscript
// ==/UserScript==

(() => {
  console.log('v1.0.0');
})();

インストールしたときは v1.0.0 だが、masterブランチを参照して更新がかかると v1.1.0 になる。

振り返り

社内での配布は、利用者全員にGitサーバーのアカウントを作成するわけにもいかなかったため、CIで配布用のURLにコピーしたりといったひと手間が必要だったが、それでも従来の配布による更新よりはだいぶ楽になった。