GoogleAppsScriptを使って期限が近いタスクをメール通知した件

# やりたいこと
社員の資格管理をしているシートから、6ヵ月前/3ヵ月前/1ヵ月前にメール通知を自動がしたかった。
（それまでは担当の人が手動でメール書いてました。。。）

# シートのフォーマット
元々使用していたフォーマットを使用。以下はテスト用シート。
![bandicam 2018-06-08 20-15-44-352.jpg](https://qiita-image-store.s3.amazonaws.com/0/257872/1e35b4e6-a0f1-f620-1d36-df1ad73dfb02.jpeg)



# コードを書く
メニューバーの[ツール]-[スクリプトエディタ]からスクリプト編集画面にいきコードを書く。

```
function mailSend() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();                    //スプレッドシートを取得
    var sheet1 = spreadsheet.getSheets()[0];                                    //1枚目のシートを取得
    var today = new Date();                                                     //今日の日付取得
    var today_format = Utilities.formatDate(today, "JST", "yyyy/MM/dd");  　　　 //今日の日付整形

    /* 静的パラメータ */
    var strFrom = "********@gmail.com";
    var strCc = "";

    for (var i = 2; i <= 300; i++) {

        /* 動的パラメータ */
        var strName = sheet1.getRange(i, 1).getValue();                         //名前
        
        /* 名前が空の場合は戻る */
        if ( strName == "" ) {
            continue;
        }

        var strTo = sheet1.getRange(i, 2).getValue();                           //メールアドレス
        var strQualNo = sheet1.getRange(i, 3).getValue();                       //資格ナンバー
        var strQualName = sheet1.getRange(i, 4).getValue();                     //資格名
        var strLimit = sheet1.getRange(i, 6).getValue();                        //資格期限
        var strLimit_format = Utilities.formatDate(strLimit, "JST", "yyyy/MM/dd");  //資格期限
        var strSub = "[通知]" + strQualName + "有効期限について";                               //Subject

        var strBody = strName + "さん\n\nお疲れ様です。\n" +
                      "〇〇です。\n\n" +
                      "現在取得されている" + strQualName + "(" + strQualNo + ")" + "の\n" +
                      "有効期限が認定日から計算したところ" + strLimit_format + "で\n" +
                      "失効予定となっております。\n\n" +
                      "正確な有効期限情報は書くベンダの\n" +
                      "公式サイトにてご確認ください。\n\n" +
                      "資格試験の失効は資格手当の失効にもつながる可能性があります。\n" +
                      "現在更新に動いている方もいるとは思いますが、\n" +
                      "更新できるようであれば早めの更新をおすすめします。\n\n" +
                      "※更新方法\n" +
                      "・同資格の再合格\n" +
                      "・上位資格の1科目の合格\n\n" +
                      "以上よろしくお願いします。"; 

        var strLimit_30Date = new Date(strLimit.getYear(), strLimit.getMonth(), strLimit.getDate() - 30); //期限の30日前
        var strLimit_30Date_format = Utilities.formatDate(strLimit_30Date,"JST","yyyy/MM/dd");            //期限の30日前整形
        
        var strLimit_90Date = new Date(strLimit.getYear(), strLimit.getMonth(), strLimit.getDate() - 90); //期限の90日前
        var strLimit_90Date_format = Utilities.formatDate(strLimit_90Date,"JST","yyyy/MM/dd");            //期限の90日前整形
        
        var strLimit_180Date = new Date(strLimit.getYear(), strLimit.getMonth(), strLimit.getDate() - 180); //期限の180日前
        var strLimit_180Date_format = Utilities.formatDate(strLimit_180Date,"JST","yyyy/MM/dd");            //期限の180日前整形

        /* 今日の日付が期限の30/90/180日前だった場合、メールを送信 */
        if ( today_format == strLimit_30Date_format || today_format == strLimit_90Date_format || today_format == strLimit_180Date_format ) {
            var send = GmailApp.sendEmail(
                strTo,
                strSub,
                strBody, {
                    from: strFrom
                }
            );
        }
    }
}
```

# cron設定をする
１. 時計のマークをクリック
![bandicam 2018-06-08 20-32-44-548.jpg](https://qiita-image-store.s3.amazonaws.com/0/257872/1709544f-cddf-a2f8-a927-555f59ffa0d3.jpeg)

２. 「トリガーが設定されていません。今すぐ～」をクリック
![bandicam 2018-06-08 20-34-21-446.jpg](https://qiita-image-store.s3.amazonaws.com/0/257872/f6cd566d-ec6c-ff8e-e6f8-2129286dbdc8.jpeg)

３. 以下みたいな感じで設定して「保存」をクリック
![bandicam 2018-06-08 20-42-23-430.jpg](https://qiita-image-store.s3.amazonaws.com/0/257872/3ddc277d-779b-493a-88ce-c10d962c8f43.jpeg)

これで一日一回このスクリプトが実行され、ちょうど期限から30/90/180日前の人にメールが飛ぶようになる。

もっとかっこよく短い書き方あったら教えてください；；