カレンダーの空き時間を自動取得して予約受付

カレンダーの空き時間を自動取得して予約受付
はじめに:予約受付の効率化は経営の肝
こんにちは、GASおじです。中小企業の経営者やフリーランスの皆さん、予約管理って意外と手間じゃないですか?電話やメールでやり取りしてると時間もコストもかかるし、ミスも起こりがち。そこで今回はGoogleカレンダーの空き時間を自動で取得して、効率的に予約受付を行う方法を紹介します。
GAS(Google Apps Script)を使えば、追加の専用SaaS料金なし、Googleアカウントの利用枠内で予約システムを作れます。ただしquotaや実行上限はあるので適宜注意してくださいね。おじさんが実務で使える形にこだわってコード例も用意しました。
予約システムの概要
今回の仕組みはこうです。
- Googleカレンダーから指定期間の空き時間を取得
- 空き時間を新しい日時付きスプレッドシートに書き出し
- そこから予約フォームや受付システムと連携可能
- 既存のデータは上書きしない、バックアップと誤操作防止を重視
- 入力検証やbatch writeで効率的に書き込み
このシステムのポイントは、カレンダーの情報を直接書き換えず、「新しいスプレッドシートに空き時間リストを吐き出す」方式にしていること。これで誤って既存データを消すリスクを避けています。
初期設定と必要権限
まずGoogle Apps Scriptを使うための初期設定です。
- Googleアカウントにログインし、Googleドライブで新しいGASプロジェクトを作成します。
- スクリプトでGoogleカレンダーAPIにアクセスできるように、「カレンダー」サービスを有効化してください。
- 実行時にカレンダーへの読み取り権限とスプレッドシート作成権限が求められます。承認を忘れずに。
- 予約受付を定期的に自動実行したい場合は、**installable trigger(時間主導型トリガー)**を設定してください。
- 取り扱う情報は個人情報に当たる場合があります。Googleのポリシーに従い適切に管理しましょう。
- もし誤操作が起きた場合は、作成されたスプレッドシートのバージョン履歴やGoogleドライブのバックアップ機能で復元してください。
空き時間取得とスプレッドシート出力のコード例
以下は、Googleカレンダーの予定を取得し、空き時間を新規スプレッドシートに書き出すGASコードです。既存のシートは変更せずに新しいファイルを作成する点に注目してください。
function exportCalendarAvailability() {
const calendarId = 'primary'; // 対象カレンダーID。'primary'は自分のメインカレンダー
const now = new Date();
const rangeStart = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 9); // 9時開始
const rangeEnd = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 7, 18); // 1週間後18時まで
// まず予定を取得
const events = CalendarApp.getCalendarById(calendarId).getEvents(rangeStart, rangeEnd);
// 予約受付可能時間帯(9時〜18時)を1時間ごとに区切って空き時間を判定
const slots = [];
let slotStart = new Date(rangeStart);
while (slotStart < rangeEnd) {
const slotEnd = new Date(slotStart.getTime() + 60 * 60 * 1000); // 1時間後
// この時間帯に予定があるかチェック
const isBusy = events.some(event => {
return event.getStartTime() < slotEnd && event.getEndTime() > slotStart;
});
if (!isBusy) {
slots.push({
start: new Date(slotStart),
end: new Date(slotEnd)
});
}
slotStart = slotEnd;
}
// 新しいスプレッドシートを作る(日時付き名前)
const ssName = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss') + '_空き時間リスト';
const ss = SpreadsheetApp.create(ssName);
const sheet = ss.getActiveSheet();
// ヘッダー書き込み
sheet.getRange(1, 1, 1, 2).setValues([['開始日時', '終了日時']]);
// 空き時間を書き込み(batch write)
const values = slots.map(slot => [
Utilities.formatDate(slot.start, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm'),
Utilities.formatDate(slot.end, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm')
]);
if(values.length > 0) {
sheet.getRange(2, 1, values.length, 2).setValues(values);
}
Logger.log(`空き時間リストを作成しました: ${ss.getUrl()}`);
}
ポイント
- 既存のカレンダーやスプレッドシートは操作せず、新規ファイル作成で結果を保存。
- 1時間単位で空き時間を判定。必要に応じて分単位のスロットに変更可能。
- batch writeで複数セルをまとめて書き込み、処理負荷を軽減。
- 入力検証として、時間帯の範囲を固定し、予定がかぶるかどうかを厳密に判定。
コスト削減の仮定と計算例
たとえば、予約受付にかかっていた電話対応や手動メール返信に1件あたり5分かかっていたとします。1日10件、月20営業日で計算すると、
5分 × 10件 × 20日 = 1000分 = 約17時間/月
時給2000円のスタッフが対応していた場合、
17時間 × 2000円 = 34,000円/月
この時間が半減すれば、17,000円の時間コスト削減が見込めます。もちろん実際の効果は環境により異なりますが、GASで自動化することでこのような工数削減が期待できます。
個人情報の取り扱いと復元手順
空き時間データはカレンダーの予定情報を元に作成します。個人の予定や顧客データが含まれる場合は、Googleの個人情報保護方針に沿って管理してください。スプレッドシートはGoogleドライブ上に保存され、アクセス権限を適切に設定しましょう。
誤ってファイルを削除してしまった場合でも、Googleドライブの「ゴミ箱」から復元可能です。また、スプレッドシートにはバージョン履歴機能があり、過去の状態に戻せます。削除APIを使わない設計なので、元データの消失リスクは低減されています。
まとめと次のステップ
今回はGoogleカレンダーの空き時間を自動取得して、新しいスプレッドシートに書き出すGASスクリプトを紹介しました。これをベースに、
- フォーム連携で予約受付を自動化
- Slack通知やメール送信と組み合わせ
- 複数カレンダー対応や空き時間の細分化
など、業務に合わせてカスタマイズ可能です。
Googleアカウントの利用枠内で追加の専用SaaS料金なしで使えますが、Apps Scriptのquotaや実行上限には注意してくださいね。
もっと実践的なGASツールやテンプレートが欲しい方は、ぜひこちらからメンバーシップに参加してみてください。