Google Apps ScriptからSlackへ定期投稿してみた

# この記事で説明すること
Google Apps Script（以下、GAS）を使ってSlackに固定メッセージを定期的に投稿してみたので、その手順を記します。
GASはを使うと手軽に自動化ができると聞いたので、さわってみた備忘録です。

# 手順
SlackにWebhookの口を用意しておき、GASからそのWebhookを呼び出すスクリプトを書き、それを定期実行させるトリガーをGASに設定する、という手順になります。

## 1. Googleアカウント、Slackアカウントを用意
GASの利用にはGoogleアカウント、Slackの利用にはSlackアカウントが必要です。
それぞれ作成します（どちらも無料で作成可能）。
私は既に作成済のアカウントを使いました。

## 2. SlackのIncoming Webhookの設定
1. Slackにメッセージを投稿する先のチャンネルを作成しておきます。

1. [Slack でのIncoming Webhook の利用](https://slack.com/intl/ja-jp/help/articles/115005265063)に沿って、SlackのIncoming Webhookを設定します。
Incoming Webhookを利用すると、WebhookのURLから発行されます。このURLにPOSTすることで、外部から選択したチャンネルにデータを送信できます。
この後の手順で、GASからこのWebhookのURLヘPOSTします。
<img width="600" alt="SettleIncomingWebhook.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/dc976355-2d35-c0ab-d3ca-bfa1862fd4f2.png">
[Slackアプリ](https://api.slack.com/apps)のページから、上記手順で作成したSlackアプリを選び、左ペインから[Incoming Webhooks]の項目を選ぶと、作成されたWebhook URLを確認することができます。
<img width="600" alt="WebhookURL.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/26b32027-8bf9-3f72-0f23-f8ca350401ab.png">

## 3. GASでスクリプト作成
GASでSlackのWebhook URLを呼び出すスクリプトを書きます。
GASについて詳細は、[公式ページ](https://developers.google.com/apps-script)をどうぞ。
（[5分でできるquick start](https://developers.google.com/gsuite/add-ons/editors/docs/quickstart/translate)も載ってます）

1. GASでスクリプトを書くために、Googleドライブから、Google Apps Script を接続します。
Google ドライブの画面で、[+ New]のボタンをクリックし、開いたダイアログで、[Connect more apps]をクリックします。
  <img width="200" alt="googleDriveNew.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/5bad5f8c-ab37-71c8-21b6-3ee8601b0f21.png">
  <img width="400" alt="connectGAS.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/ffab7ee6-d52d-cdc4-a7eb-3da587a1bc38.png">

1. [Google Apps Script]を検索し、[CONNECT]を押下して、GoogleドライブにGASを接続します。
  <img width="400" alt="connectGAStoDrive.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/9d25499e-07ae-1059-b180-3e263cd8b4e9.png">
  <img width="400" alt="connectedGAS.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/237aa550-87c6-9ece-0782-265369cffe6b.png">

1. Google ドライブの画面で、再度[+ New]のボタンをクリックし、開いたダイアログで、[Google Apps Script]を選択すると、Google Apps Scriptの画面が開きます。
  <img width="400" alt="connectGAS.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/7c107254-8b8c-3558-9a14-4387fadcea20.png">
  <img width="400" alt="ScriptEditor.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/fd396ff2-96a8-6c31-8231-46742e9b9fe7.png">

1. myFunction()の中に、SlackのWebhook URLを呼び出すコードを書きます。

  - SlackのIncoming Webhookの使い方は、[Sending messages using Incoming Webhooks](https://api.slack.com/messaging/webhooks)を参考にします。
    - 今回、メッセージのみPOSTするコードにしていますが、POSTするメッセージの書式設定なども行うことができるようです。
  - GASからWebhookを呼び出すには、[Class UrlFetchApp](https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app) の [fetch](https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchurl,-params)を使います。  

こんなコードを書きました。

```js
# SlackのWebhook URLを指定
var slackWebhookUrl = 'https://hooks.slack.com/services/XXXXXXXXX';
  
function firstApp() {
  var data = { 
    'text': 'Hello, this message is from my GAS App',
  };
  
  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'payload' : JSON.stringify(data)
  };

  UrlFetchApp.fetch(slackWebhookUrl, options);
}
```

## 4. GAS スクリプト実行
1. 実行します。ツールバーの[Run]のアイコンをクリックします。
<img width="400" alt="run.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/52879632-5d33-6d40-3f67-56c6c6e029aa.png">

1. Slackに投稿されました。
<img width="350" alt="slack_notify.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/60bd5091-8ee5-4f4b-15bd-bfe83e0439a5.png">

## 5. GASのトリガーの設定
定期投稿させるために、GASのトリガーの設定をします。

1. トリガー設定画面を開きます。ツールバーの[Current project's triggers]アイコンをクリックします。
  <img width="400" alt="OpenTrigger.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/09d7f645-146c-0bca-be08-d5e323a3ef80.png">

2. [トリガーを追加]をクリックし、トリガーを設定します。
今回、[イベントのソース]を[時間主導型]に設定し、1時間おきに起動するように設定しました。
  <img width="500" alt="triggers.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/dd58a84b-5ef7-ba0b-50fc-e40e0c91cd09.png">
  <img width="350" alt="addTrigger.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/e701273d-97c8-402a-5a4d-52e554920c0b.png">

3. 1時間おきにSlackに通知されるようになりました。
<img width="350" alt="notifyBy1hour.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245454/8564cd52-6455-80f7-ea19-72858aa052cd.png">

# やってみた感想
やりはじめてから1時間半くらいでなんとなく動くようになったので、とても取っつきやすかったです。
GASは、[ドキュメント](https://developers.google.com/apps-script)も充実していてできることも多そうですし、参考になる記事も検索するとたくさん出てきました。
ちょっと自動化してみたいときに気軽に使えるツールだと思います。

次は、情報収集のために、Twitterから定期的にあるキーワードで検索して、Slackに投稿する、というのをやってみたいと思います。
（ちなみに、TwitterとSlackの連携は、[この手順](https://slack.com/intl/ja-jp/help/articles/205346227-twitter-%E3%81%A8-slack-%E3%82%92%E9%80%A3%E6%90%BA%E3%81%95%E3%81%9B%E3%82%8B)ですぐできます）