LINE Bot+GAS+Google スプレッドシートで私の日々のスケジュールを管理するためのしくみをつくってみた

##作ったきっかけ
最近の会議はほぼオンラインとなり、会議室の予約も発生しないことから（会議室予約だと1日前にリマインダーがくる）、開始15分前のリマインダー通知で会議の存在を思い出すケースが多々あります（反省）。そこで、**何とか改善せねば！**と反省の意味もこめて、今回の仕組みを作ってみました。最終的にはGoogleスプレッドシートに反映されたスケジュールをGoogleカレンダーに反映させています。
結構たくさんの方が同じようなものをつくられているので、参考にさせていただきました。
##構成
LINE+GAS+Googleスプレッドシート+Googleカレンダーの構成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/9e790de2-79a7-4884-e4da-cfc030fd1537.png)
##作ったもの
LINEから**「日程、開始時間、終了時間、内容」**を改行して入力します。
　　　　　　　　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/d623ea8a-a558-5e83-51e9-4ea32af616a7.png)
入力した内容がGoogleスプレッドシートに反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/700c31b9-f332-8374-3602-48ffb2937e29.png)
Googleスプレッドシートに作成されたスケジュールを今度はGoogleカレンダーに反映します。（シート内の**「カレンダー連携」**ボタンを押下することで、反映されます）![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/3736d131-978e-c301-4c48-0968c4ba4f0d.png)
Googleカレンダーに反映されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/644db319-b295-1b38-68e5-df16b1ba79e8.png)
##手順について
以下、作成手順を記載します。
###1.Googleスプレッドシートを作成します。
①googleドライブ→新規作成→googleスプレッドシートの順番です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/2b833eb7-0d27-e913-6cd1-b1fab495a805.png)
②スプレッドシートURLのd/から/edieまでの間（青色四角部分）がシートIDになるのでコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/2f7dfb60-a0b5-7a05-5230-eba7e8f77113.png)
③ツール→スクリプトエディタ→コード作成ページへと進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/0062eea0-ca97-2228-550e-fc307b582f40.png)
###2.コードを作成します。
LINEで入力したMSGをスプレッドシートへ連携するまでのコードです。

GASで作成
「var SPREADSHEET_ID =」の部分に先ほどコピーした**シートID**を貼付します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/d9c8dfda-e9ea-ff01-196f-cfb30020dd67.png)

見やすく表示します

```javascript
var SPREADSHEET_ID = '1Wm7JkTpYC7LQVmJ7TttcMrfS-Rsl_********';//スプレッドシートのIDを入力する

function doPost(e) {

  // ユーザーのメッセージを取得
  var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
  //LINEメッセージを「改行」で分割
  var messageParameter = userMessage.split(/\r\n|\n/);

  //対象のスプレッドシートを取得
  var targetSs = SpreadsheetApp.openById(SPREADSHEET_ID);
  //対象のシート取得
  var targetSht = targetSs.getSheetByName('シート1');
  //最終行取得
  var lastRow = targetSht.getLastRow();
  //現在年月日取得
  var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy年MM月dd日');

  //各セルに書き込み
  //A列に記入年月日
  targetSht.getRange('A' + (lastRow + 1)).setValue(date);
  //B列に入力した日付（メッセージの１行目）
  targetSht.getRange('B' + (lastRow + 1)).setValue(messageParameter[0]);
  //C列に開始時間（メッセージの２行目）
  targetSht.getRange('C' + (lastRow + 1)).setValue(messageParameter[1]);
  //D列に終了時間（メッセージの3行目）
  targetSht.getRange('D' + (lastRow + 1)).setValue(messageParameter[2]);
  //E列に内容（メッセージの4行目）
  targetSht.getRange('E' + (lastRow + 1)).setValue(messageParameter[3]);
  

  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
  }
```
###3.アプリをデプロイします
①デプロイから新しいデプロイを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/a903af5e-6de1-001e-55aa-3cf8de7ad34f.png)
②新しくデプロイします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/7d86d48d-4a60-85ce-c52a-e26e832bdc2d.png)
③WebhookにはりつけるURLが完成です。webアプリURLをコピーしましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/f4ad3433-c302-05df-2476-fa171fb02052.png)
④Webhookにはりつけます(編集→はりつけ→検証)
https://account.line.biz/login?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/8aa2dac1-774a-844a-1e65-e5e6fcc392b6.png)
⑤成功がでたらOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268391/ede30fa7-7f21-e9a4-119b-902c1e0cba39.png)
##Googleカレンダーへの反映
Googleカレンダーへの反映については、以下の記事を参考にして作成しているので、コード含め詳細はこちらを参照ください。
https://www.whizz-tech.co.jp/3996/
##おわりに
GASに触れることができたのは楽しかったです！ただデバッグとかなれず結構時間かかりました。簡単な方法があったら教えてください。