研究室の書籍貸出簿をJavascriptとGoogle Apps Scriptと書誌情報APIで．その2

#更新（2020年3月29日）
関数づくりの箇所で，GoogleAppsScriptのDate型では，単純にGetDate()したものに⁺15としても，「日」だけが更新されて，年と月はスクリプト実行年月日の年月が設定されてしまう（newDate()でオブジェクトを作った時の年月）．つまり，本貸し出しが2019年11月25日でスクリプト実行日が2020年3月4日の場合，期待されるのはdeadlienに2019年12月10日が設定されることなのだが，「2020年3月」はKeepされて，25日がGetDateで設定された後，15日たされて，2020年4月10日となってしまう．ということで，年月も指定するように設定．
またオブジェクトを作ってから日付設定するのではなく，オブジェクトを作るときに設定してしまう形にした．




#関連記事
[その1：本のバーコードを読んで貸出記録をつけるシステム](https://qiita.com/fujino-fpu/items/fd4199f18f2d835098f0)
[その2：返却期限すぎても返却されていない本のリマインドメールを出すシステム](https://qiita.com/fujino-fpu/items/170de6ce8ac1cfe0c4d1)
[その3：貸出簿をつける時のエラーチェック（スプレッドシートの学生情報DBに問い合わせするシステム）](https://qiita.com/fujino-fpu/items/e1b09807b5f54eb93385)
[その4 : 返却処理のシステム](https://qiita.com/fujino-fpu/items/123dc46a54ac344bb2ac)

[前回](https://qiita.com/fujino-fpu/items/fd4199f18f2d835098f0)の続きで，残された課題のうち，リマインドメール送信を作ってみた．

#構想
返却日をすぎてるのに返却処理がされてない本ついて，1日1回リマインドメールを出す．

具体的には，
- スプレッドシートを順に走査し，貸出日の日付を取得．
- 今日の日付と貸出日＋15日の日付をチェックし，今日の日付の方が大きい場合に，メールを送る．
という関数を作り，その関数をGoogle Apps Scriptのトリガ機能を使って定期的（毎日）実行する．

#まずは関数づくり．
参考にしたページ

https://spreadsheets-dojo.com/isblank/
http://pineplanter.moo.jp/non-it-salaryman/2018/10/14/gas-getdate/
https://qiita.com/mistolteen/items/404c10657b1b27007a3c

```{javascript:myFuntion}
function myFunction() {//データをレビューしてメールを送る．
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート1");
  var lastRow=sheet.getDataRange().getLastRow(); //対象となるシートの最終行を取得
  
  for(var i=2; i<=lastRow ; i++){//あくまで1からスタートするみたい．で，1行目はヘッダー行なのでi=2とした
    var lentdate_s=sheet.getRange(i, 1).getValue();
    var lentdate = new Date(lentdate_s);
    /******2020/3/29コメントアウト
    var deadlinedate = new Date();　
    deadlinedate.setDate(lentdate.getDate()+15); 
    *********/
    var deadlinedate = new Date(lentdate.getFullYear(), lentdate.getMonth(), lentdate.getDate()+15); //2020/3/29追記
    var currentdate = new Date();
    if(currentdate > deadlinedate){
      var returndate = sheet.getRange(i, 7); //7列目は返却日を記録する箇所．
      if(returndate.isBlank()){
        //メアドを取得してリマインド送信する．　
        var mailadress = sheet.getRange(i,6).getValue();
        var student = sheet.getRange(i, 4).getValue();
        var book = sheet.getRange(i, 2).getValue();
        var author=sheet.getRange(i, 3).getValue();

        body = student + "さん\n\n"+"こんにちは，藤野です．\n"+ 
          lentdate.getYear()+"年"+(lentdate.getMonth()+1)+"月"+lentdate.getDate()+"日" + "に借りていかれた\n\n"+
          "「"+ book +"」\n(著者："+ author+"）\n\n" +
          "について返却期日を過ぎていますが，まだ返却処理がされていません．\n"+
          "忘れずに返却するようにしてください．また返却した際には返却処理を忘れずに．\n"+
          "よろしくお願いいたします。\n\n藤野　拝";
        
        MailApp.sendEmail(mailadress,'本の返却未了のお知らせ',body);
      }
    }
  }
}

```

#トリガー処理
https://qiita.com/tanabee/items/2c51681396fe12b6a0e4#%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC
エディタの`編集`->`現在のプロジェクトのトリガー`を選択．
下記のようにmyFunctionを定期実行に設定．とりあえず動作確認のため，1分おきにしているが，これが1日おきとなる．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317916/d5ed1eea-0384-371c-c010-0a96b7cad581.png)

#ぶじに受信
ぶじに1分おきにメールがくることを確認！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317916/4b1f710b-5f9e-1b0e-9769-271970128f70.png)

#残された課題
これで，あと残ったのは返却用のインタフェースの作成．