【Google Apps Script(GAS)】GoogleカレンダーとGmailで今日の予定を一括送信する

Google Apps

参考書を見ると、「今日の予定を一括送信する」ことができると書いてあったので、実際にプログラムを作ってみました。

Googleカレンダーから今日の予定を取ってきて、開始時間と予定名を一覧にして、メールで送信します。
送信するメールの本文はGoogleドキュメントを使って、テンプレートとして用意し、メール送信時に取得して、内容を置換します。

予定の取得にはCalendarAppを使う

スポンサーリンク

Googleカレンダーから予定を取得するにはCalendarAppを使用します。

CalendarApp.getDefaultCalendar()でデフォルトのカレンダーを取得します。
デフォルトのカレンダーではないカレンダーを指定したい場合はgetCalendarById(id)を使用することもできます。
その際のidに設定する値は「設定」→「マイカレンダーの設定」→「カレンダーの設定」からカレンダーのIDを確認できます。

CalendarApp.getDefaultCalendar()でカレンダーオブジェクトを取得し、getEventsForDay(date)で指定した日付のイベントを全て取得します。

引数説明
dateDateイベントを取得する日付(時間は無視)
getEventsForDay()のパラメータ

処理フローを検討する

プログラムを書く前に処理フローを検討します。
今回はお試しということで、例外処理や入力チェックなどは省略していますので、必要な場合は処理を入れてください。

カレンダーからイベント一覧を取得

CalendarAppを使ってイベントの一覧を取得します。

getEventsForDay()に指定する日付は今日の日付を設定します。

// カレンダーからイベント一覧を取得
var calendar = CalendarApp.getDefaultCalendar();
var today = new Date();
var events = calendar.getEventsForDay(today);

メール本文を整形

イベント一覧からメール本文に記載する情報を取得して文字列にして繋いでいきます。
各イベントを改行で区切っています。

CalendarEventオブジェクトに用意されているgetTitle()メソッドとgetStartTime()メソッドでイベント名と開始時間を取得します。

メソッド名引数
getTitle()なしイベント名を取得する。
getStartTime()なしイベントの開始時間を取得する。
CalendarEventオブジェクトに用意されているメソッド

イベントがない場合は予定がないことをメールに書くようにすると気が利いて良いと思います。

// メール本文を整形
var subject = '本日の予定';
var body = '';
for (var i = 0; i < events.length; i++) {
  body += events[i].getStartTime() + ' ' + events[i].getTitle() + '`\n';
}

if (events.length === 0) {
  body = '本日の予定はありません。';
}

メールテンプレートを取得し、置換する

Googleドキュメントで作成したメールテンプレートを取得して、イベントの一覧から作成した文字列を当てはめます。

メールテンプレートには{events}という置換用の文字列を用意して好きな場所に書き込みます。

// メールテンプレートを取得し、置換する
var template = DocumentApp.openById(テンプレートにしたドキュメントのID).getBody().getText();
template = template.replace('{events}', body);

メールテンプレートを用意する

メールの本文にする文章を予めテンプレートにしておくと、内容を書き換えたい時にわざわざプログラムを修正しなくてもテンプレートを書き換えるだけでよくなります。

今回はこちらのテンプレートを作成しました。

本日の予定です。

{events}

以上です。
今日も1日頑張りましょう!

メールを送信

メールを送信します。メール送信はGmailAppで簡単に実行できます。

// メールを送信
GmailApp.sendEmail(宛先, subject, template);

作成したテキストをメール送信するのは簡単にできますが、より細かく設定をしたい場合は下記の記事を参考にしてみてください。

プログラム全体

スポンサーリンク

プログラム全体はこのようになりました。

テンプレートにしたドキュメントのID宛先の部分には適切な値を設定してください。

function myFunction() {
  // カレンダーからイベント一覧を取得
  var calendar = CalendarApp.getDefaultCalendar();
  var today = new Date();
  var events = calendar.getEventsForDay(today);
  
  // メール本文を整形
  var subject = '本日の予定';
  var body = '';
  for (var i = 0; i < events.length; i++) {
    body += events[i].getStartTime() + ' ' + events[i].getTitle() + '`\n';
  }
  
  if (events.length === 0) {
    body = '本日の予定はありません。';
  }
  
  // メールテンプレートを取得し、置換する
  var template = DocumentApp.openById(テンプレートにしたドキュメントのID).getBody().getText();
  template = template.replace('{events}', body);
  
  // メールを送信
  GmailApp.sendEmail(宛先, subject, template);
}

まとめ

CalendarAppGmailAppを使って、本日の予定をメールで送信するプログラムを作成しました。

トリガーを設定することで、毎日決まった時間に自動送信するようにしたり、Googleフォームと連携させて、必要な時にスマホから実行して予定を送るようにできます。

宛先を複数指定したり、メールグループを用いることで、チーム内で予定を共有することもできます。