GASを使ってGoogleフォームの回答をLINEに通知する手順

### **説明**

GAS（Google App Script）を使い、Googleフォームの回答をLINEに通知する手順について解説します。

事前準備として、以下の2つを終わらせておいてください。

- 通知する為の LINE グループを作成している事。
- 又、その際に LINE Notify をお友だち追加してグループへ招待しておく事。

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/b72a606e-26dc-a44e-35fb-a1b5f88bdf83.jpeg)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/e3c33fb8-ec5a-e5a6-47b4-782e4f7d9d6a.png)

## ■ 手順

### 1.  LINE Notify の設定

1.1　[**LINE Notify ページ**](https://notify-bot.line.me/ja/)へアクセスし、ログイン。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/facaf5f7-dd8e-dc64-b169-e50d23d3dbe1.png)

1.2　メールアドレス・パスワードを入力。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/c25f08b4-3c3e-0622-155d-6de47c8c1c97.png)

1.3　ログイン出来た事を確認。右上の自分の名前をクリックし、マイページへログイン。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/7cc4fb51-7e90-ecb8-8de7-60e94a428a56.png)

1.4　下にスクロールすると「トークンを発行する」というボタンがあるため押下。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/7b2914ab-bf84-e7d9-1576-64969951cec1.png)

1.5　トークン名と通知をする対象のチャンネルを決めて、「発行する」を押下。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/b5b7e70b-7b28-2f0d-0c5a-2c89dbc0732d.png)

1.6　トークンが発行されるため必ずメモをする。（1回しか表示されない）
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/b9be4545-3139-ec21-7921-5c15156380c2.png)

### 2. GAS (Google App Script) の設定

2.1　Google フォームを作ったら、「スプレッドシートにリンク」を押下。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/227ffe96-e27d-57a1-5b68-97cc50f36263.png)

2.2　今回は新しいスプレッドシートを作成する。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/5b55f44c-2a93-13fb-d33b-04d4b3c22318.png)

2.3　タイムスタンプという言葉だと少し分かりにくいので「回答送信日時」に変更する。
（項番2.5のソースコード、13行目でも ”回答送信日時” という言葉で統一してる）

- 変更前
    
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/ecbba820-99f8-0569-ba6d-de0f46460498.png)

- 変更後
    
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/5df2d039-bc42-d758-4061-5d7acee61531.png)

2.4　拡張機能 → App Script を押下。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/c9390594-95b5-c57e-468e-17260c6aaaba.png)

2.5　command + s で保存後、下記のコードを貼り付ける。（Windows なら ctl + s）

```jsx
//spreadsheetからデータを取得
function GoogleFormToLine(){
  const sheet = SpreadsheetApp.getActiveSheet(); //sheetの指定
  const row = sheet.getLastRow(); //行数
  const column = sheet.getLastColumn(); //列数
  const range = sheet.getDataRange(); //sheetから範囲指定するための準備
  let message = "";
  
  for(let i=1;i<=column;i++){ // 変数 i を宣言するために let を追加
    const item = range.getCell(1, i).getValue(); //1行目
    let value = range.getCell(row, i).getValue(); //最終行
    
    if(item == "回答送信日時" || item == "お子様の生年月日"){ // タイムスタンプを見やすくする
      if (Object.prototype.toString.call(value) === '[object Date]' && !isNaN(value)) {
        // 取得した値が Date オブジェクトの場合
        value = Utilities.formatDate(value, "Asia/Tokyo", "yyyy年MM月dd日 HH時mm分");
      } else {
        // 取得した値が Date オブジェクトでない場合
        let dateValue = new Date(value);
        if (!isNaN(dateValue.getTime())) {
          value = Utilities.formatDate(dateValue, "Asia/Tokyo", "yyyy年MM月dd日 HH時mm分");
        } else {
          value = "無効な日付";
        }
      }
    }
    message += "\n■" + item + "\n" + value;
  }
  
  SendToLine(message);
}

//LINEに通知
function SendToLine(message){
  const token = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN');
  const op = {
    "method": "post",
    "Content-Type": "application/x-www-form-urlencoded",
    "payload": "message=" + message,
    "headers": { "Authorization": "Bearer " + token }
  };
  const res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify", op);
  Logger.log(JSON.parse(res.getContentText())); //Response
}

//Tokenを登録する
//1回実行したら、以下のコードを削除する
function RegisterToken(){
  const LINE_TOKEN = "{LINE_TOKEN_xxxxxxxx}" //ここにLINE_TOKENを入力する
  PropertiesService.getScriptProperties().setProperty('LINE_TOKEN',LINE_TOKEN);
}
```

2.6　GoogleFormToLine を押下し、RegisterToken を選択し、実行を押下。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/483ba7d3-337b-ed68-93f1-dd5acfaa1cd1.png)
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/3a0c9df6-3945-0c31-b11f-4064b8e9d51f.png)

2.7　「権限を確認」押下し、Google アカウント認証する。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/aec412ed-cf97-267b-6e08-bb1dfd841474.png)
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/1b8d106e-17e9-d6c8-59dc-fdb613e6b0b2.png)

2.8　「詳細を表示」→「無題のプロジェクト（安全ではないページ）に移動」を押下。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/89348ca4-052a-c0b0-c8c0-c46813b56c3f.png)

2.9　「許可」を押下。
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/89c1bdbe-3e2f-3ee5-50b1-4e09c5eaf1b4.png)

2.1.0　画像の様な、実行ログが出ていればOK。
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/f0340aa4-4479-1730-a2ea-2b24dbc0c4ef.png)

2.1.1　Token を登録する為のコードはもう不要なため削除する。（45行目から49行目）

```jsx
//Tokenを登録する（初回のみ必要）
function RegisterToken(){
  const LINE_TOKEN = "{LINE_TOKEN_xxxxxxxx}" //INE_TOKEN
PropertiesService.getScriptProperties().setProperty('LINE_TOKEN',LINE_TOKEN);
}
```

### 3. トリガーの作成

3.1　サイドバーからトリガーを選択し、右下にある「トリガーを追加」を押下。
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/3650c393-3d9d-0e4c-ddf0-12dade393e4d.png)

3.2　画像の様に選択したら「保存」を押下。
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/1ef50436-80a8-6cf1-0b1e-6234f9c46335.png)

3.3　Google 認証をしたら、項番 2.7 と同じ様に「詳細を表示」→「無題のプロジェクト（安全ではないページ）に移動」を押下。
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/b6029754-54c6-590f-c134-351581c745c9.png)
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/6f92286c-ac97-5786-865d-01b21f64edba.png)
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/6fea8ec4-0d95-6272-b07e-58853019371a.png)

### 4. 動作確認

4.1　テストフォームに適当に文字を入れて送信をする。
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/e8ea6322-3374-595d-6b60-14c744f941c5.png)

4.2　LINE に通知が来ている事を確認！
![27.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/aaad9772-d937-5bee-c4c8-0e7a2c313bb6.jpeg)

以上。

## ■ 参考文献
https://tech.minagu.work/archives/21