やりたいこと
GoogleSpreadsheetで作った管理表を何人かで共有していて、
ステータス列が変更された時、すぐ通知が欲しいという事ありませんか。
今回、GoogleSpreadsheetの特定の列が更新されたらSlackに通知が飛ぶように、
GoogleAppsScriptを使って実現してみます。
手順
- SlackのIncoming Webhookの設定をする
- 対象のSpreadsheetにて、スクリプトを書く
- トリガーの設定をする
1. SlackのIncoming Webhookの設定をする
Slackの画面左上の組織名をクリックし、設定と管理→アプリを管理する へ進む。
カスタムインテグレーションからIncoming Webhookをクリック。
(注意書きにもあるように、カスタムインテグレーションは2020/08時点で非推奨となっていますので、そのうち書き換えます)
次の画面に出てくるWebhook URLをメモして、画面下部の「設定を保存する」ボタンを押す。
いったんSlackから離れます。
2. 対象のSpreadsheetにて、スクリプトを書く
Slackに通知を送りたいSpreadsheetを開き、
ツール→スクリプトエディタを開く。
開いたら以下のコードをコピペ。(後で少し書き換えます)
コード
/**
新しく値が追加されたときに、Slackにお知らせする関数
*/
function onEdit(e) {
// 対象のシート名
const TARGET_SHEET = "list";
// 対象の列番号 (A=1, B=2,...)
const TARGET_COLUMN = 5;
// 対象のSlack webhook URL
const SLACK_URL = "https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX";
// 更新したシートとセル
let sheet = SpreadsheetApp.getActiveSheet();
let cell = sheet.getActiveCell();
// 対象のシート・列でなければ何もしない
if (!e || (sheet.getName() != TARGET_SHEET) || (cell.getColumn() != TARGET_COLUMN )) {
return;
}
// Slackに送るテキストメッセージ
let message = e.user + " さんが " + cell.getA1Notation() + "を更新しました。\n" + e.oldValue + "\n↓\n" + e.value;
const OPTIONS = {
"method": "post",
"contentType" : "application/json",
"payload" : JSON.stringify({
"text" : message
})
};
UrlFetchApp.fetch(SLACK_URL, OPTIONS);
}
↑のコードを、利用状況に合わせて書き換えます。
まずは、TARGET_SHEET, TARGET_COLUMN, SLACK_URLを書き換えてください。
TARGET_COLUMNは、E列の更新を通知したい場合、5、と書きます。
SLACK_URLには、手順1でメモしたURLを書きます。
終わったら保存します。(Ctrl+s または、💾ボタンをクリック)
3. トリガーの設定をする
現時点では、このプログラムは保存されただけで起動するきっかけがありません。
次にするのはトリガーの設定です。
イベントの種類を「編集時」に変更します。
その他は変更不要です。
保存を押したら完了です。
Spreadsheetを変更してSlackに通知がいくかどうか、テストしてみてください。
おわりに
手順を大幅にすっ飛ばして、動作させるための「基本」のやり方だけ説明しました。
エラーチェックをしたり、メッセージを変えてみたり
カスタマイズを色々と試してくださいね。