社内向けにちょこちょこUserScriptを書いているが、作成時や更新のたびに、メール添付したりSlackなどのチャットツールでソース流したりと、配布するのが面倒だった。
今回、更新頻度が高くなりそうなスクリプトを書くついでに、UserScript配布サイトのように、リンククリックからのダウンロードや自動更新を行えないか調べたのでメモ。
環境
Tampermonkey v4.10にて確認。
配布方法
TampermonkeyのFAQ、Q102に記載があった。
URLの末尾を「.user.js」にしてやると、そのページを開いたときにTampermonkeyやGreasemonkeyといった拡張機能がブラウザに追加されていれば、そのURLのスクリプトをインストールするか確認してくれる。
また、すでにインストールされた状態でアクセスすると、バージョン番号が同じなら「再インストール」、バージョンが上がっていれば「更新」、バージョンが下がっていれば「ダウングレード」と、状況に応じてそれぞれ確認される。
更新方法
Tampermonkeyのドキュメントに記載があった。
UserScript冒頭のコメント部分に @updateURL
を追加し、そこにスクリプトのURLを記述しておく。
「UserScriptの更新を確認」した場合などに、インストールされているスクリプトと @updateURL
に書かれたスクリプトの @version
を比較し、 @updateURL
のスクリプトが更新されていれば自動更新される。
きちんとバージョン番号の比較を行っているらしく、バージョンが下がった場合は更新されない。
前述のドキュメントには、 @downloadURL
も更新に関係しそうな記述があるが、 @updateURL
の記述だけでも自動更新は有効だった。
以下のページにあるように、GitサーバーのmasterブランチのrawファイルURLを書いておくのが手っ取り早い。
サンプル
サンプルを書いてみた。
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にコピーしたりといったひと手間が必要だったが、それでも従来の配布による更新よりはだいぶ楽になった。