[所要時間1時間]GASでWork fun なSlack botをさくっと実装してみた


はじめに

皆さんは仕事をしていて、なんとなく夕方ごろに集中がきれてしまうこととかないでしょうか?
私はあんまり長く集中が続かないタイプなので、夕方ごろになると注意散漫になったり、やらなければならないタスクより取りかかりやすいタスクを消化をするといったことになりがちです。

その問題を解決するために、夕方17時になったら自分の好きな「左ききのエレン」のモチベーションをあげる名言を投稿してくれるSlack botをGASで作ってみました。

実装内容

[GAS側]
* Google Sheetsで投稿したい「名言」を管理
* GAS の「時間指定トリガー」でスクリプトを実行
[Slack側]
* ワークフロービルダーのWebhookで「名言」を受け取り、Messageを送信

[イメージ図]

手順

  1. Slackのワークフロービルダーで[Webhook]のワークフローを作成して、投稿用のURLを取得する (参考:ワークフロービルダーガイド

2.Webhookの変数設定でGASから送信する「名言」を受け取るための「変数(ここではword)」を設定する

3.Google Sheetsで投稿したい「名言」を入力

4.Google Spread Sheetの[Tool] > [Script Editor]からGASを開く
5.GASで下記のようにコードを実装

power-words.js
function main() {
  let word = getWord()
  postToSlack(word, WEB_HOOK_URL)//SlackのWEB_HOOK_URLを取得(いずれPropertyとかで取ってくるようにします)
}
function getWord() {
  let spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  let sheet = spreadsheet.getSheetByName('words')
  let firstRow = 4
  let lastRow = 14
  let colIndex = 2
  let rowIndex = Math.floor(Math.random() * (lastRow - (firstRow - 1))) + firstRow 
  return sheet.getRange(rowIndex, colIndex).getValue()
}
function postToSlack(word, webhookUrl) {
  let body = {
    "word" : word
  }
  let params = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(body)
  }
  UrlFetchApp.fetch(webhookUrl, params);
}

6.時計のアイコンからGASの「時間指定トリガー」の設定画面を開く

7.「名言」を投稿したい時間にmain関数が実行されるようにセット

=>
完成!!
月~金の夕方17時にこんな感じのメッセージがSlackに投稿されます!

終わりに

これまであまり使ったことがなかったのですが、GASを使うことでモチベーションアップしてくれるSlack botをわりと簡単に実現することができました。
時間指定トリガーなど使いやすい機能が標準であるので、今回のようにちょっとした課題を解決したい場合にはGASは結構良い選択肢だな〜と思いました。

実装にあたっては、社内メンバーのアドベントカレンダー投稿をSlackに通知するBotをGASで作ってみたを大いに参考にさせていただきました。

「クソみたいな日にいいもんつくるのがプロだ」っていう名言を励みに、今後は夕方以降も楽しく開発をしていこうと思います!

参考