GAS業務自動化 |

GASでGoogleカレンダーを操作する方法|予約管理の自動化

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など、自動化の幅がさらに広がります。

吉元大輝

よしもとひろき

株式会社BoostX 代表取締役社長

中小企業の生成AI導入を支援する「生成AI伴走顧問」サービスを提供。業務可視化から定着支援まで、一気通貫で企業のAI活用を推進している。

※本記事の情報は2026年4月時点のものです。

SNSで共有する
無料個別相談

貴社の業務に、 AIという確かな選択肢を。

「何から始めればいいか分からない」という段階でも構いません。現状の課題を伺い、最適な導入計画をプロと一緒に整理します。

\ 専門家による30分のヒアリング /

無料相談を予約する

オンライン対応可能・強引な勧誘なし

まずは資料で情報収集したい方へ

サービス概要・料金・導入事例をまとめた資料を無料でお送りします。

資料をダウンロード