ZoomのリリースノートをGASでSlackに通知させてみた
全般
Zoomのアップデートを確認するのが面倒なので作ってみました。
スプレッドシートのIMPORTXML関数と簡単なGASで実装。
雰囲気で作って30分程度でした。
きっかけ
このツイートを見て「あ、うち(弊社)も通知させよう」と思ったことから
実装方法
使用ツール
- スプレッドシート(標準の関数)
- Slack Incoming Webhooks
- Google Apps Script (=GAS)
完成イメージ
-
スプレッドシート側
-
Slack側
スプレッドシート側の準備
-
新規シートを作成し、項目名を書く
-
B2・B3セルに、WindowsとMacのリリースノートのリンクをそれぞれコピペしてくる
-
対象のURLを開く
-
Chromeのデベロッパーツールを開く
-
エレメント選択ツールをクリックする
-
Current Releaseの下(日付・version)あたりをクリックする
-
6で選択した箇所がソースコード上でも選択済み(青塗り)になるので、[右クリック] > [Copy] > [Copy XPath] をクリックする
-
C1(Win)・C2(Mac)ともに6をコピペする
-
D2に
を入力する=IMPORTXML(B2,C2) -
D3に
を入力する=IMPORTXML(B3,C3) -
D列・E列に取得してきた情報が自動で出力される
-
D列・E列を1つの文字列として扱いたいので、F列で結合
-
G列は後述のScriptによって上書きされる
-
H列はF列・G列をIF関数で比較
Slack側の準備
-
[App] > [Incoming Webhooks] > [追加] をクリックする
-
[Slackに追加] をクリックする
-
投稿先のチャンネルを選択して [Incoming Webhook インテグレーションの追加] をクリックする
-
必要な設定をして [設定を保存する] をクリックする
GAS側の準備 ~ソースコード編~
- 準備したスプレッドシートの [ツール] > [スクリプトエディタ] をクリックする
- 以下のサンプルコードを元にScriptを作成する
/**
* Zoom の ReleaseNotes の更新通知Script
*
* @return {boolean}
*
* トリガー:毎日 午前9:00 ~ 10:00
*/
function notificationZoomReleaseNotes() {
const ss = SpreadsheetApp.openById("スプレッドシートID");
const sheet = ss.getSheetByName("シート名");
const forWinLink = sheet.getRange("B2").getValue();
const forMacLink = sheet.getRange("B3").getValue();
const thisWinVer = sheet.getRange("F2").getValue();
const thisMacVer = sheet.getRange("F3").getValue();
const winDiff = sheet.getRange("H2").getValue();
const macDiff = sheet.getRange("H3").getValue();
// Slack通知用のフィールドオブジェクトの初期化
let fields = [];
// WinもMacも差分なければ終了。何も通知しない
if (winDiff === true && macDiff === true) {
return;
}
// Winだけfalse(差異がある)場合
else if (winDiff === false && macDiff === true) {
fields.push(
{
"title": "`Windows`",
"value": "<" + forWinLink + "|" + thisWinVer + ">",
"short": false
}
);
sheet.getRange("G2").setValue(thisWinVer);
}
// Macだけfalse(差異がある)場合
else if (winDiff === true && macDiff === false) {
fields.push(
{
"title": "`Mac`",
"value": "<" + forMacLink + "|" + thisMacVer + ">",
"short": false
}
);
sheet.getRange("G3").setValue(thisMacVer);
}
// WinもMacもfalse(差異がある)場合
else {
fields.push(
{
"title": "`Windows`",
"value": "<" + forWinLink + "|" + thisWinVer + ">",
"short": false
},
{
"title": "`Mac`",
"value": "<" + forMacLink + "|" + thisMacVer + ">",
"short": false
}
);
sheet.getRange("G2").setValue(thisWinVer);
sheet.getRange("G3").setValue(thisMacVer);
}
// Slack通知の本文作成
const slackBody =
{
"attachments" : [
{
"fallback": "Zoomのリリース情報だよ:bulb:",
"color" : "#258cfb",
"pretext" : "<!channel>\n\nZoomの新しいバージョンが出たよ:bulb:\n必要なら <https://xxxxx.zoom.us/account/setting|[アカウント設定] > [管理者オプション]> から最低バージョンの変更してね〜:feet:",
"fields" : fields
}
],
};
// インテグレーションのWebhook URL(本番)
const url = "https://hooks.slack.com/services/xxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxx";
// 送信オプション
const options = {
method : "post",
contentType : "application/json",
payload : JSON.stringify(slackBody),
};
// 送信処理
UrlFetchApp.fetch(url, options);
}
GASの準備 ~トリガー編~
- スクリプトエディタの左側メニューからトリガー(時計アイコン)をクリックする
- [トリガーを追加] をクリックして下記のように設定(サンプル)
その他
Zoomの管理者であれば、管理画面からクライアントの最低バージョンを制限できるようです。
感想
最初は単純にIMPORTXML関数で取得してきてGASの変更時トリガーで通知させようとしたけれども、見た目上変更も編集も行われていないのに勝手にトリガー起動して通知きてホラーだったので、意図的に前回値と比較する作りにしました。
Discussion