GAS入門！！googleフォームからslackに通知

#### 1.アンケート作成

まずはマイドライブ内に「新規」からgoogleフォームを作成します
![スクリーンショット 2022-03-24 12.04.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/281a9670-dc85-87b7-eb1d-84161586e4f9.png)
今回は適当にこんな感じで作りました
作ったら「解答」からスプシも作っときましょう！
![スクリーンショット 2022-03-24 12.05.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/d951f832-e5ec-092b-8295-e67311d09738.png)
プレビューからスプシに回答が反映されてることが確認できます
![スクリーンショット 2022-03-24 13.32.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/a19faf54-7949-3085-c7e7-7661f4272ce2.png)
![スクリーンショット 2022-03-24 12.10.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/1deab6f9-38c8-43c5-669e-2d1f2236f51a.png)
![スクリーンショット 2022-03-24 12.13.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/f2e7d3e6-e00e-ce47-2bb9-b9538832dec9.png)

#### 2.GASを書いていく！

次にgasを書いていきます！
1で作ったスプしの「拡張機能」の「Apps Script」を開きましょう
![スクリーンショット 2022-03-24 12.15.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/37cb8da7-c487-afc4-f500-be538bf00e16.png)

##### コード1

下記の`ーーーーーーここを書き変えてねーーーーーー`のところにはslackのincoming-webhookのURLを貼ってください
URLの取得方法は[このリンクから](https://slack.com/services/new/incoming-webhook)アンケートを流したいチャンネルを選択して`incoming Webhook インテグレーションの追加`から`Webhook URL`が取得できます！それをそのまま貼り付けましょう！
```
function sendToSlack(body) {
  const url = "ーーーーーーここ書き変えてねーーーーーー";
  const data = {"username" : "活動報告が来たよ！", "text" : body };
  const payload = JSON.stringify(data);
  const options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : payload
  };
  const response = UrlFetchApp.fetch(url, options);
}
```

##### コード2

2つ目の`ーーーーここを書き変えてね！！ーーーー`ではスプシのIDを書きましょう！
1で作ったスプシのURLのこの太字部分です！※URLは人によって違います！

<p>https://docs.google.com/spreadsheets/d/<b>1tDd5TyjX23GXHnW6y_S93xZHnvwi1y3yXRNc59vUFOs</b>/edit#gid=0</p>

```
function onFormSubmit(){
  const spreadsheet = SpreadsheetApp.openById("ーーーーここ書き換えてね！！ーーーー");
  const sheet = spreadsheet.getSheetByName('フォームの回答');
  const lastColumn = sheet.getLastColumn();
  const lastRow = sheet.getLastRow();

  let bodyList = [];
  let add_list = [];

  for (let j=2;j<=lastColumn;j++){
    add_list = [];
    add_list.push("`" + sheet.getRange(1,j).getValue() + "`");
    add_list.push(sheet.getRange(lastRow,j).getValue());
    add_list = add_list.join('\n  ');
    bodyList.push(add_list);
  }
  let body = "活動報告きたよ！！\n\n" + bodyList.join('\n');
  sendToSlack(body);
}
```

#### 3.解説

###### まずはコード1から

```
function sendToSlack(body) {
  const url = "ーーーーーーここ書き変えてねーーーーーー";
  const data = {"username" : "活動報告が来たよ！", "text" : body };
  const payload = JSON.stringify(data);
  const options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : payload
  };
  const response = UrlFetchApp.fetch(url, options);
}
```

このfunctionでは設定したwebhook URL のチャンネルへ通知をします！

例えば

```
function test(){
  sendToSlack('こんにちは！');
}
```

（`sendToSlack`はコード1のfunction名、`'こんにちは！'`は引数です）
というgasを組んで保存し、実行すると
![スクリーンショット 2022-03-24 12.57.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/777a5480-672c-2cd9-2768-480cf70dadfe.png)


![スクリーンショット 2022-03-24 12.54.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/20200214-62cc-02ee-7c7c-2a35bb0ef9b1.png)
このように通知が来ます

###### 次にコード2

```
function onFormSubmit(){
  const spreadsheet = SpreadsheetApp.openById("ーーーーここ書き換えてね！！ーーーー");
  const sheet = spreadsheet.getSheetByName('フォームの回答');
  const lastColumn = sheet.getLastColumn();
  const lastRow = sheet.getLastRow();

  let bodyList = [];
  let add_list = [];

  for (let j=2;j<=lastColumn;j++){
    add_list = [];
    add_list.push("`" + sheet.getRange(1,j).getValue() + "`");
    add_list.push(sheet.getRange(lastRow,j).getValue());
    add_list = add_list.join('\n  ');
    bodyList.push(add_list);
  }
  let body = "活動報告きたよ！！\n\n" + bodyList.join('\n');
  sendToSlack(body);
}
```

2つ目のfunctionではコード1にどのような文章を送るかを指定しています！
つまり、どんな内容をslackに通知したいかです
いろいろややこしく見えるかもしれませんが、やっていることはスプシの要素を取ってきて文章にしています
スプシの1列目に書かれている<b>質問内容</b>と最終列(最新の解答)の<b>解答内容</b>を取得して`body`という変数に格納して`sendToSlack`に渡して通知してもらっています


#### 4.ラスト！！

###### トリガーを設定して新しい回答が来たら通知する！

![スクリーンショット 2022-03-24 13.18.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/203c511f-0a9c-43e8-6632-86e310c1f93e.png)
![スクリーンショット 2022-03-24 13.21.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/7e41c47b-e51a-9e5f-f1c7-fd03fcbdc516.png)


目覚まし時計みたいなトリガーのアイコンを押して、
右下にある`トリガーを追加`を押します
そして下の写真のように記入し、保存すれば出来上がりです！！
![スクリーンショット 2022-03-24 13.22.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/835e1c62-79ef-76fc-207f-0931de6934f8.png)

#### 最後に
ここまで読んでいただきありがとうございます！
実はqiitaに投稿するのは初めてでみづらかったと思いますし、解説もわかりづらかったかなとお察しします、、、
よろしければコメントで改善点を挙げていただきたいです！
僕の技術力向上にお付き合いください
<br>
<br>
<br>
<br>

ばいばい〜〜〜〜〜