GASでGoogleカレンダーを操作する方法|予約管理の自動化
予約や会議のスケジュール管理を手作業でやっている限り、ダブルブッキングや入力漏れは必ず発生します。GASとGoogleカレンダーを連携させると、スプレッドシートへの入力だけで予定の作成・変更・リマインダー送信まで自動化できます。この記事では、CalendarApp の主要メソッドから実用的なコード例まで、予約管理の自動化に必要な知識を一通り解説します。
目次
GASでGoogleカレンダーを操作する基本
GASでGoogleカレンダーを操作するには、CalendarApp クラスを使います。このクラスを通じて、カレンダーの取得・予定の作成・イベントの検索・削除・参加者の招待といった操作をすべてコードで実行できます。
カレンダーの取得方法
まず操作対象のカレンダーを取得する必要があります。デフォルトカレンダー(スクリプトを実行するGoogleアカウントのメインカレンダー)を取得する場合は CalendarApp.getDefaultCalendar() を使います。特定のカレンダーを名前やIDで指定したい場合は以下のようにします。
// デフォルトカレンダーを取得
const calendar = CalendarApp.getDefaultCalendar();
// カレンダー名で取得(同名が複数ある場合は最初の1件)
const namedCal = CalendarApp.getCalendarsByName('予約管理')[0];
// カレンダーIDで取得(Google カレンダーの設定画面で確認できる)
const calById = CalendarApp.getCalendarById('xxxxx@group.calendar.google.com');
主要メソッド一覧
| メソッド | 機能 |
|---|---|
| createEvent(title, start, end) | 時刻付きイベントを作成 |
| createAllDayEvent(title, date) | 終日イベントを作成 |
| getEvents(start, end) | 期間内のイベント一覧を取得 |
| getEventById(id) | IDでイベントを取得 |
| deleteEvent() | イベントを削除 |
| addGuest(email) | 参加者を追加(招待メールを送信) |
業務自動化でできること100選
経理・人事・営業・CS・総務・ITの6部門100事例を収録。各事例に月間削減時間と導入難易度を明記。今日から始められるチェックリスト付き。
予定の作成・取得・削除——主要コード例
イベントを作成するコード
以下は、Googleカレンダーに時刻付きのイベントを作成するシンプルなコード例です。
function createMeeting() {
const calendar = CalendarApp.getDefaultCalendar();
const startTime = new Date('2026-05-10T10:00:00');
const endTime = new Date('2026-05-10T11:00:00');
const event = calendar.createEvent(
'月次定例会議',
startTime,
endTime,
{
description: '5月の業績確認と6月の方針について',
location: 'Googleミート(オンライン)',
guests: 'member1@example.com,member2@example.com',
sendInvites: true // 招待メールを自動送信
}
);
Logger.log('イベントID: ' + event.getId());
}
期間内のイベントを取得するコード
今月の予約一覧をスプレッドシートに書き出す処理は、以下のように実装できます。
function exportEventsToSheet() {
const calendar = CalendarApp.getCalendarsByName('予約管理')[0];
const now = new Date();
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);
const monthEnd = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59);
const events = calendar.getEvents(monthStart, monthEnd);
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('予約一覧');
sheet.clearContents();
sheet.appendRow(['タイトル', '開始日時', '終了日時', '場所', '参加者']);
events.forEach(event => {
sheet.appendRow([
event.getTitle(),
event.getStartTime(),
event.getEndTime(),
event.getLocation(),
event.getGuestList().map(g => g.getEmail()).join(', ')
]);
});
}
スプレッドシート連携で予約管理を自動化する
実際の予約管理業務では、「Googleフォームで受け付けた予約を自動でカレンダーに登録する」というフローが最も利用価値が高いです。
フォーム送信トリガーで自動登録する仕組み
Googleフォームに「希望日時」「サービス種別」「氏名」「連絡先」の項目を設け、送信時にGASのトリガーを起動してカレンダーにイベントを登録する流れを作ります。
function onFormSubmit(e) {
const responses = e.values;
// フォームの回答列の順番に合わせてインデックスを調整
const timestamp = responses[0];
const customerName = responses[1];
const email = responses[2];
const serviceType = responses[3];
const startDateStr = responses[4]; // 例: '2026/05/15 14:00'
const startTime = new Date(startDateStr);
const endTime = new Date(startTime.getTime() + 60 * 60 * 1000); // 1時間後
const calendar = CalendarApp.getCalendarsByName('予約管理')[0];
calendar.createEvent(
`【予約】${serviceType} - ${customerName}`,
startTime,
endTime,
{ guests: email, sendInvites: true }
);
}
重複チェックの実装
同じ時間帯にすでに予約が入っている場合に自動で断るメールを返す処理も追加できます。getEvents(startTime, endTime) で既存の予約を確認し、0件であれば登録、1件以上あれば「申し訳ございませんが、その時間帯はすでに予約が入っております」というメールを自動返信する処理をGmailAppで実装します。
リマインダーと参加者通知の自動化
前日リマインダーの自動送信
翌日の予約をリストアップして、参加者に前日リマインドメールを送るスクリプトをトリガーで毎日18時に実行するよう設定しておくと、当日のドタキャンや時間忘れを大幅に減らせます。
function sendTomorrowReminders() {
const calendar = CalendarApp.getDefaultCalendar();
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
const dayStart = new Date(tomorrow.setHours(0, 0, 0, 0));
const dayEnd = new Date(tomorrow.setHours(23, 59, 59, 999));
const events = calendar.getEvents(dayStart, dayEnd);
events.forEach(event => {
const guests = event.getGuestList();
guests.forEach(guest => {
GmailApp.sendEmail(
guest.getEmail(),
'【明日の予約リマインド】' + event.getTitle(),
`明日 ${event.getStartTime()} からの予約があります。\n場所: ${event.getLocation() || '未設定'}\nご確認ください。`
);
});
});
}
よくあるエラーと対処法
「カレンダーが見つからない」エラー
getCalendarsByName() でカレンダーが見つからず空配列が返る場合は、カレンダー名のスペルや全角・半角を確認してください。Googleカレンダーの設定画面でカレンダーIDを確認し、getCalendarById() を使う方が確実です。
権限エラー(Googleカレンダーへのアクセス拒否)
GASを初めて実行する際に「このアプリはGoogleアカウントへのアクセスを求めています」という認証画面が表示されます。「許可」を選択しないとカレンダーを操作できません。組織のGoogle Workspaceで制限がかかっている場合は、管理者に権限付与を依頼する必要があります。
本番運用前の確認ポイント
テスト用のカレンダーを別途作成し、本番のカレンダーとは分けてテストを行うことを強くお勧めします。誤って本番カレンダーの予定を全削除するといったミスを防ぐために、開発中は必ずテスト環境で動作確認してください。
QGASで操作できるのは自分のカレンダーだけですか?
Aスクリプトを実行するGoogleアカウントが閲覧・編集権限を持つカレンダーであれば操作できます。チームで共有しているカレンダーや、組織のリソースカレンダー(会議室予約など)も、権限があれば同様に操作可能です。
QGoogleカレンダーの繰り返しイベントもGASで作れますか?
Aはい、createEventSeries() メソッドを使うと、繰り返しルール(毎週月曜・毎月第1火曜など)を指定したイベントシリーズを作成できます。ただし、繰り返しイベントの個別変更はGASからは制御が複雑になるため、単純な繰り返しに留めるのが無難です。
QGASでGoogleカレンダーと他のツール(Slack・LINE等)を連携できますか?
AUrlFetchAppを使ってSlack・Chatwork・LINEのAPIを呼び出すことで連携できます。たとえば、翌日の予定をGASが取得してSlackチャンネルに自動投稿するといった仕組みも実装可能です。GASでSlack通知を自動送信する方法も参考にしてください。
まとめ
この記事のポイント
- GASの CalendarApp を使えばGoogleカレンダーの予定作成・取得・削除・通知をコードで自動化できる
- Googleフォームと組み合わせると、顧客の予約受付からカレンダー登録・確認メール送信まで全自動化できる
- 重複チェック・リマインダー送信など、手動では抜けが出やすい処理もGASで確実に自動化できる
- 本番運用前はテスト用カレンダーで必ず動作確認を行う
- SlackやLINEなど他のツールとも連携でき、通知の自動化まで一括で実現できる
GoogleカレンダーAPIの基礎を押さえたら、次は他の外部サービスとの連携にも応用できます。GASで汎用的な外部API連携を実装する方法を理解しておくと、Slack・ChatGPT・CRMなど、自動化の幅がさらに広がります。
※本記事の情報は2026年4月時点のものです。