カレンダーの週間予定をGASでメール送信

GASカレンダーメール
カレンダーの週間予定をGASでメール送信のサムネイル

カレンダーの週間予定をGASでメール送信


はじめに

どうも、GASおじです。今回は中小企業の経営者やフリーランスの皆さん向けに、Googleカレンダーの1週間分の予定をまとめてメールで送る方法をお伝えします。毎週の予定確認を効率化して、無駄な時間やSaaS課金を抑えたいならGASが最適です。

ただし、GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使えますが、quotaや実行時間の上限があります。コスト削減効果はあくまで仮定で、
「SaaS月額3,000円 × 12ヶ月 = 36,000円」
が不要になったとして、年間で約36,000円の節約と見込めます。保証はしませんが、検討材料としてご参考ください。


初期設定と必要権限

  1. Google Apps Script プロジェクト作成
    Googleドライブで新規スクリプトを作成します。

  2. カレンダーAPIの有効化
    スクリプトエディタの「サービス」から「GoogleカレンダーAPI」を追加してください。

  3. 必要権限

    • カレンダーの読み取り権限(https://www.googleapis.com/auth/calendar.readonly
    • スプレッドシートの作成・編集権限
    • メール送信権限(MailApp使用)
  4. installable triggerの設定
    毎週自動でメールを送るなら、スクリプトエディタのトリガーから「時間主導型トリガー」を設定し、週1回実行するようにしましょう。


個人情報の取り扱いとバックアップ

このスクリプトは、Googleカレンダーの予定情報を扱います。個人情報に該当するため取り扱いには注意してください。外部に送信するメールアドレスは信頼できる宛先に限定し、メール本文にも不要な個人情報は含めないようにしましょう。

また、既存データを直接上書きするのではなく、新規の日時付きスプレッドシートを作成して書き出しています。これにより、過去データのバックアップやロールバックが容易です。


コード例:週間予定取得とメール送信

下記コードは、今週(月曜〜日曜)の予定を取得し、新規日時付きスプレッドシートにまとめて、そのURLをメールで送信する例です。

function sendWeeklyCalendarSummary() {
  const calendarId = 'primary'; // 変更不要、メインカレンダー
  const recipientEmail = Session.getActiveUser().getEmail(); // 自分宛に送信

  // 今週の開始・終了日時を算出(日本時間に調整)
  const today = new Date();
  const day = today.getDay();
  const diffToMonday = (day === 0 ? -6 : 1) - day; // 日曜=0なので調整
  const monday = new Date(today);
  monday.setDate(today.getDate() + diffToMonday);
  monday.setHours(0, 0, 0, 0);
  const sunday = new Date(monday);
  sunday.setDate(monday.getDate() + 6);
  sunday.setHours(23, 59, 59, 999);

  // カレンダーイベント取得
  const events = CalendarApp.getCalendarById(calendarId).getEvents(monday, sunday);

  // 新規スプレッドシート作成(日時付き)
  const now = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
  const ss = SpreadsheetApp.create(`週間予定_${now}`);
  const sheet = ss.getActiveSheet();

  // ヘッダー設定
  sheet.appendRow(['開始日時', '終了日時', 'タイトル', '説明', '場所']);

  // 入力検証のための配列に変換
  const rows = [];
  events.forEach(event => {
    rows.push([
      Utilities.formatDate(event.getStartTime(), Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm'),
      Utilities.formatDate(event.getEndTime(), Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm'),
      event.getTitle(),
      event.getDescription(),
      event.getLocation()
    ]);
  });

  // 一括書き込み(batch write)
  if (rows.length > 0) {
    sheet.getRange(2, 1, rows.length, rows[0].length).setValues(rows);
  } else {
    sheet.appendRow(['予定はありません']);
  }

  // メール本文作成
  const mailBody = `
お疲れ様です。GASおじです。

今週のGoogleカレンダー予定をまとめました。以下のスプレッドシートからご確認ください。

${ss.getUrl()}

---
※このメールはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで送信しています。Apps Scriptのquota・実行上限がありますのでご注意ください。
  `;

  // メール送信
  MailApp.sendEmail({
    to: recipientEmail,
    subject: `週間予定サマリー(${Utilities.formatDate(monday, Session.getScriptTimeZone(), 'MM/dd')}〜${Utilities.formatDate(sunday, Session.getScriptTimeZone(), 'MM/dd')})`,
    body: mailBody
  });
}

復元手順と注意点

  • 誤ってデータを消す操作はしない
    このスクリプトは既存のカレンダー予定やスプレッドシートを削除・全消去しません。新規ファイルを都度作成するため安全です。

  • 権限が不足した場合の対応
    初回実行時に権限リクエストが表示されます。必ず承認してください。

  • トリガー設定の復元
    スクリプトエディタの「トリガー」画面から再設定できます。

  • quota超過に注意
    Apps Scriptの実行時間やメール送信数には上限があります。大量のカレンダーイベントや送信先が増える場合は分割処理を検討してください。


まとめ

今回はGoogleカレンダーの1週間予定をGoogle Apps Scriptで取得し、新規スプレッドシートに書き出してメール送信する方法を紹介しました。SaaS課金を抑えつつ、効率的に予定管理ができます。

仮に月額3,000円の外部サービスを使っていたなら、GASで代替することで年間36,000円のコスト削減が見込めます(計算式は冒頭参照)。ただし、実際の業務効率化や運用コストは環境によって異なりますのでご注意ください。


GASおじラボで500ツール使い放題 →

GASおじラボのメンバーシップでは、今回のような便利ツールを500以上使い放題でご提供中です。あなたのビジネス効率アップにぜひどうぞ!