Slack投稿をスプレッドシートへ転記 GAS編

# はじめに
株式会社コミュカル [Mitz](https://twitter.com/CharaDenMitz)です
この記事は [RPACommunityアドベントカレンダー2022](https://adventar.org/calendars/7503) の12/20 担当分になります。
次の12/21は Saori Takita さんです。

ITを活用した自動化を学び合うコミュニティ[RPACommunity](https://rpacommunity.connpass.com/)ではメンバー交流用にSlackを活用します
でも無料版Slackのためメッセージ投稿は3か月で消えてしまう運命...
ということで、ひとまず退避先をスプレッドシートにしてみようと思います。
（これ、同じ悩みを持つコミュニティも多いはず）
※今回はあくまで一時的な対策として非常に簡易的な方法を実施します。なのでまた別の手段に変更するかも。

# 今回やったこと／必要なもの
**やったこと**
Slack投稿➡Googleスプレッドシートに投稿内容を転記

**必要なもの**
対象Slackのアカウント（権限）
対象Slackのチャンネル（メッセージ投稿元）
Googleアカウント
Googleスプレッドシート（メッセージ投稿先）

# 実施した流れ
## ①SlackにOutgoing Webhook を入れる
最初に補足事項
今回使用するOutgoing WebhookはSlackのカスタムインテグレーション機能に当たります。Slackではカスタムインテグレーションではなくアプリで作成することを推奨していますのでご注意ください。ですが今回は手っ取り早くカスタムインテグレーションで実装します。
（⇩画像）Slackではアプリがおすすめされてます
![000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/ea7a2661-d0b4-a514-9c2d-99604aec6a31.png)

### ①-1 Slack（PCアプリ）にて
「管理と設定」➡「アプリを管理する」
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/e3eba2f1-ec84-f260-e031-9f5d6a473959.png)

### ①-2 ブラウザオープン／検索
ブラウザにSlack管理画面が開く➡「検索」
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/73643573-9068-9dbc-76d0-5c7aceddaa74.png)

### ①-3 対象を検索
「Webhook」で検索 ➡「Outgoing Webhook」を選択
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/ce25bfa3-be1e-137c-8938-1601b41dea28.png)

### ①-4 Slackに追加
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/a1bd3c8b-e61d-b848-c14b-3473455d17ef.png)

### ①-5 インテグレーションの追加
Outgoing Webhook インテグレーションの追加
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/bcfa0dd7-d111-e165-3e8a-9f7e5ff2b572.png)

注意
こんな感じ⇩で、もしアプリが上限に達しているとの通知が返ってきてしまったら、不要なアプリを削除しましょう。（Slackの無償版・有償版によりますが、アプリ数に制限が...）
![005a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/7e6b6270-20c0-1df7-d057-06e7085d4c9c.png)

### ①-6 インストール完了
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/90f281e5-2645-f966-aa8c-ad49a34b17ce.png)

### ①-7 対象チャンネル選択＆トークン値をメモ
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/a93be980-1f57-f213-1365-fbb658902d02.png)

【注意】後程 Outgoing Webhook の設定を行うのでこの画面は閉じないように。

## ②スプレッドシートでGASを作成
### ②-1 スプレッドシートを用意
Slack投稿を格納するスプレッドシートを用意 ➡ シート名も分かりやすいものに
![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/3195adb2-5665-9875-26c3-6e43e836bd21.png)

### ②-2 GAS（Google App Script）を開く
![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/52acae8f-2b99-2dc4-0032-15c08d18bc37.png)
⇩
![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/e0829fc5-2847-c0cd-5e6f-3a463737a235.png)

### ②-3 コードを記載
![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/dc8aa7f9-8df1-0fa5-b53d-2de49e4bd4be.png)

サンプルコートで修正する箇所は
シート名
　➡ ②-1 で設定したシート名
トークン値
　➡ ①-7 でメモしておいたトークン値
※⇩のサンプルコードをご使用ください
<details><summary>サンプルコード</summary>

```rb
function doPost(e) {
    // Googleスプレッドシート側とSlack側の情報指定
    const SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート名');　// ← スプレッドシートのシート名を指定
    const TOKEN = 'トークン値'　// ← Outgoing Webhook のトークン値を指定

    // Slack⇒Googleスプレッドシートに投稿データを追加
    if (TOKEN == e.parameter.token){
        const DATE = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm')
        const USER = e.parameter.user_name
        const TEXT = e.parameter.text
        const DATA = [DATE, USER, TEXT]
        SHEET.appendRow(DATA)
    }
    return
}
```
</details>

### ②-4 デプロイ実行
デプロイボタン押下
![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/dfe2abd8-378d-4a87-8ae8-c32b82f879db.png)
設定➡ウェブアプリを選択
![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/c847c2d4-bd43-ddcd-440b-b830082231b0.png)
説明文を記入
実行ユーザーは自分
アクセスユーザーは全員
![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/43f8169a-f18b-13ff-e863-e62012beedfa.png)
デプロイ実行
![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/15e11aca-b2c6-d817-d652-ed8a454966fe.png)
アクセスを承認
![016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/4a6bf56e-39f9-d811-707a-5bab8dc69cb1.png)
対象のGoogleアカウントを選択
![017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/41c6a5fb-4326-f071-974b-4dba961ea62d.png)
許可（Allow）
![018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/29936eeb-f383-b2aa-51ee-656c6f46afc2.png)

### ②-5 webアプリURLをメモ
![019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/3122124f-1b32-447b-e76e-63ec771af93d.png)

## ③Outgoing Webhookの設定
### ③-1 webアプリURLを設定
②-5 でメモしたwebアプリURLを「URL」箇所に貼り付け
![020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/a3e596b7-882f-ec4f-6388-240bbf4ca0ea.png)
### ③-2 設定を保存（完了）
![021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/7537672b-6adc-92de-081d-5661d5a6c790.png)

## 結果
Slack投稿
![022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/1967ce32-c70a-4ad7-1dd6-0519475c81dd.png)
スプレッドシートに転記
![023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074051/0dea7b86-2105-615d-b179-857a41452526.png)

# 最後に
今回は手っ取り早くSlackインテグレーションを使用しましたが、アプリ推奨との事なので本来であればそちらの手段を選びたいですね。
そして、GASコードもほぼ工夫無し（説明も無し）ですので、いずれバージョンアップさせようかと思います。