試験日までをカウントダウンをしてくれるSlack botを作ってみたよ

基本情報技術者試験が近づいてきたので試験日までカウントダウンしてくれるbotをGoogle Apps ScriptとSlackを使って作ってみました。カウントダウンツールやアプリはすでにもあると思いますが、よく使うSlackのワークスペースに通知を送るようにしたかったので勉強も兼ねて作成しました。

# 使うツール
- Google Apps Script
- Slack


# 作成するbotについて
一日一回「FE試験まであとXX日です」といったメッセージを送る

- Google Apps Scriptに書いたプログラムを時限実行（毎日9時〜10時）
- Slackとの連携 #countdown チャンネルにメッセージを送信

#手順
- 1. SlackAppでbotを作成
- 2. Google Apps Scriptを作成
- 3. 時限実行の設定

各手順を箇条書きで説明していきます。


## 1. SlackAppでbotを作成

- https://api.slack.com/apps にアクセスし**Create New App**をクリック

-  botの名前、ワークスペースを指定しCreate Appをクリック
**App Name**は後からでも変更可能。
**Development Slack Workspace**でbotを使いたいSlackのワークスペースを選択します。

![createnewapp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286938/3d429b9d-160e-0735-4f40-03dec674dda6.png)


- 左メニューから**OAuth & Permissions**をクリック

- Scopesの**Select Permission Scopes**を設定
OAuth Access Tokenを取得する前に、Scopeを設定する必要があります。
今回はメッセージを送信するだけなので
Send messages as [botの名前] を選択し、Save Changesをクリック。

![settingscope.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286938/dff8b5ee-6b5f-003e-9e3f-c117a6146aad.png)



- **OAuth Access Token**を控える<br>
Scope設定後、Install App to Workspaceからbotの権限を設定するとOAuth Access Tokenと表示されるので控えておきます。<br>
※ Google Apps Scriptで使います


## 2. Google Apps Scriptを作成

- Google Apps Scriptを開きます
GoogleアカウントにログインしGoogleドライブを開き、「＋新規」をからGoogle Apps Scriptを開きます。ない場合は「＋新規」＞「その他」＞「アプリを追加」より追加できます。

- ライブラリの追加
**リソース** ＞ **ライブラリ** をクリック。
ライブラリを追加に`M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO`を入れて追加。
バージョンは22にしました。

![slackaddslibrary.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286938/fdb78002-0b46-60f8-c535-f41a929da1da.png)

- プロパティの設定<br>
Google Apps Scriptのプロパティーにアクセストークンを設定しました。<br>
**ファイル**＞**プロジェクトのプロパティ**＞**スクリプトのプロパティ**
keyを**SLACK_ACCESS_TOKEN**としvalueに控えておいた**OAuth Access Tokenを設定します**。

![settingproperties.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286938/0e6d0f68-6b67-0fc8-2a41-0ae40c9cd1fc.png)



- ソースを書く<br>
試験当日に0日となるように書いています。

```javascript
var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');
function countdown() {
  // Slackapp インスタンス生成
  var slackApp = SlackApp.create(token);
  // チャンネル
  var channelId = "#countdown";
  // 試験名
  var examName = 'FE試験';
  // 試験日
  var examDate = new Date('2019/10/20 23:59:59');
  // 本日日付
  var today = new Date();
  // 試験日までの日数を取得
  days = Math.floor((examDate - today) / (24*60*60*1000));

  // メッセージを送信する
  if(days >= 0){
    var message = examName + 'まであと' + days + '日です'; 
  
    var options = {
    }
    slackApp.postMessage(channelId, message, options);
  }
}
```
Google Apps Scriptはjavascriptをベースに作成されていますが、全てのjs関数が使える訳ではないそうです。

再生ボタンをクリックするとプログラムを実行できます。
警告文が表示されたら**詳細**＞**安全ではないページに移動**からリクエストを許可します。
![programstarts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286938/985e3257-3220-df78-6bb2-3429b61e7bd7.png)


## 3. 時限実行の設定

- タイマーボタンをクリック
![settingtimer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286938/d33bdb09-05a0-16bc-8949-9f81f88d44f1.png)

- 毎日9〜10時に実行されるように設定
![settingtriger.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286938/cfff4d53-7503-5753-a364-53c68b0abde6.png)



#参考にさせていただきました

- https://qiita.com/hondy12345/items/0cdc81bb2170cbdb54ec
- https://qiita.com/Quikky/items/9de56c049304885a4f4f