Google Workspace2026-07-03

【生産性向上】会議室や社内備品予約の自動調整:Google Calendar APIを使用したスマート予約エンジンの構築


会議室や社内備品の「予約・管理」に潜む時間の無駄

社内の会議室や、貸出用のノートPC、社用車といった共有リソースの「予約管理」。Googleカレンダーで管理している企業は多いですが、以下のような非効率な場面が繰り返し発生していないでしょうか。

  1. ダブルブッキングの発生: 予定の調整中に複数の人が同時に同じ会議室をカレンダーに入れようとして重複してしまう。
  2. 予約忘れと空き室の無駄(幽霊会議室): 会議自体がキャンセルになったにもかかわらず、Googleカレンダーから予約が消されておらず、誰も使っていない空き室が「予約済み」のまま放置される。
  3. カレンダー画面を開く手間の多さ: 社外とのアポ調整や、チャットツールでの会話中に、わざわざGoogleカレンダーの別ウィンドウを開き、空き状況を確認して予約登録を行う。

これらの問題は、チャットツール(DiscordやSlackなど)と Google Calendar API を連携させた自動調整ボットを構築することで完全に解消できます。チャット内の会話やボタン操作をトリガーにして、API経由でリアルタイムにリソースの空き状況をスキャンし、即時に予約をロックします。


2. 課題解決のビフォー・アフター

項目 手作業による予約・調整(Before) API自動連携ボット(After)
予約の手間 Googleカレンダーを開いて手動入力 チャット上で「/book 会議室A 14:00」と入力するだけで完了
重複予約 同時編集時に上書き競合が発生するリスク APIの競合チェック処理で重複を完全にブロック
空予約対策 キャンセル時の予約削除漏れが慢性化 開始時間になっても利用開始ボタンが押されない場合自動解放
スケジュール調整 カレンダーを見比べて空き時間を探す手作業 APIが全員の空き時間を検索して最適時間を自動提案

3. 具体的な実装例:Google Calendar APIを用いた会議室の空き確認と自動予約

サービスアカウントを使用してGoogleカレンダーの特定リソース(会議室)の空き時間をチェックし、空いていれば予約を自動で入れる TypeScript コード例です。

import { google } from "googleapis";

const SCOPES = ["https://www.googleapis.com/auth/calendar"];
const auth = new google.auth.GoogleAuth({
  credentials: {
    client_email: process.env.GOOGLE_CLIENT_EMAIL,
    private_key: process.env.GOOGLE_PRIVATE_KEY?.replace(/\\n/g, "\n"),
  },
  scopes: SCOPES,
});

const calendar = google.calendar({ version: "v3", auth });

export async function checkAndBookResource(
  calendarId: string, // 会議室のリソースカレンダーID
  startTime: string,  // ISO8601フォーマット
  endTime: string,    // ISO8601フォーマット
  summary: string
) {
  try {
    // 1. 指定時間の空き状況(Free/Busy)をスキャン
    const checkResponse = await calendar.freebusy.query({
      requestBody: {
        timeMin: startTime,
        timeMax: endTime,
        items: [{ id: calendarId }],
      },
    });

    const busyTimes = checkResponse.data.calendars?.[calendarId]?.busy || [];

    if (busyTimes.length > 0) {
      console.log("Resource is busy during the requested time slot.");
      return { success: false, message: "指定された時間はすでに他の予約が入っています。" };
    }

    // 2. 空いている場合は新規イベント(予約)を登録
    const eventResponse = await calendar.events.insert({
      calendarId,
      requestBody: {
        summary: summary,
        start: { dateTime: startTime, timeZone: "Asia/Tokyo" },
        end: { dateTime: endTime, timeZone: "Asia/Tokyo" },
      },
    });

    console.log(`Event created: ${eventResponse.data.id}`);
    return {
      success: true,
      eventId: eventResponse.data.id,
      link: eventResponse.data.htmlLink,
    };
  } catch (error) {
    console.error("Calendar automation failed:", error);
    throw error;
  }
}

4. HadayaLabの社内BPR・ナレッジインテグレーション

HadayaLabでは、日々の無駄な調整時間を削減し、メンバーが本来の業務に集中できるスマートなオフィス環境の構築をサポートしています。

  • チャット連携ボットの構築: SlackやDiscordからGoogleカレンダー、Zoom、Google MeetのURL生成をシームレスに行うカスタムコマンド開発。
  • リソースマネジメントのダッシュボード: 会議室の利用率や社内備品の稼働状況を可視化し、無駄なオフィスコストの削減に貢献。
  • Google Workspace APIコンサルティング: アカウント管理やメール転送ルールなど、全社規模の自動化・ポリシー適用代行。

「社内のカレンダー調整や会議室予約の管理をもっとスムーズにしたい」というオフィス責任者の方は、ぜひHadayaLabのスマートBPRプランをご相談ください。