Google Appsの中でも利用頻度が高いサービスとして、カレンダー(予定表)が挙げられる。個人の予定はもちろん、仕事で関わるメンバーの予定を表示することもでき、スマートフォンから利用すれば出先での予定の確認も簡単に行える。

週ごとの定期的な予定の入力も行えるし、予定のリマインダ通知をメールやポップアップウインドウで、指定した時間前に通知することもできる。また、「毎日の予定リスト」をメールで送ることもでき、けっこう便利に使えるツールだが、App Scriptを利用してちょっとカスタマイズすることで、さらに便利になる。今回はそのような例を紹介しよう。

Googleカレンダー

今回は1日のスケジュールを、指定した時間に自分宛にメールで送るスクリプトを作成する。前述の、「毎日の予定リスト」でも同じことができそうだが、自分で時間を指定できない点がネックだ。これをスクリプトで行えば、当日朝に受信する、前日の夜に明日に備えて受信する、あるいは泊勤務などの変則的な勤務にも対応できるわけだ。なお、ここではデフォルトカレンダーの予定を扱うことにする。

標準の通知機能でも毎日の予定を送ることができるが、時間が指定できない

それでは、さっそくスクリプト(関数)の中身を見ていこう。ここでは、当日の予定一覧を毎朝7時頃にメールで送る内容とした。カレンダーに入力された項目がない場合には、「今日の予定はありません」と送ることにする。

簡単に流れを追うと、前半部分でカレンダーから予定項目を取得し、後半部分でその予定項目をメール本文として送信するといった処理だ。スクリプトの動作は、前回紹介したトリガーを利用している。また、カレンダーが対象だが、スクリプトは第1回を参考に、新規のスプレッドシートを用意して、そこに作成すればよい。

function scheduleMail() {

  var cal = CalendarApp.getDefaultCalendar();
  var events = cal.getEventsForDay(new Date());
  var honbun = "";
  var kenmei = Utilities.formatDate(new Date(),"GMT+09:00","yyyy/MM/dd")+ "の予定です";
  var mailto = "kobayashi@exsample.com"

  if(events.length > 0){
    honbun = "今日の予定は下記の通りです" + "\n\n";
    for(var i=0; i < events.length; i++){
      honbun += Utilities.formatDate(events[i].getStartTime(),"GMT+0900","MM月dd日 HH時mm分") + " ~ ";  
      honbun += Utilities.formatDate(events[i].getEndTime(),"GMT+0900","MM月dd日 HH時mm分") + " :";  
      honbun += events[i].getTitle() + "\n";
    }
  } else {
      honbun = "今日の予定はありません";
  }

  MailApp.sendEmail(mailto, kenmei, honbun);

}

まず、getDefaultCalendarメソッドで、標準のカレンダーを取得し、getEventsForDayメソッドで指定した日時の予定項目をevents変数に格納する。

events変数には取得した予定項目が2次元配列で入っており、if文でeventsが空(予定がない)か、空ではない(予定がある)かを判断する。空ではない(予定がある)場合には、メールの本文にまず「今日の予定は下記の通りです」「\n(改行)」を設定し、続けて予定の項目数分をfor文で繰り返し、予定の「開始時間」「終了時間」「予定名」を順にひとつずつ取得しているというわけだ。

もしeventsが空(予定がない)場合には、メールの本文に「今日の予定はありません」と入れている。

あとはこれらの内容を、sendEmailメソッドで指定したメールアドレスに送信。メール送信については、第3回を参考にしてほしい。

このスクリプトを実行すると、予定があれば下記のようなメールが届くはずだ。なお、このスクリプトはメールの送信とカレンダーへのアクセスを行うため、それぞれ承認を求めるダイアログが表示される。ここでは内容を確認して、承認や許可を選択しておけばよい。

今日の予定がメールで送られてくる

予定項目がない日は「今日の予定はありません」

メール送信の承認ダイアログ

カレンダーへのアクセスを確認するダイアログ

さて、動作が確認できたら、肝心のタイマー設定である「トリガー」を指定しよう。

トリガーの設定には、いくつか設定が考えられる。たとえば「時間主導型」を選択し、「日タイマー」→「午前7時~8時」を指定してもよいだろう。ただ、週末も同じような時間帯にメールが来ると(特に携帯電話で受信しているなら)、鬱陶しいかもしれない。スクリプト内で、曜日を取得して、土日だったらメールを送らないようにすることもできるが、ここでは少しアナログ的だが、別の設定をしてみよう。

同じく「時間主導型」で、「週タイマー」→「毎週月曜日」→「午前7時~8時」を選択する。これと同様に、実行するスクリプトは変更せずに、「毎週月曜日」を火曜日~金曜日で設定すればよい。あまりスマートとは言えない部分もあるが、曜日ごとに送る時間を変えられるし、平日休みシフトの場合などの対応も簡単だろう。

毎日午前7時から~8時の間に実行するようにトリガーを設定した例

曜日ごとに実行時間を設定できるように「毎週◯曜日」で実行時間を指定した例

あとはスクリプトを保存しておけば、指定した時間に同じようにメールが送られてくるはずだ。なお、今回のトリガー設定では「○時○分」までは設定できず、おおまかに「○時台」という指定になる。実際に、筆者が試したところでは、おおよそ50分頃にメールが届いた。

Google Apps Scriptではこのように個人で簡単な利用もできるし、必要であれば企業内で使用するシステム構築も可能だ。Google Enterprise Partnerでもあるサテライトオフィスでは、このような業務システムをApps Scriptで構築した名刺管理やQ&Aシステムなどのサンプルを公開している。ちょっと仕事を便利にといった個人レベルの利用とは異なるが、いろいろと参考になるだろう。