GASとLINEBOTで復習を効率的に行う

私はいくつかの資格を取得しています[@Hirasawa1987](https://twitter.com/Hirasawa1987)のプロフィールに乗せているのでここでは割愛します。
資格の勉強する際に気を付けているのが、復習のタイミング！（勉強したことをよく忘れるんです・・・）
日付を書いた付箋を貼ったり、色で復習のタイミングを分けたりいろいろ試してきました。勉強当時にあったらよかったなと思うものを今回作ってみました。

#エビングハウスの忘却曲線
皆さん、ヘルマン・エビングハウスをご存じでしょうか？
そうです！あの有名な**エビングハウスの忘却曲線**の人です
>出典: フリー百科事典『ウィキペディア（Wikipedia）』
[ヘルマン・エビングハウス](https://ja.wikipedia.org/wiki/%E3%83%98%E3%83%AB%E3%83%9E%E3%83%B3%E3%83%BB%E3%82%A8%E3%83%93%E3%83%B3%E3%82%B0%E3%83%8F%E3%82%A6%E3%82%B9)
記憶に関する実験的研究の先駆者で、忘却曲線を発見したことで知られるドイツの心理学者

エビングハウスによると、

1日後には、節約率が34%であった（1日後には66％忘れる）
2日後には、節約率が27％であった(6日後には73％忘れる)
1ヶ月後には、節約率が21%であった(31日後には79％忘れる)

図は私の書いたイメージ図です。
![7af263c6acd53311d502abeaec20694a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206019/0c199f13-80f6-bdff-9a00-3ea0c270c241.png)


#できたもの
エビングハウスという巨人の肩の上の乗りましょう！復習に最適なタイミングでLINEを送ってくれます。


#仕組み

![d8b5c70d8bdc1fdd56ecde7ac0b24ee7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206019/021dfd95-a922-5dd6-eae3-a8ef6a2290d6.png)

##システム
1.LINEBOT(暗記BOT)に覚えたい内容を入力。
2.googleスプレッドシートに登録される。
3.登録された時間から1日、7日、31日経過したものをLINE Notifyで通知する。

![7aa7e8c9bd01c327ae14e6842a06ec00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206019/d2a4f265-3031-f8af-f0c6-bb6b97353abc.png)


#LINEBOTからメッセージを登録

LINEBOTの作り方は以下の記事を参考にしています。
>[【LINE BOT】WebAPIを使用し自動返信BOTを作ってみた](https://qiita.com/Toshiki0324/items/96c5dcb47eea5fcf302f)

googleスプレッドシートのスクリプトは以下のように組んでいます

```js
var SPREADSHEET_ID = '';
function doPost(e) {
  // ユーザーのメッセージを取得
  var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
  var messageParameter = userMessage;

  //対象のスプレッドシートを取得
  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");
  var date2 = Utilities.formatDate(new Date(), 'Asia/Tokyo', "HH:mm:ss");
  var date3 = Utilities.formatDate(new Date(), 'Asia/Tokyo', "yyyy/MM/dd HH:mm:ss");
  Logger.log(date);
  Logger.log(date2);

var targetRow = lastRow+ 1;
targetSht.getRange("A" + targetRow + ":E" + targetRow).setValues([[date, messageParameter, date, date2, date3]]);


  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

var today = new Date(); // 今の日付と時間
Logger.log(today);
function memory() {
// スプレッドシートの内容を取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("シート1");
for(var i = 2; i < 500; i++){
var content = sheet1.getRange(i, 2).getValue();
var date = sheet1.getRange(i, 5).getValue();
var dt = today - date;
var day = Math.ceil(dt / 1000 / 60 / 60 / 24);
Logger.log(day);
if (2 <= day &&　day < 3 || 9 <= day && day < 10 || 39 <= day && day < 40){
sendHttpPost(content);
}
}
}
// LINE notifyへの通知
function sendHttpPost(content){
var token = [''];
var options =
{
"method"  : "post",
"payload" : "message=" + content,
"headers" : {"Authorization" : "Bearer "+ token}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

```

```js
var SPREADSHEET_ID = '';
```
対象のスプレッドシートのID（対象のスプレッドシートを開いてURLのdocs.google.com/spreadsheets/d/**ここの文字列**/edit#gid=0）を入力してください。

```js
// LINE notifyへの通知
function sendHttpPost(content){
var token = [''];
var options =
{
"method"  : "post",
"payload" : "message=" + content,
"headers" : {"Authorization" : "Bearer "+ token}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

```
`token ` ＝`''`の間にLINENotifyで発行したkeyを入れます。
LINE Notifyの作り方は以下の記事を参考にしています。
>[[超簡単]LINE notify を使ってみる](https://qiita.com/iitenkida7/items/576a8226ba6584864d95)

入力が終わったら、スクリプトエディタの公開を押してウエブアプリケーションの導入を押して設定します。
![05393e0b1d8ca73102c94e0fc7889aac.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206019/a83ce383-2b2f-0334-5b77-b3ca62106241.png)

`Who has access to the app:`の部分がデフォルトでは`Only myself`になっているので`Anyone, even anonymous`に変更します。


[![Image from Gyazo](https://i.gyazo.com/b673c4cdc8f5ca4ff9928b182c8a947e.png)](https://gyazo.com/b673c4cdc8f5ca4ff9928b182c8a947e)

以下のようにURLが発行されるのでコピーしてLINEDevelopersのMessaging API設定の下のほうにあるWebhookに登録します。

[![Image from Gyazo](https://i.gyazo.com/4397160e1106d61e61091a5f0ed21d1a.png)](https://gyazo.com/4397160e1106d61e61091a5f0ed21d1a)


[![Image from Gyazo](https://i.gyazo.com/2bfa8c1877dcdd8dab85a108869e7b09.png)](https://gyazo.com/2bfa8c1877dcdd8dab85a108869e7b09)

以上で、入力側の設定は終わり。LINEBOTから入力すると以下の画像のように入力されていると思います。

[![Image from Gyazo](https://i.gyazo.com/7b07ede386571eb9e8dd5496de260c9f.png)](https://gyazo.com/7b07ede386571eb9e8dd5496de260c9f)


#通知設定

googleスプレッドシートのスプリクトエディタから時計のようなアイコンを押してトリガー設定をします。
![05393e0b1d8ca73102c94e0fc7889aac (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206019/bac25747-942e-8fcf-b4d8-1dc1a1be6e15.png)


`トリガーの追加`を押して設定します。

[![Image from Gyazo](https://i.gyazo.com/264dabe9ac24c1bb9599441524a2519e.png)](https://gyazo.com/264dabe9ac24c1bb9599441524a2519e)

`イベントのソースを選択`を`時間主導型`に変更して時間の間隔を設定します。

[![Image from Gyazo](https://i.gyazo.com/85d663b4100b79e80cae67a2cf50294f.png)](https://gyazo.com/85d663b4100b79e80cae67a2cf50294f)

以上の設定で1日後、1週間後、１ヶ月後に通知が来ます。

![IMG_E1338.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206019/9ecaf213-e149-5bb9-525d-4bcde08800c6.jpeg)


#参考サイト
大変参考になりました、ありがとうございます。
>[GASでスプレッドシートの内容をLINE Notifyに通知](http://komuinresign.net/blog/2017/10/gas-line-notify/)

#終わりに
試験勉強の復習方法で付箋貼ったり、日にち記入などのめんどくさい部分が解消できそう。
今回はテキストのみの入力なので画像もできたら幅が広がりそうだなと思いました。