【初心者向け】GASを使ってSlackへ自動通知

Slackへ自動通知を行いたい！
というときに、GAS(Google Apps Script)を使用することで簡単に通知を行なうことができます。

#今回の手順でできるようになること
* 特定の時間に○○というメッセージをSlackの特定のチャンネルへ投稿すること


#前提
* Slackアカウントは取得済み
    * 基本的な操作もOK
* Googleアカウント取得済み


#使う技術要素

**SlackのIncoming WebHooks**
Slackは当然使用するのですが、そのSlack内のサービスの[Incoming WebHooks](https://api.slack.com/incoming-webhooks)も使用します。

Incoming WebHooksとは
Slackのサービス。このサービスを使用すると、WebURLが発行される。この発行されたURLにPOSTすることで、Slackへ投稿できる。

**Google Apps Script**
Googleが提供する、スクリプト実行環境。
Javascriptのコードを動かすことができます。
コードの実行のトリガーは時間を指定することができます。

上記2つを使って連携、自動通知をしていきます。


#手順

##1. SlackのIncoming WebHooksの登録
SlackでIncoming WebHooksを登録します。

**(1)まずは、自動通知用のチャンネルを作成します。**
Slackにてチャンネルを作成します。
今回は`#tsuuti`というチャンネルにします。

**(2)Incoming WebHooksの設定をします。**
Incoming WebHooksの設定をしていきます。

チームのプルダウンを押すと、「Team settings」というメニューがあるので、そこを押します。
![menu.png](https://qiita-image-store.s3.amazonaws.com/0/45528/c7b7a187-2731-4383-147b-390748a6bcc2.png)



設定ページが開き、左側のペインに「Configure Apps」というメニューがあるので、さらにそれを押します。
![menu_2.png](https://qiita-image-store.s3.amazonaws.com/0/45528/fb429710-03a9-9e7e-8272-9f5e6d25edc1.png)


新しいページが開き、上部に検索ボックスが表示されるので、そこで「Incoming WebHooks」という検索をすると、Incoming WebHooksの設定ページへと飛ぶことができます。
![search.png](https://qiita-image-store.s3.amazonaws.com/0/45528/1f20efac-f49d-a75b-353a-9ed370e1445d.png)


「Add Configuration」を選択し、投稿したいチャンネル( (1)で作成したチャンネル )を選択し、作成ボタンを押します。
![add.PNG](https://qiita-image-store.s3.amazonaws.com/0/45528/2ff71d6d-ca64-0c44-cbda-0cfd8f534a78.png)



作成完了後、`Webhook URL`の項目に出てくるURLを後で使用します。
(このURLにしてされたデータをPOSTすることでSlackへ投稿ができます。)


Slack側の設定はこれで完了です。


##2. Google Apps Scriptの作成
Google Apps Scriptを作成します。

**(1)Google DriveからGoogle Apps Scriptを選択します。**


**(2)コードを書きます。**

```js
var postUrl = 'Incoming WebHooksで発行されたURL';
var username = 'botbot';  // 通知時に表示されるユーザー名
var icon = ':hatching_chick:';  // 通知時に表示されるアイコン
var message = 'test';  // 投稿メッセージ

function myFunction() {
  var jsonData =
  {
     "username" : username,
     "icon_emoji": icon,
     "text" : message
  };
  var payload = JSON.stringify(jsonData);
  
  var options =
  {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : payload
  };
 
  UrlFetchApp.fetch(postUrl, options);
}
```

[Incoming WebHooks](https://api.slack.com/incoming-webhooks)を参考に、上記の`jsonData(payload)`を設定することで、Slackへの投稿ができます。
[Incoming WebHooks](https://api.slack.com/incoming-webhooks)によると、投稿メッセージとともに、ユーザー名やiconも指定することができます。また、上記では試していませんが、`チャンネル`も指定できます。

作成したpayloadを、GASで定義されている`UrlFetchApp`でPOSTすることができます。
[UrlFetchApp](https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app)を使用することで、GASでHTTP通信を行なうことができます。

このコードが実行されると、ひよこアイコンの`botbot`というユーザー名のユーザーが`test`と発言します。

**(3)実行してみます。**
画面上部の`実行ボタン`を押すことで、コードを実行できます。
初回実行時は実行の許可を求められるので、許可します。
![run.PNG](https://qiita-image-store.s3.amazonaws.com/0/45528/da99f70b-25c4-9042-be11-b26c3eed686c.png)


投稿されました！！
![message.PNG](https://qiita-image-store.s3.amazonaws.com/0/45528/d9ce87d8-9301-dc26-7565-4059e1574ef7.png)



**(4)トリガーを設定します。**
画面上部の`現在のプロジェクトのトリガー`というボタンを押し、「今すぐ追加するにはここをクリックしてください。」のリンクをクリックします。
![triger.PNG](https://qiita-image-store.s3.amazonaws.com/0/45528/fa2a591b-6a8f-350b-b841-b043a800ec8e.png)

![time.PNG](https://qiita-image-store.s3.amazonaws.com/0/45528/669a1570-4d07-9a4a-6024-009dfd89f9ea.png)

この設定で、毎日午後4時～5時の間にこのスクリプトが実行され、Slackに投稿されます。



#まとめ
以上で、簡易的にではありますが、Slackへ自動通知ができるようになります。
Google Apps Scriptのトリガー時間の設定は範囲が選べるようになっていて、「毎日○時○分」という指定ができないのですが、スクリプトを使用するとこのような設定もできるようになります。
これは別記事にしようと思います。