10分でできる！Slackカウントダウンボットの作り方

# TL;DR(?)
今回はSlackで使えるカウントダウンボットをスプレッドシートとGASで作っていきます。
完成したもの↓
<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/2624790c-edeb-e85d-343c-1b24328899e7.png">

# 必要なもの
・Googleアカウント
・Slackワークスペースと、オーナーもしくは管理者権限


# フロー
Googleスプレッドシートで（イベント当日）-（今日の日付）で残りの日数を計算したものを、GASで取得・SlackAPIを使用して、Slackにポストする、という簡単なフローです。

# Googleスプレッドシートを作成
GAS上でコードを使って日付の差を計算する方法もありますが、フォーマットなどいろいろとややこしいので今回はGoogleスプレッドシート上で日付の差を出していきます。

①空白のスプレッドシートを作成したら、`A1`セルに`=TODAY()`と入力し、今日の日付を表示します。
②続いて`B1`セルにターゲットとなる日付を入力します。例）2021/12/31
③`C1`に`=MAX(B1-A1,0)`と入力して、差を出します。マイナスになった場合には、0になります。

![スクリーンショット 2021-11-03 12.42.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/dd6d933f-3bdf-c015-c031-39d77ed0ddfc.png)


# Google Apps Scriptを作成
①スプレッドシート内の「ツール」＞「スクリプトエディタ」を選択して、Google Apps Script(GAS)を開きます。
![スクリーンショット 2021-11-03 11.07.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/3a9bc06e-265c-8166-f3b9-bf8ecf05f6c7.png)

②セル`C1`にある残りの日付を取得します。
```JavaScript
function getDays() {
  var document = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = document.getActiveSheet();
  var countRange = sheet.getRange("C1");
  var countValue =  countRange.getValue();
  return countValue;
}
```


③Slackの指定したチャンネルにメッセージをポストします。
`token`でSlackのアクセストークンを指定し、 `message`でポストするメッセージを指定します。
Slackのアクセストークンは後ほど取得します。

:::note info
`message`の内容（ダブルクォーテーションの内側）は自由に変更可能です。
日付を入れる部分には`$value`を入れてください。例）`"プロジェクト当日まであと$value日です！"`
:::
```Javascript
function sendMessage() {
  let token = "SLACK_TOKEN";
  let slack = SlackApp.create(token);

  let channelId = "CHANNEL_NAME";
  let message = "おはようございます！大晦日まで あと$value日 です！".replace("$value", getDays());

  if (calculation() == 0) {
    message = ""
  }
  
  slack.chatPostMessage(channelId, message);
}
```

# Slack APIでアプリを作成
Slack APIでアプリを作成し、アクセストークンを取得します。
①Slack API（[https://api.slack.com/](https://api.slack.com/)）にアクセスします。
![スクリーンショット 2021-11-03 10.11.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/4a130ef9-4329-d7c6-e7cf-c03576c883ba.png)

②Create an app を選択後、From scratch を選択します。
③App Name にはSlack上で表示させたい名前を入力し（あとで変更可）、Pick a workspaceでメッセージをポストするワークスペースを選択します。
![スクリーンショット 2021-11-03 10.12.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/118a2da0-9c08-2f6b-ab58-e466602b1276.png)

④ページが遷移したら、左のメニューバーから、OAuth & Permissions 選択します。
⑤Scopes にある Bot Token Scopesに `chat:write` を追加します。
![スクリーンショット 2021-11-03 11.29.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/5dcf4a44-b2cf-3910-f46c-f9392be64b0c.png)

⑥ページ上部の OAuth Tokens for Your Workspace で Install to Workspace を選択して、ワークスペースにインストールします。権限の許可等を求められるので、許可します。
![スクリーンショット 2021-11-03 11.30.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/3d2b310b-049a-01bd-2a21-8cbbdb15babb.png)
![スクリーンショット 2021-11-03 11.30.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/133f443e-7b16-ccfb-8293-7492b39c6175.png)


⑦アクセストークンが表示されるので、コピーしておきます。
![スクリーンショット 2021-11-03 11.30.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/df4fe5ef-78c4-7963-faec-b5171f518538.png)


# デプロイの準備
①GASにもどり、`SLACK_TOKEN` と入力してある部分に、先ほどコピーしたアクセストークンをペーストします。
②`CHANNEL_NAME` と入力してある部分に、ポストするチャンネル名を入力し、指定します。（#も入力します）
③入力が終わったら、左側にあるライブラリの ＋ をタップします。
![スクリーンショット 2021-11-03 12.50.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/ada499c5-e6f2-d80f-e4d0-05a67f0cad77.png)
④ 次のスクリプトIDを入力して 検索 します。Slackにポストするためのライブラリを取得します。
スクリプトID：`1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq`
⑤以下のようになったら 追加 を選択します。（バージョンは異なる可能性があります。）
![スクリーンショット 2021-11-03 12.51.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/a8ba524b-8231-6626-b7a5-9ea07c063fe5.png)
⑥Slackを開き、カウントダウンをポストするチャンネルにアプリを追加します。
![スクリーンショット 2021-11-03 12.57.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/904c56f8-82fb-beda-cbcf-6a975dee5ba3.png)

![スクリーンショット 2021-11-03 12.57.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/6606eb98-6245-f4a0-1795-e521add77311.png)

# 実行してみる
GASにもどり、ページ上部の実行する関数名を`sendMessage`に変更し、実行 を押します。
Googleアカウントへのアクセス権をリクエストされますが、許可します。
![スクリーンショット 2021-11-03 13.05.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/01e54f6d-43d6-3802-92eb-09928db25667.png)

無事に実行できていれば、指定したチャンネルにメッセージが送信されます。
アプリのアイコンなどは、Slack APIのページから設定できます。[https://api.slack.com/apps/](https://api.slack.com/apps/)
![スクリーンショット 2021-11-03 13.08.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/b8f046fb-72fa-57d9-f689-e640f0250a57.png)

# 自動ポストの設定
自動で投稿させるためには、トリガーを設定する必要があります。
① GASの左側にあるトリガー（目覚まし時計のアイコン）を選択します。
② 右下の トリガーを追加 を選択します。
③ メッセージを送信する条件を設定します。設定が終わったら保存を選択します。実行する関数を `sendMessage` にします。
下の画像では、毎日午後1時〜2時の間にメッセージを送信するように設定しました。
※GASでは毎時0分ぴったりに実行みたいな細かな分数の指定まではできないそうです。
![スクリーンショット 2021-11-03 13.12.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/4b261047-2052-2243-a19a-7af722ccfc1a.png)

# 終わりに
ここまでお疲れさまでした！比較的簡単にできたのではないでしょうか？
みなさまのお役に立てれば幸いです。