オンラインセミナーの受付〜リマインダーまでGASで自動化

GASセミナー自動化
オンラインセミナーの受付〜リマインダーまでGASで自動化のサムネイル

オンラインセミナーの受付〜リマインダーまでGASで自動化

はじめに:中小企業・フリーランスにこそGASを活用すべき理由

お疲れ様です、GASおじです。オンラインセミナーの受付からリマインダー送信まで、手作業でやっているとけっこうな時間と手間がかかりますよね。しかも外注や有料ツールに頼ると、コストもバカにならない。そこでGoogle Apps Script(以下GAS)を使って、自動化してみましょう。

GASはGoogleアカウントの利用枠内で動くので、追加の専用SaaS料金は不要です(ただしquotaや実行上限はあるので注意が必要)。中小企業やフリーランスの経営者にとって、費用対効果の高い自動化ツールになりますよ。

今回は、既存の参加者データを残しつつ、新規受付の検証、バッチ書き込み、バックアップ&復元を含めた堅牢なスクリプト例をご紹介します。


初期設定と必要な権限

1. スプレッドシートの準備

  • 「セミナー受付」スプレッドシートを用意し、シート名は「受付データ」とします。
  • 受付情報は「名前」「メールアドレス」「申込日時」などのカラムを用意してください。

2. トリガーの設定

  • installable trigger(時間主導型トリガー)を使って、毎日決まった時間にリマインダー送信を自動実行します。
  • トリガーはスクリプトエディタの「編集」→「現在のプロジェクトのトリガー」から設定可能です。

3. 必要な権限

  • スプレッドシートの読み書き権限
  • Gmail送信権限(リマインダーをメールで送る場合)

4. 個人情報の取扱い

  • 参加者の氏名・メールアドレスは個人情報です。第三者共有は行わず、スプレッドシートのアクセス権限管理に注意してください。
  • バックアップもGoogleドライブ内の自分のアカウントのみ閲覧可能なフォルダに保存しましょう。

受付データの安全な追記・バッチ処理とバックアップ

既存データを消さず、入力値の検証を行いながら新規受付情報を日時付きシートに追記します。さらに、処理前にバックアップファイルを作成し、万が一の復元に備えましょう。

function registerSeminarParticipants(newEntries) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const mainSheet = ss.getSheetByName('受付データ');
  
  // 新規受付情報は配列で渡す想定:例 [{name: '山田太郎', email: 'yamada@example.com'}]
  
  // 入力検証(メールアドレス形式と重複チェック)
  const existingEmails = mainSheet.getRange(2, 2, mainSheet.getLastRow()-1).getValues().flat();
  const validEntries = newEntries.filter(entry => {
    const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!emailPattern.test(entry.email)) return false;
    if (existingEmails.includes(entry.email)) return false;
    return true;
  });
  
  if (validEntries.length === 0) {
    Logger.log('新規有効受付なし');
    return;
  }
  
  // バックアップ作成(コピーを新規ファイルに)
  const backupFileName = `受付データバックアップ_${new Date().toISOString().slice(0,10)}_${Date.now()}`;
  DriveApp.getFileById(ss.getId()).makeCopy(backupFileName);
  
  // 新規日時付きシート作成
  const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
  const newSheetName = `受付_${timestamp}`;
  const newSheet = ss.insertSheet(newSheetName);
  
  // ヘッダー設定
  newSheet.appendRow(['名前', 'メールアドレス', '申込日時']);
  
  // バッチ書き込みデータ作成
  const now = new Date();
  const rows = validEntries.map(e => [e.name, e.email, now]);
  
  newSheet.getRange(2, 1, rows.length, rows[0].length).setValues(rows);
  
  Logger.log(`${validEntries.length}件の新規受付を日時付きシートに追記しました`);
}

ここで注意したいのは、既存の受付データを直接書き換えたり削除しないこと。新しいシートに新規受付のみをまとめることで、データの安全性と履歴管理を両立しています。


リマインダー送信の自動化

受付完了者に対して、セミナー開催前日にリマインダーメールを送る仕組みを作ります。こちらも既存データは更新せず、送信履歴やログは別シートに記録する形をおすすめします。

function sendSeminarReminders() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const mainSheet = ss.getSheetByName('受付データ');
  const logSheetName = 'リマインダー送信ログ';
  let logSheet = ss.getSheetByName(logSheetName);
  if (!logSheet) {
    logSheet = ss.insertSheet(logSheetName);
    logSheet.appendRow(['メールアドレス', '送信日時', '結果']);
  }
  
  const dataRange = mainSheet.getRange(2, 1, mainSheet.getLastRow()-1, 3);
  const data = dataRange.getValues();
  
  const sendDate = new Date();
  sendDate.setDate(sendDate.getDate() + 1); // 明日を想定
  const sendDateStr = Utilities.formatDate(sendDate, Session.getScriptTimeZone(), 'yyyy-MM-dd');
  
  data.forEach(row => {
    const name = row[0];
    const email = row[1];
    const seminarDate = row[2]; // 申込日時をセミナー開催日と仮定
    
    // もしセミナー開催日が明日なら送信(今回は申込日時を使っていますが、実際は開催日を別カラムで管理推奨)
    const seminarDateStr = Utilities.formatDate(new Date(seminarDate), Session.getScriptTimeZone(), 'yyyy-MM-dd');
    if (seminarDateStr === sendDateStr) {
      try {
        const subject = '【リマインダー】明日のオンラインセミナーのご案内';
        const body = `${name}様\n\n明日のセミナー参加をお待ちしております。\n\nよろしくお願いいたします。`;
        MailApp.sendEmail(email, subject, body);
        logSheet.appendRow([email, new Date(), '送信成功']);
      } catch (e) {
        logSheet.appendRow([email, new Date(), '送信失敗: ' + e.message]);
      }
    }
  });
}

※ここでは申込日時をセミナー開催日として代用していますが、実際は開催日を別のカラムで管理し、条件を調整してください。


コスト削減の試算

例えば、受付管理に外部サービスを使う場合、月額5,000円かかるとします。GASで自動化すれば専用SaaS料金はかかりません。

  • 月額コスト削減額 = 5,000円
  • 年間コスト削減額 = 5,000円 × 12ヶ月 = 60,000円

ただし、GASはGoogleアカウントの利用枠内(無料枠)で動くため、Apps Scriptのquotaや実行上限には注意が必要です。頻繁な大量処理や大量メール送信には制限があるため、その範囲内で運用しましょう。


トラブル時の復元手順

  • バックアップは毎回ファイルコピーで残しているので、万が一データ破損や誤操作があってもGoogleドライブからバックアップファイルを開いて復元可能です。
  • スプレッドシートのバージョン管理機能も活用し、必要に応じて過去の状態に戻せます。
  • トリガーの再設定が必要な場合はスクリプトエディタのトリガー管理画面を使ってください。トリガー削除・再作成は手動操作推奨です。

おわりに

今回紹介した方法で、オンラインセミナーの受付からリマインダー送信までをGASで自動化すれば、作業時間の短縮とコスト削減が期待できます。特に中小企業やフリーランスの方は、無駄なSaaS課金を抑えつつ効率的な運用が可能です。

もしGASでの自動化をさらに極めたい方は、GASおじラボのメンバーシップで500以上のツールを使い放題。実務に役立つスクリプトやノウハウが満載ですので、ぜひチェックしてみてください。

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