Google Sheets(スプレッドシート)からSlackへのメッセージ送信をスケジューリングする方法
みなさんは普段 Google Sheets(以下スプレッドシートとする)を使ってどんな情報を管理されていますか?
利用用途はスケジュール管理やプロジェクトの課題管理など多岐にわたります。ただ、そういったスプレッドシートで管理される情報はストック情報になるため、場合によっては存在を忘れられてしまい化石化するケースもめずらしくありません。
今回この記事ではそういったスプレッドシートのストック情報をフロー情報として Slack へ特定のタイミングで送信する方法を紹介します。
利用ケースとしては以下のようなシーンで活用いただけます。
- 営業リストからアポ取りのリマインドを自動通知
- プロダクト公開もしくは納品前に関係者へ自動通知
- 数字目標の達成有無を自動通知
やりたいこと
今回作成するツールの要件は以下になります。
- あらかじめスプレッドシートに登録した通知日と今日の日付がマッチする内容を Slack の特定チャンネルへポストする
- 登録した日付と合う情報がないか毎日定期的に自動で確認する
- シートに登録する情報は
通知日、タイトル、内容、URL
とする
最終的に以下動画のようにスプレッドシートから Slack へ必要な情報を送信できることを目指します。(動画では手動送信していますが、送信タイミングは自由に設定できるようになります。)
利用条件
基本的に Google アカウントと Slack のアカウントがあれば利用いただけます。
- スプレッドシートの作成
- Slack ワークスペースの作成もしくは既存ワークスペースへの参加
- gas-sheets2slackの使用(※カスタマイズする場合)
1. Slack の設定
Slack へメッセージ送信する手法として送信用のアプリを作成し、スプレッドシートの情報をそのアプリ経由で特定チャンネルへポストしたいと思います。仕組みの詳細は以下参考リンクを参照ください。
以下リンクをクリックし、Create an App
を選択します。
From scratch
を選択します。
アプリの表示設定を行います。
管理画面の左サイドバーからIncoming Webhooks
を選択し、ON
にして有効化します。
有効化したチャンネルのWebhook URL
をコピーし、保存しておいてください。
2. スプレッドシートの設定
まず新規でシートを作成します。
シート名はSheet1
と入力し、項目名は以下のように設定してください。2 行目以降の内容は自由に設定してください。
通知日 | タイトル | 内容 | URL |
---|---|---|---|
2022/09/15 | Zenn | エンジニアのための情報共有コミュニティ | https://zenn.dev/ |
2022/09/20 | DEV | DEV Community 👩💻👨💻 | https://dev.to/ |
メニューの拡張機能 > Apps Script を展開します。
3-A. 開発テンプレ(gas-sheets2slack)を利用しない場合
ひとまず動作を確認してみたいという方は以下に Apps Script(GAS)のサンプルコードを用意しているので利用してください。ローカル環境でコードを編集したい場合、この操作は不要です。
<SLACK_WEBHOOK_URL>
となっている箇所に先ほど取得したWebhook URL
を貼り付けます。もしシート名を変更したい場合はSheet1
となっている箇所を合わせて変更してください。
function main() {}
(() => {
"use strict";
var e,
t,
a,
n = {
874: (e, t) => {
(t.__esModule = !0),
(t.createMessage = void 0),
(t.createMessage = function (e, t, a) {
return (
"\n タイトル: " + e + "\n 内容: " + t + "\n URL: " + a + "\n "
);
});
},
681: (e, t) => {
(t.__esModule = !0),
(t.postMessage = void 0),
(t.postMessage = function (e) {
if ("" !== e) {
var t = { text: e },
a = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(t),
};
UrlFetchApp.fetch("<SLACK_WEBHOOK_URL>", a);
}
});
},
184: (e, t) => {
(t.__esModule = !0),
(t.checkSameDate = void 0),
(t.checkSameDate = function (e, t) {
return (
e.getFullYear() === t.getFullYear() &&
e.getMonth() === t.getMonth() &&
e.getDate() === t.getDate()
);
});
},
},
o = {};
function r(e) {
var t = o[e];
if (void 0 !== t) return t.exports;
var a = (o[e] = { exports: {} });
return n[e](a, a.exports, r), a.exports;
}
(r.g = (function () {
if ("object" == typeof globalThis) return globalThis;
try {
return this || new Function("return this")();
} catch (e) {
if ("object" == typeof window) return window;
}
})()),
(e = r(184)),
(t = r(681)),
(a = r(874)),
(r.g.main = function () {
var n = new Date(),
o = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
if (null !== o)
for (var r = o.getLastRow() - 1, s = 0; s < r; s++) {
var i = new Date(o.getRange(2 + s, 1).getValue()),
g = o.getRange(2 + s, 2).getValue(),
c = o.getRange(2 + s, 3).getValue(),
u = o.getRange(2 + s, 4).getValue();
if ((0, e.checkSameDate)(n, i)) {
var l = (0, a.createMessage)(g, c, u);
(0, t.postMessage)(l);
}
}
});
})();
上記コードを Apps Script のmain.gs
ファイルへコピペします。
試しに Apps Script のメニューにある実行を押下してみましょう。指定したチャンネルにメッセージが送られていれば OK です。
3-B. 開発テンプレ(gas-sheets2slack)を利用する場合
Apps Script(GAS)のコードをカスタマイズしたい場合は左ナビの「プロジェクトの設定」からスクリプト ID を確認し、保存しておきます。
リポジトリのクローン
以下リポジトリへアクセスし、Use this template
を選択してください。
リポジトリのセットアップが完了したら、クローンします。YOUR-USERNAME
とYOUR-REPOSITORY
を書き換えて使用してください。
git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
パッケージのインストール
依存関係のあるパッケージをインストールします。
yarn install
ログイン認証
Apps Script(GAS) をローカル環境でカスタマイズできるよう、clasp という CLI ツールを利用します。
以下コマンドで Google のアカウント認証を行います。
yarn clasp login
初期設定
.clasp.json
ファイルをプロジェクトのルート直下に作成します。
<SCRIPT_ID>
を先ほど取得したものと差し替えてください。
{
"scriptId": "<SCRIPT_ID>",
"rootDir": "./dist"
}
次に.env
ファイルをプロジェクトのルート直下へ作成します。
<SLACK_WEBHOOK_URL>
を Slack の管理画面で取得した Webhook URL と差し替えてください。
SLACK_WEBHOOK_URL=<SLACK_WEBHOOK_URL>
プロジェクトのデプロイ
最後に以下コマンドでリモートの Apps Script(GAS) 環境へデプロイします。
yarn deploy
次のコマンドで Apps Script(GAS) 環境をブラウザで開くことができます。実際にコードがデプロイされているか確認してみましょう。
yarn open
Apps Script(GAS) のメニューにある実行を押下してみましょう。指定したチャンネルにメッセージが送られていれば OK です。
4. 定期実行の設定
作成したスクリプトが毎日定期実行される設定を行います。
Apps Script(GAS) の左サイドバーからトリガーを選択し、トリガーを追加します。
トリガーの内容は以下のように設定します。
- 実行する関数を選択: main
- イベントのソースを選択: 時間主導型
- 時間ベースのトリガーのタイプを選択: 日付ベースのタイマー
- 時刻を選択: 送信したい時間帯(※1 時間の幅があります)
5. テスト
指定した日付と時間帯にメッセージが Slack へ送信されるか実際に確認してみましょう。
まとめ
スプレッドシートの情報を Slack へ送信できると組織内での情報共有の質を向上できたり、適切なリマインドにより人的ミスを削減することにも繋がるかと思います。今回用意した開発テンプレ(gas-sheets2slack)を利用いただくと要件に応じた Apps Script(GAS) のカスタマイズもしやすくなるのでぜひ今後も使ってみてください。
Discussion