こんにちは、GASおじです。今回は、Google Apps Script(以下GAS)を使ってGoogleカレンダーの空き時間を自動でチェックし、中小企業の経営者やフリーランスの皆さんのスケジュール管理を手助けする方法を紹介するよ。
忙しい経営者やフリーランスの方にとって、スケジュール調整は頭の痛い問題。GASを使えば、Googleカレンダーの情報を自動で取得し、空き時間を抽出して別ファイルにまとめることができる。これで、無駄なやりとりを減らし、業務効率化に繋がるはずだ。
この記事では、実際に動く具体的なコード例を示しつつ、既存データの保護や入力検証、バッチ書き込み、バックアップや復元方法まで解説する。もちろん、Googleアカウントの利用枠内で追加の専用SaaS料金なし(Apps Scriptのquota・実行上限あり)で実現可能だ。
■ 初期設定と必要権限
まずはスクリプトを動かすための初期設定から。GASのプロジェクトを作成し、GoogleカレンダーAPIの利用を有効にしよう。手順は以下の通りだ。
・Google Apps Script にアクセスし、新規プロジェクトを作成。
・メニューの「サービス」から「Google カレンダー API」を追加。
・スクリプトエディタのメニュー「編集」→「現在のプロジェクトのトリガー」から、必要に応じてinstallable trigger(時間主導型など)を設定。
このスクリプトはGoogleカレンダーの読み取り権限が必要になるため、初回実行時に認証を求められる。プライバシーに配慮し、個人情報はスクリプト内で扱うが、外部に送信したり保存したりしない運用を心がけてほしい。
■ カレンダー空き時間チェックの流れ
今回のスクリプトは、
・期間を指定してGoogleカレンダーのイベントを取得
・既存の空き時間情報は新規ファイル(スプレッドシート)に出力し、既存データを上書きしない
・取得データの妥当性をチェック
・バッチ処理で効率的に書き込み
・バックアップも同時に作成し、必要なら復元が可能
という方針で進める。
■ 実際のコード例
以下のコードは、指定期間のカレンダーイベントを取得し、空き時間を計算した結果を新しいスプレッドシートに書き出す例だ。既存ファイルは更新しないので安心して使える。
function checkCalendarFreeSlots() {
const calendarId = 'primary'; // 変更可。特定カレンダーのIDも指定可能
const now = new Date();
const startTime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 9, 0, 0); // 当日9時開始
const endTime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 18, 0, 0); // 当日18時まで
// 入力検証
if (startTime >= endTime) {
throw new Error('開始時間は終了時間より前である必要があります');
}
// 期間内のイベントを取得
const events = Calendar.Events.list(calendarId, {
timeMin: startTime.toISOString(),
timeMax: endTime.toISOString(),
singleEvents: true,
orderBy: 'startTime'
}).items;
// 空き時間計算のための初期設定
let freeSlots = [];
let cursor = startTime;
// イベントの開始・終了を使って空き時間を算出
for (let event of events) {
let eventStart = new Date(event.start.dateTime || event.start["date"]);
let eventEnd = new Date(event.end.dateTime || event.end["date"]);
// イベント開始前に空き時間がある場合
if (cursor < eventStart) {
freeSlots.push({ start: new Date(cursor), end: new Date(eventStart) });
}
// cursorをイベント終了時間に更新(後のイベントと比較)
if (eventEnd > cursor) {
cursor = eventEnd;
}
}
// 最後のイベント終了後の空き時間も追加
if (cursor < endTime) {
freeSlots.push({ start: new Date(cursor), end: new Date(endTime) });
}
if (freeSlots.length === 0) {
Logger.log('指定期間中に空き時間はありません。');
}
// 新規スプレッドシート作成(既存データは変更しない)
const spreadsheet = SpreadsheetApp.create('カレンダー空き時間_' + Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss'));
const sheet = spreadsheet.getActiveSheet();
// ヘッダ設定
const header = [['開始日時', '終了日時', '空き時間(分)']];
sheet.getRange(1, 1, 1, header[0].length).setValues(header);
// バッチ用データ作成
const rows = freeSlots.map(slot => {
const start = Utilities.formatDate(slot.start, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm');
const end = Utilities.formatDate(slot.end, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm');
const diffMinutes = Math.round((slot.end - slot.start) / 60000);
return [start, end, diffMinutes];
});
// 一括書き込み
if (rows.length > 0) {
sheet.getRange(2, 1, rows.length, rows[0].length).setValues(rows);
}
Logger.log('空き時間データを新規スプレッドシートに出力しました: ' + spreadsheet.getUrl());
// バックアップとしてスプレッドシートのコピーをDrive内に保存(復元用)
// 実際の環境に合わせて保存先フォルダIDを指定してください
const backupFolderId = 'YOUR_BACKUP_FOLDER_ID'; // ここは適宜変更
try {
const backupFolder = DriveApp.getFolderById(backupFolderId);
const backupFile = DriveApp.getFileById(spreadsheet.getId()).makeCopy('バックアップ_' + spreadsheet.getName(), backupFolder);
Logger.log('バックアップファイルを作成しました: ' + backupFile.getUrl());
} catch (e) {
Logger.log('バックアップ作成に失敗しました: ' + e.message);
}
}
■ installable triggerと復元手順
このスクリプトは定期的に実行すると便利なので、GASのinstallable triggerを設定してみよう。例えば、毎朝9時に空き時間をチェックし、レポートを自動生成するイメージだ。
・スクリプトエディタの「編集」→「現在のプロジェクトのトリガー」を開く。
・「トリガーを追加」をクリック。
・関数に checkCalendarFreeSlots を選択。
・イベントの種類で「時間主導型」→「日付ベースのタイマー」→「午前9時~10時」を選択して保存。
復元が必要な場合は、バックアップ用フォルダに保存されているスプレッドシートのコピーからデータを取り戻せる。スプレッドシートのファイルを開き、内容を元に戻す作業を行うと良いだろう。
■ コスト削減の考え方(仮定と計算式)
GASおじとしては、こうした自動化は「時間=コスト」の削減に直結すると考えている。例えば、
・1回のスケジュール調整にかかる手間:15分
・1ヶ月の調整回数:10回
・時給換算:2,000円
と仮定すると、
15分 × 10回 = 150分 = 2.5時間
2.5時間 × 2,000円 = 5,000円/月
の時間コストが削減可能になる計算だ。もちろん、この数字はあくまで例なので、実際の環境に合わせて見積もってほしい。
□ まとめ
・Googleカレンダーの空き時間をGASで自動取得し、別スプレッドシートに出力する方法
・既存データは消さず、新規ファイルに書き出すので安全
・入力検証やバッチ書き込み、バックアップ・復元の仕組みも組み込み済み
・Googleアカウントの利用枠内で追加の専用SaaS料金なし(Apps Scriptのquota・実行上限あり)
・installable triggerで定期実行も可能
これでスケジュール調整の無駄なやりとりが減り、時間効率化の一助になるはずだよ。ぜひ試してみてくれ。
■ GASの相談や導入サポートを見たい方へ
この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。
■ 関連サービス
GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。