Gooble Apps Scriptが便利そうだなーと思いまして、いろいろ調べていましたところ、 Googleカレンダーの予定をメールでリマインドする方と、 GASを使ってSlackのBotを立てている方がいらっしゃいました。
いいとこどりしてみました。
Googleドライブにスクリプトを作成する
まずはGoogleドライブにアクセスしまして、「新規」→「その他」→「Gooble Apps Script」を選択します。
上記のようなテンプレートが現れます。
SlackAppライブラリをインポートする
メニューの「リソース」→「ライブラリ...」を選択します。ダイアログの「ライブラリを追加」のボックスに「M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO」を入力、追加ボタンを押します。この辺の詳細はご本家の方の記事参照。
スクリプトプロパティの登録
先に、他人様に見せたくないアクセストークンなどの情報を、スクリプトのプロパティに登録します。(こういうことができるんだ、とビックリ仰天しました!)
メニューの「ファイル」「プロジェクトのプロパティ」「スクリプトのプロパティ」タブを選択します。「行を追加」で、キーと値のペアを追加していきます。
SLACK_POST_ID => SlackのメンバーID("@XXXXXXXX" といった形式) GCAL_WATCH_ID => リマインドしたいGoogleカレンダーのID(だいたいメールアドレスの形式) SLACK_ACCESS_TOKEN => Slackの投稿用アクセストークン(xoxp-XXXXXXXXXXXXXXXXXXXXXXXXXXX...とながーいやつ)
GASを書く
さあ、準備はできました。ガッと以下を書き上げます。
function postCalendarNotify() { var calID = PropertiesService.getScriptProperties().getProperty('GCAL_WATCH_ID'); var cal = CalendarApp.getCalendarById(calID); var dt = new Date(); dt.setDate(dt.getDate()); var events = cal.getEventsForDay(dt); var slack = SlackApp.create(PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN')); var listMsg = [ "本日の予定", "----------" ] for(var i = 0; i < events.length; i++) { var msg = events[i].getStartTime() + "~ " + events[i].getTitle(); listMsg.push(msg); } if(events.length == 0) { listMsg.push("ありません"); } var channelID = PropertiesService.getScriptProperties().getProperty('SLACK_POST_ID'); var text = listMsg.join("\ "); var option = {as_user: "true"}; slack.postMessage(channelID, text, option); }
定時実行の設定
メニューの「編集」「現在のプロジェクトのトリガー」を選択します。「新しいトリガーを追加」で追加します。一日一回動かしたいので、時間主導型、日タイマー、午前3時~4時、を選択しました。この辺はお好きに設定してください。
あとは待つだけ
夜な夜な、当日の予定がSlackに届きます。
