【業務効率化】GASを使ってスプレットシートとSlack連携して、自動通知機能を作ってみた

## こんな人に向けて書いています

Slackでの報告がいっぱい上がっているけど、メンションをつけても、記入シートを使ってもなかなか完全に抜け漏れを防げきれず、タスク管理に悩んでいる方

## 何の問題が起きた？

原因：　5、６人で回す週に一回HPにアップデートする案件があります。

行う作業：

``収録``
``文字起こし``
``動画編集``
``校正校閲``
``動画アップロード``
``サムネイル作成 (ブログ&YouTube)``
``YouTubeセッティング(タイトル、概要欄、終了画面、カード、おすすめ動画など....)``
など...

一つ一つの作業としてはハードではないのですが、ワークフローがあるので、
前の人が終わらないと進まない作業もあります。
そのため、スプレットシートで管理表を作って、
終わったらチェックを入れるタスクを一個足した。

今までの流れ：
シート記入→Slackで報告

問題：
1. チェックリストの記入漏れ
2. Slackの情報が確認できてない
3. 次の人がタスクに進まず、毎回納期ギリギリになって一気に動き出してチーム全体の負担になっている

## 解決案

``問題２：　Slackの情報が確認できてない``がなぜ発生したかを考えてみた。
ヒアリングしたところ、
・　メンションされてないから見ない
・　スレッドが長くなると確認しづらい

そういう問題に解決策：

スプレットシートにチェックした時点で、何をチェックされたの自動的にSlackに通知がこれば解決。
アプリから来るので、細々な連絡を減らす

## 目指すゴール

・連絡漏れがなくなる
・「〇〇さん、〇〇が終わりました、ご確認お願いします」←これを打つ時間をなくす
・シートを開いて、チェックされてるかどうかの確認をある程度省ける


## 行ったこと

Googleスプレットシートのチェックボックスをトリガーにして、
クリックしたら、自動的に通知が来るように！！

## 手順

### ① スプレットシートのApps Scriptで下記のコード作成

```
// Slack Webhook URL
const SLACK_WEBHOOK_URL = 'YOUR_SLACK_WEBHOOK_URL';

// Spreadsheetのチェックボックスがチェックされたら実行
function onEdit(e) {
  onCheckboxChecked(e);
}

//チェックボックスの有効範囲を設定 (全部!!)
function onCheckboxChecked(e) {
  const range = e.range; 
  const sheet = range.getSheet();
  const row = range.getRow();
  const column = range.getColumn();
  const value = e.value; 

  // チェックボックスがチェックされたら
  if (value === 'TRUE') {
    const taskName = sheet.getRange(2, column).getValue(); //チェックした行の該当欄
    const customerName = sheet.getRange(row, 1).getValue(); //チェックした欄の該当行
    sendToSlack(taskName, customerName);
  }
}

// Slackに通知を送る
function sendToSlack(taskName,customerName) {
  const payload = {
    text: `${customerName}「${taskName}」が完了しました。` //通知内容
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
  };

  UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
}

// インストール可能なトリガーを作成 (=Apps Scriptで実行する部分)
function createInstalledTrigger() {
  ScriptApp.newTrigger('onCheckboxChecked')
    .forSpreadsheet(SpreadsheetApp.getActive())
    .onEdit()
    .create();
}

```

webhookの取得はこちらの記事を参考しました。

https://qiita.com/vmmhypervisor/items/18c99624a84df8b31008

### ②Incoming Webhooksの設定
公式のapp directoryからIncoming webhooksを作成します。

https://creatorsaischool.slack.com/apps/new/A0F7XDUAZ-incoming-webhooks

実装したいグループの該当チャンネルを選ぶ。
![スクリーンショット 2023-04-30 17.45.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959760/150f61bd-b8d1-7661-9a7f-08e2a082818b.png)

Customize nameとCustomize iconでAppの名前をアイコンを自由に設定できる。
![スクリーンショット 2023-04-30 17.47.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959760/2bdcc28b-f5a4-6f2e-6a98-d6f8a35a6476.png)


### ③　Apps Scriptを実行し、トリガーが実装されてるの確認

on Editで実行します。
![スクリーンショット 2023-04-30 17.38.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959760/0d245ef4-8610-d2c3-b5f3-c83850946fbb.png)

トリガーで確認：エラーもなく、実装できそうなら、OK
![スクリーンショット 2023-04-30 17.40.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959760/54ed3171-3160-85c5-9af0-3211f452cce9.png)

お客様の名前を入力して、テスト

![スクリーンショット 2023-04-30 17.33.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959760/eb600ff0-a48a-8cb9-2035-39c19ee6850c.png)

チェックボックスにチェックを入れて、slackに反映できたら、完成!!
![スクリーンショット 2023-04-30 17.31.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959760/795b7f95-7e9a-d849-f59b-d91345b721f9.png)

## 結果

まだテスト中ですが、管理者の私は楽になりました。
チェックして、一つずつ確認、催促する手間を減らせて、自動的にタスクを完成したことがわかるようになり、チームのネガティブなコミュニケーションを少し減らせた気がします。

技術として複雑ではないのですが、かなり手間を省けるので、ぜひ試してみてください。