GAS(Google Apps Script)とは軽量のアプリケーション開発のためのGoogleのワークスペースプラットフォームです。
これとGoogleスプレッドシートを使用すれば無料で小規模なアプリケーションを作成することができます。
本記事ではGASを使用して誕生日を通知するslackbotの作成手順を紹介させていただきます。
作成手順1. Slack側の設定
SlackのIncoming WebHooksにアクセスし、「Slackに追加」をクリックする
※追加したいワークスペースに切り替えて下さい
チャンネルを選択にSlackbotを導入したいチャンネル名を入力し「Incoming Webhookインテグレーションの追加」をクリック
「インテグレーションの設定」までスクロールします
Webhook URLはのちに使用するのでコピーします
必要に応じて名前(今回は誕生日通知botなど)、説明ラベル、アイコンを編集し「設定を保存」をクリック
これでSlack側の設定は終了です。
作成手順 2. スプレッドシートを作成する
スプレッドシートから「空白のスプレッドシートを作成」を選択します
作成したシートのA列に名前、B列にその人の誕生日(例:1/1)を記入します
※ここでは1行目に項目名を追加しているので、2行目から記入して下さい
また分かりやすいようにシート名をbirthdayと変更します
作成手順 3. GASを作成する
作成したスプレッドシートのメニューバーより拡張機能→Apps Scriptを選択
- <>(エディタ)を選択
- コード.gsを選択
- 下記コードをコピペして下さい(コピペする際、L65行目に作成手順1でコピーしたWebhook URLを書き換えることを忘れずに!)
- 保存ボタンをクリック
// 誕生日のトリガーを設定する関数 function setBirthdayPostTrigger() { const birthDayNameList = getBirthDayNameList(); const triggerHour = 10; // 10時に設定 const today = new Date(); today.setHours(triggerHour, 0, 0, 0); // 指定時間に設定 // 誕生日リストをループして、本日誕生日の人がいればトリガーをセットする for (const [slackName, birthDay] of birthDayNameList) { const birthDate = new Date(birthDay); const isTodayBirthday = isSameDay(today, birthDate); if (isTodayBirthday) { ScriptApp.newTrigger("triggeredPostSlack") .timeBased() .at(today) .create(); break; // 一度トリガーを設定したらループ終了 } } } // 二つの日付が同じ日かどうかを比較する関数 function isSameDay(date1, date2) { return ( date1.getDate() === date2.getDate() && date1.getMonth() === date2.getMonth() ); } // 誕生日トリガー実行時に呼ばれる関数 function triggeredPostSlack() { const birthDayNameList = getBirthDayNameList(); const today = new Date(); // 誕生日リストをループして、本日誕生日の人がいればSlackにメッセージを送信する for (const [slackName, birthDay] of birthDayNameList) { const birthDate = new Date(birthDay); const isTodayBirthday = isSameDay(today, birthDate); if (isTodayBirthday) { postSlack(slackName); } } } // 誕生日リストを取得する関数 function getBirthDayNameList() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("birthday"); const data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).getValues(); return data .filter(([slackName]) => slackName) // 空でない名前のみ抽出 .map(([slackName, birthDay]) => [slackName, new Date(birthDay)]); } // Slackにメッセージを送信する関数 function postSlack(name) { const payload = { text: getMessage(name), }; const url = ""; // ここにWebHook URLを入力 const options = { method: "POST", headers: { "Content-type": "application/json" }, payload: JSON.stringify(payload), }; UrlFetchApp.fetch(url, options); } // ランダムなリアクションを取得する関数 function getRandomReactions(reactions, count) { const shuffled = reactions.slice(); // シャッフル用に配列をコピー for (let i = shuffled.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]; } return shuffled.slice(0, count); } // メッセージを生成する関数 function getMessage(name) { const reactions = [ ':tada:', ':congratulations:', ':blush:', ':laughing:', ':wink:', ':おめでとう:', ':cake:', ':raised_hands:' ]; const shuffledReactions = getRandomReactions(reactions, 7); const len = Math.min(6, shuffledReactions.length); const selectedReactions = shuffledReactions.slice(0, len); return `:confetti_ball::tada::confetti_ball::tada::confetti_ball::tada::confetti_ball::tada::confetti_ball::tada::confetti_ball::tada::confetti_ball::tada: 今日は ${name} さんの誕生日です! :birthday: おめでとうございますー!!${selectedReactions.join('')} この一年が素敵で楽しい日々になりますように:sparkles:`; }
- 目覚ましマーク(トリガー)を選択
- 「トリガーを追加」をクリック
- 実行する関数を選択→setBirthdayPostTrigger
- 実行するデプロイを選択→Head
- イベントのソースを選択→時間主導型
- 時間ベースのトリガーのタイプを選択→日付ベースのタイマー
- 時刻を選択→午前8時〜9時
- 保存をクリック
※ここで選択する時刻は通知する時刻ではなくトリガーをセットする時刻です
なので通知する時刻よりも早い時刻にセットしておきましょう
通知時刻を変えたい場合はソースコードのL4を(分以降を変えたい場合はL7)を任意の値に修正して下さい
以上でアプリケーションは完成です
当日が誕生日リストに該当する時、10:00になると以下のような通知が選択したチャンネルに送られます(同じ誕生日が2人いる場合)
終わりに
いかがでしたか?この記事を参考に誕生日通知Slackbotを作成し、社内コミュニケーションを活発にしていただけたら幸いです。
GASを使えば誕生日通知以外にもさまざまなアプリケーションを作成することができます。
是非GASを活用して便利なbotをたくさん作ってみて下さい。