【保存版】GASでGoogleカレンダーの空き時間を自動抽出する方法|初心者でもできるステップ解説!

「打ち合わせ調整のたびに、空き時間を手作業で探すのが面倒!」
「チーム全員の空き時間を一発で把握したい!」

そんな悩みを解決するのが、Google Apps Script(GAS)を使ったGoogleカレンダー空き時間の自動抽出です!

この記事では、初心者でも簡単にできる
GASを使ってカレンダーの予定を取得し、空き時間を自動的に抽出する方法をサンプルコード付きで詳しく解説します!

これを読めば、日程調整のストレスから解放されるスマートなスケジュール管理が今日から実現できます!


1. なぜGASで空き時間を自動抽出すべきなのか?

日程調整は意外と工数がかかる作業です。

  • 何度もカレンダーを開いて空きを確認

  • 候補日をいくつも送る

  • 全員の返信を待って再調整

これを手作業で繰り返すと、
本来の業務に集中できなくなるリスクがあります。

GASで空き時間を自動抽出できれば、

  • 自分やチームメンバーのスケジュールを即把握

  • 候補日リストをワンクリックで生成

  • 日程調整を圧倒的に効率化

できるため、
時間を最大限有効活用できるようになります!


2. 【準備編】必要なもの

  • Googleアカウント

  • Googleカレンダー(個人用または共有カレンダー)

  • Google Apps Script(GAS)

これだけあれば、無料&すぐに始められます!


3. 【設計編】空き時間自動抽出の基本フロー

まずは、ざっくり流れを押さえましょう。

■ 基本フロー

  1. 指定期間(例:1週間)のカレンダー予定を取得

  2. 予定が入っていない時間帯を検出

  3. 空き時間リストをスプレッドシートに出力

  4. 必要に応じてメール送信やチャット通知も可能

これだけで、
人間の作業ゼロで空き時間リストが完成します!


4. 【基本編】GASで空き時間抽出ツールを作る手順

さっそく実装していきましょう!


ステップ① Apps Scriptエディタを開く

Googleスプレッドシート上で
「拡張機能」→「Apps Script」→「新しいプロジェクト作成」


ステップ② サンプルスクリプトを書く

【基本版】カレンダー予定をチェックして空き時間を抽出

function extractAvailableTimes() {
  const calendarId = 'primary'; // 'primary' は自分のカレンダー。共有カレンダーIDでも可。
  const calendar = CalendarApp.getCalendarById(calendarId);
  
  const now = new Date();
  const oneWeekLater = new Date();
  oneWeekLater.setDate(now.getDate() + 7);

  const events = calendar.getEvents(now, oneWeekLater);
  
  // 稼働時間設定(9時〜18時)
  const workingHoursStart = 9;
  const workingHoursEnd = 18;
  
  let slots = [];
  let currentTime = new Date(now);

  // 1日単位でループ
  while (currentTime < oneWeekLater) {
    let dayStart = new Date(currentTime);
    dayStart.setHours(workingHoursStart, 0, 0, 0);
    
    let dayEnd = new Date(currentTime);
    dayEnd.setHours(workingHoursEnd, 0, 0, 0);

    let dayEvents = events.filter(event => 
      event.getStartTime().getDate() === currentTime.getDate()
    );
    
    if (dayEvents.length === 0) {
      slots.push([dayStart, dayEnd]);
    } else {
      let pointer = dayStart;
      
      dayEvents.sort((a, b) => a.getStartTime() - b.getStartTime());
      
      dayEvents.forEach(event => {
        const eventStart = event.getStartTime();
        const eventEnd = event.getEndTime();
        
        if (pointer < eventStart) {
          slots.push([pointer, eventStart]);
        }
        
        pointer = eventEnd > pointer ? eventEnd : pointer;
      });
      
      if (pointer < dayEnd) {
        slots.push([pointer, dayEnd]);
      }
    }

    currentTime.setDate(currentTime.getDate() + 1);
    currentTime.setHours(0, 0, 0, 0);
  }

  // スプレッドシート出力
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.clear();
  sheet.appendRow(['開始時刻', '終了時刻']);
  
  slots.forEach(slot => {
    sheet.appendRow([
      Utilities.formatDate(slot[0], Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm'),
      Utilities.formatDate(slot[1], Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm')
    ]);
  });
}

このスクリプトを実行すると、

  • 直近1週間のカレンダーをスキャン

  • 営業時間内の空き時間だけリストアップ

  • スプレッドシートに自動出力

が一発でできます!


5. 【応用編】さらに進化できる空き時間管理術!


✅ チーム全員の空き時間をマージして「共通空き時間」を抽出

複数カレンダーを横断して、
「全員が空いている時間帯」だけを抽出することも可能!


✅ 希望時間帯(例:30分以上空いている枠のみ)で絞り込む

小さな隙間時間ではなく、
「まとまった時間だけ」を抽出して、効率的なスケジュール調整ができる!


✅ 空き時間一覧をSlack・Chatworkに自動投稿

GAS+Webhook連携で、
「今日の空き時間リスト」をチャット通知することも可能!


6. 【運用編】空き時間自動抽出を安定運用するコツ


✔️ トリガー設定で定期実行

毎朝7時に自動抽出 → 最新の空き時間リストをスプレッドシートに反映!


✔️ イレギュラーな予定にも対応

急な打ち合わせ追加などに備えて、
1日2回(朝・昼)スクリプト実行して、柔軟な空き時間更新もおすすめ!


✔️ イベントの重複・キャンセル処理も考慮

取得時にイベントのステータス(仮確定/キャンセル)をチェックして、
確定予定だけ空き時間判定するのがベター!


7. まとめ|GASでGoogleカレンダーの空き時間を自動抽出して、日程調整のストレスから解放されよう!

GASを使えば、

  • 自分やチームのカレンダーを自動スキャン

  • 空き時間を即座にリスト化

  • 日程調整を超効率化

という、最強のスケジュール管理環境が誰でも作れます!

まずはこの記事のサンプルコードを動かして、
「1週間分の空き時間抽出」から始めてみてください!

慣れてきたら、

  • チーム横断型空き時間マージ

  • リアルタイムSlack通知

  • 会議予約フォーム連携

など、さらにプロフェッショナルな自動化にも挑戦できます!

Shop now