LINE Notifyで自分のカレンダーから自動でリマインダーを流す


概要

毎週日曜日の夜に、Google Calendarの予定を自動で読み込み、自分のLINEにポストする。
やることは三つ。
1. LINE Notifyにアクセス、マイトークンの発行
2. Google Calendarでマイカレンダーを設定
3. Google Apps Scriptでリマインダーを実装

1. LINE Notifyを設定

LINE Notifyとは

LINEが提供している無料のサービス。様々なアプリやWebサービスとAPI連携し、受け取った通知をLINEのグループに送信することができる。

LINE Notifyの登録

  1. LINEでメンバーが自分だけのグループを適当に作成
    グループ名を「リマインダー」とか、分かりやすいようにしておくといいかも。

  2. 以下にアクセスし、自分のLINEに登録しているメールアドレスとパスワードでログイン
    LINENotify

  3. 右上のメニューからマイページを選択

  4. アクセストークンの発行 からトークンを発行

    (1) トークン名は適当に「来週の予定」などに設定。

    このトークン名は、最終的にリマインダーをメッセージとして送信する際に、メッセージの頭につく。例えば「来週の予定」というトークン名にすると以下のようにLINEにメッセージがくる。

    (2) 通知するトークルームには、先ほど作ったグループを選択

  5. トークンIDをメモっておく。

  6. LINE Notify側は設定完了

  7. スマホでLINEを開いて、選択したグループに「LINE Notify」を招待しておく。これでLINEの設定は完了

2. Google Calendarでマイカレンダーを設定

マイカレンダーとは

言うまでもないが、Google Calendarにある機能の一つ。自分のカレンダーに登録する予定をグループ化して管理できる。"仕事"とか"プライベート"みたいな感じで作っておくと便利なやつ。
今回はリマインダー用のグループとして「いろんな予定」を作成する。

マイカレンダーの登録

  1. 自分のGoogle Calendarを開き、左側にある「他のカレンダー」の"+"ボタンから新しいカレンダーを作成する。

  2. 適当に名前をつけて作成

  3. カレンダーIDの取得

    1. 作成した「いろんな予定」のところにカーソルを合わせると出てくる、縦の三つコロンから「設定と共有」を開く。
    2. バーっと下に進むと、「カレンダーの統合」とあるので、そこに書いてある「カレンダーID」をメモする。

  1. マイカレンダーの設定完了

3. Google Apps Scriptで実装

Google Apps Scriptとは

Googleが提供しているサービスの一つ。サーバーサイドのスクリプト環境。要するに、Googleのサーバー上でプログラムを実装し、そこで走らせることができる。GASとか言われてる。下記リンクからChromeに追加できる。
Google Apps Script

Google Apps Scriptで実装


  1. 「新しいプロジェクト」から、新規プロジェクトを作成

  2. カレンダーを読み込み、メッセージとして通知するためのプログラムを実装
    lineTokenIDの所に先ほどメモしたLINE NotifyのトークンIDを、googleCalendarIDの所にはマイカレンダーのIDを入れる。
    reminder.gs
    var lineTokenID = 'memositeoitalinetokenid';
    var googleCalendarID = '[email protected]';
    
    function sendToLine(text) {
      var text = 'test'
    
      var token = lineTokenID;
      var options =
       {
         'method'  : 'post',
         'payload' : 'message=' + text,
         'headers' : {'Authorization' : 'Bearer '+ token}
       };
       UrlFetchApp.fetch('https://notify-api.line.me/api/notify', options);
    }
    

  3. 試しに実行
    蜘蛛のアイコンの隣の実行ボタンから、実行できる。

    最初の実行時には以下のような警告が出る。

    「許可を確認」→「詳細」→「〇〇に移動」→「許可」で承認する。

  4. 無事通知されることを確認

  5. 日曜日に次の一週間の予定を読み込み通知するプログラムを実装
    関数notify()のところで、先一週間の予定を読み込み、通知を投げます。
    reminder.gs
    var lineTokenID = 'memositeoitalinetokenid';
    var googleCalendarID = '[email protected]';
    var weekday = ['月', '火', '水', '木', '金', '土', '日'];
    
    function toTime(str) { return Utilities.formatDate(str, 'JST', 'HH:mm'); }
    function toDay(str) { return Utilities.formatDate(str, 'JST', 'd'); }
    function sendToLine(text) {
      var token = lineTokenID;
      var options =
       {
         'method'  : 'post',
         'payload' : 'message=' + text,
         'headers' : {'Authorization' : 'Bearer '+ token}
       };
       UrlFetchApp.fetch('https://notify-api.line.me/api/notify', options);
    }
    
    function notify() {
      var text = '\n';
      var sunday = new Date();
      var calendar = CalendarApp.getCalendarById(googleCalendarID);
    
      // 先一週間の予定を読み込み
      for (var d = 0; d < weekday.length; d++) {
        var day = new Date();
        day.setDate(sunday.getDate() + (d+1));
        var events = calendar.getEventsForDay(day);
    
        if (events.length > 0) {
          text += '\n'+toDay(day)+'('+weekday[d]+')'
          for (var e = 0; e < events.length; e++) {
            var event = events[e];
            var title = event.getTitle();
            var start = toTime(event.getStartTime());
            text += '\n・' + title;
          }
        }
      }
    
      // LINEに送信
      sendToLine(text);
    }
    

    試しに火曜と金曜に適当な予定を入れて、notify()関数を実行するとこんな感じ。

  6. 毎週日曜の夕方に上のプログラムを実行するように設定
    1. Google Apps Scriptのプロジェクト一覧を開き、今回作成したプロジェクトの右端にある縦コロン三つのアイコンから「トリガー」をクリック。

    2. トリガーを追加し、諸々を設定

    3. 保存を押して終了

  7. Google Apps Scriptの設定完了