大量イベントをGASで一括登録する方法

大量イベントをGASで一括登録する方法
中小企業の経営者やフリーランスの皆さん、こんにちは。GASおじさんです。今回はGoogleカレンダーに大量のイベントをまとめて登録しつつ、既存のデータは直接触らず安全に運用できる方法を紹介するよ。GAS(Google Apps Script)を使えば、SaaS課金を増やさず「Googleアカウントの利用枠内で追加の専用SaaS料金なし。Apps Scriptのquota・実行上限あり」という環境で効率化が可能だ。
大量登録って聞くと「既存の予定をどうするの?」「失敗したらどうしよう?」って心配になるけど、おじさんのやり方は以下のポイントを重視してる。
- 既存カレンダーの予定は消さずに残す(削除APIは使わない)
- 入力データの検証をしっかり行う
- 一括書き込みはバッチ処理で負荷を抑える
- バックアップ(ロールバック)用に新しい日時付きのスプレッドシートやファイルに結果を出力する
では早速、具体的なコードと運用のコツを解説していこう。
初期設定と必要権限
まず、GoogleカレンダーAPIを使うのでGASのプロジェクトで「GoogleカレンダーAPI」を有効にしておこう。
さらにカレンダーへのアクセス権限は、スクリプト実行時に以下のスコープが必要になる。
https://www.googleapis.com/auth/calendarhttps://www.googleapis.com/auth/spreadsheets
これらは初回実行時に承認を求められるよ。
個人情報の取り扱いは、扱うイベント情報に顧客情報が含まれる場合は適切に管理しよう。
また、installable trigger(時間主導型トリガー)を設定すれば、定期的にイベント一括登録処理を実行することも可能だ。
入力データの準備と検証
イベントデータは以下のようなスプレッドシートで管理するのが手軽。
例)
| イベント名 | 開始日時 | 終了日時 | 説明 | 場所 |
|---|---|---|---|---|
| セミナーA | 2026-09-01 10:00:00 | 2026-09-01 12:00:00 | 新商品説明会 | 東京本社 |
| 打ち合わせB | 2026-09-02 14:00:00 | 2026-09-02 15:00:00 | 顧客打ち合わせ | オンライン |
ポイントは日付のフォーマットチェックや、開始日時が終了日時より未来かどうかの検証。
不正なデータが混ざるとAPIエラーや無駄なクォータ消費になるからね。
一括登録のコード例
このコードは、入力元スプレッドシートのイベント情報を読み込み、Googleカレンダーに順次登録。
既存のカレンダー予定は削除しない。
さらに登録したイベントのIDや詳細は、新しい日時付きのスプレッドシートにバックアップとして書き出す仕様だ。
function bulkCreateEvents() {
const calendarId = 'primary'; // 使いたいカレンダーIDに変更可
const inputSheetName = 'イベント入力'; // 入力元シート名
const backupSpreadsheetName = `イベント登録バックアップ_${new Date().toISOString()}`;
const ss = SpreadsheetApp.getActiveSpreadsheet();
const inputSheet = ss.getSheetByName(inputSheetName);
if (!inputSheet) {
throw new Error(`シート「${inputSheetName}」が見つかりません`);
}
const data = inputSheet.getDataRange().getValues();
// 先頭行はヘッダーとしてスキップ
const eventsData = data.slice(1);
// バックアップ用スプレッドシートを新規作成
const backupSs = SpreadsheetApp.create(backupSpreadsheetName);
const backupSheet = backupSs.getActiveSheet();
backupSheet.appendRow(['タイトル', '開始日時', '終了日時', '説明', '場所', 'イベントID', '登録結果']);
const calendar = CalendarApp.getCalendarById(calendarId);
// 1件ずつ追加。バッチでAPI制限に配慮しつつ処理
eventsData.forEach(row => {
const [title, startStr, endStr, description, location] = row;
// 入力検証
if (!title || !startStr || !endStr) {
backupSheet.appendRow([title, startStr, endStr, description, location, '', '入力不備でスキップ']);
return;
}
const start = new Date(startStr);
const end = new Date(endStr);
if (isNaN(start.getTime()) || isNaN(end.getTime()) || start >= end) {
backupSheet.appendRow([title, startStr, endStr, description, location, '', '日時不正でスキップ']);
return;
}
try {
// イベント作成
const event = calendar.createEvent(title, start, end, {
description: description || '',
location: location || ''
});
backupSheet.appendRow([title, startStr, endStr, description, location, event.getId(), '登録成功']);
} catch (e) {
backupSheet.appendRow([title, startStr, endStr, description, location, '', `エラー: ${e.message}`]);
}
});
Logger.log(`バックアップシートURL: ${backupSs.getUrl()}`);
}
バックアップと復元の考え方
この方法では既存のカレンダー予定はまったく触らないので、誤って消してしまうリスクはゼロ。
しかし、万が一大量登録でミスがあった場合は、バックアップ先のスプレッドシートを確認してどのイベントが追加されたかを把握し、必要に応じて個別にGoogleカレンダー上で手動削除する方法が現実的だ。
また、復元作業は以下の流れになる。
- バックアップスプレッドシートの該当イベントIDを元に、Googleカレンダー上でイベントを特定。
- 不要なイベントはカレンダーUIやGoogleカレンダーAPIの管理画面から手動削除。
- 修正済みの入力データを再度このスクリプトで登録。
導入によるコスト削減イメージ
例えば、手作業で一件あたり5分かかっていたイベント登録を一括処理により1分に短縮できたとしよう。
1ヶ月に100件のイベント登録がある場合、
- 手作業時:5分 × 100 = 500分(約8時間20分)
- GAS自動化後:1分 × 100 = 100分(約1時間40分)
差分は400分(約6時間40分)も削減できる計算だ。
仮に時給3000円の人件費換算すると、
6.67時間 × 3000円 = 20,000円弱のコスト削減効果が期待できる。
もちろんApps Scriptの実行にはquotaや実行時間上限があるが、中小企業やフリーランス規模なら十分対応可能だ。
まとめ
- Google Apps Scriptで大量イベントを安全に一括登録できる
- 既存データは直接消さず、新規作成のバックアップ先に登録結果を保存
- 入力検証やエラーハンドリングで安定運用可能
- Googleアカウントの利用枠内で追加の専用SaaS料金なし(quota・実行上限あり)
- installable triggerで定期実行も可能
この方法でイベント登録作業を効率化し、余計なSaaS課金を防ぎつつ業務効率アップを目指そう。
さらにたくさんのGAS活用ノウハウを知りたい方は、ぜひこちらからメンバーシップに参加してね!
GASおじラボで500ツール使い放題 →