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

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

記事
IT・テクノロジー

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

中小企業の経営者やフリーランスの皆さん、こんにちは。GASおじさんです。今回はGoogleカレンダーに大量のイベントをまとめて登録しつつ、既存のデータは直接触らず安全に運用できる方法を紹介するよ。GAS(Google Apps Script)を使えば、SaaS課金を増やさず「Googleアカウントの利用枠内で追加の専用SaaS料金なし。Apps Scriptのquota・実行上限あり」という環境で効率化が可能だ。

大量登録って聞くと「既存の予定をどうするの?」「失敗したらどうしよう?」って心配になるけど、おじさんのやり方は以下のポイントを重視してる。

・既存カレンダーの予定は消さずに残す(削除APIは使わない)
・入力データの検証をしっかり行う
・一括書き込みはバッチ処理で負荷を抑える
・バックアップ(ロールバック)用に新しい日時付きのスプレッドシートやファイルに結果を出力する
では早速、具体的なコードと運用のコツを解説していこう。


■ 初期設定と必要権限

まず、GoogleカレンダーAPIを使うのでGASのプロジェクトで「GoogleカレンダーAPI」を有効にしておこう。さらにカレンダーへのアクセス権限は、スクリプト実行時に以下のスコープが必要になる。

・Googleカレンダーの予定編集権限
・Googleスプレッドシートの編集権限
これらは初回実行時に承認を求められるよ。個人情報の取り扱いは、扱うイベント情報に顧客情報が含まれる場合は適切に管理しよう。また、installable trigger(時間主導型トリガー)を設定すれば、定期的にイベント一括登録処理を実行することも可能だ。


■ 入力データの準備と検証

イベントデータは以下のようなスプレッドシートで管理するのが手軽。例)

ポイントは日付のフォーマットチェックや、開始日時が終了日時より未来かどうかの検証。不正なデータが混ざると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の相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す