Bolt.newなどから予定を操作するためにGASを作成しました。

/**
 * カレンダーの取得
 * - リクエストで「date」パラメータ指定(無ければ当日)
 * - その日から1か月先までの全イベントを取得し、
 * - イベントの前後30分をバッファにして[
 *     { title: "予定あり", start: ..., end: ... }
 *   ]形式で返す
 */
function doGet(e) {
  var targetDate = e.parameter.date || (new Date()).toISOString().slice(0,10); // YYYY-MM-DD
  var calendar = CalendarApp.getDefaultCalendar();
  var start = new Date(targetDate);
  var end = new Date(start);
  end.setMonth(end.getMonth() + 1);

  var events = calendar.getEvents(start, end);
  var eventList = [];
  for (var i = 0; i < events.length; i++) {
    var ev = events[i];
    var evStart = new Date(ev.getStartTime().getTime() - 30 * 60000);
    var evEnd = new Date(ev.getEndTime().getTime() + 30 * 60000);
    eventList.push({
      title: "予定あり",
      start: evStart.toISOString(),
      end: evEnd.toISOString()
    });
  }
  return ContentService.createTextOutput(JSON.stringify(eventList))
    .setMimeType(ContentService.MimeType.JSON);
}

/**
 * 予定の追加
 * - start, end, title に加え、
 * - company, name, email の情報をリクエストパラメータで受け取り
 * - 詳細(description)欄にまとめて追記する
 */
function doPost(e) {
  var start = new Date(e.parameter.start);
  var end   = new Date(e.parameter.end);
  var title = e.parameter.title || "新しい予定";

  var company = e.parameter.company || "";
  var name = e.parameter.name || "";
  var email = e.parameter.email || "";

  var description = "会社名: " + company + "\n" +
                    "氏名: " + name + "\n" +
                    "メールアドレス: " + email;

  var calendar = CalendarApp.getDefaultCalendar();
  calendar.createEvent(title, start, end, {description: description});

  // 送信元メールアドレス(ご自身のメールアドレスに変更してください)
  var myEmail = "your-email@example.com";

  // メール件名
  var subject = "予約完了のお知らせ";

  // メール本文(予約内容の概要を記載)
  var body = "以下の内容で予約が完了しました。\n\n" +
             "タイトル: " + title + "\n" +
             "開始日時: " + start.toLocaleString("ja-JP") + "\n" +
             "終了日時: " + end.toLocaleString("ja-JP") + "\n\n" +
             "会社名: " + company + "\n" +
             "氏名: " + name + "\n" +
             "メールアドレス: " + email + "\n\n" +
             "ご確認ください。";

  // 自分にメール送信
  GmailApp.sendEmail(myEmail, subject, body);

  // 予約者のメールアドレスにも送信(空文字や無効なアドレスでない場合)
  if (email && email.indexOf("@") > 0) {
    GmailApp.sendEmail(email, subject, body);
  }

  return ContentService.createTextOutput(JSON.stringify({
    result: "予定を追加し、メールを送信しました",
    detail: {
      start: start.toISOString(),
      end: end.toISOString(),
      title: title,
      company: company,
      name: name,
      email: email
    }
  })).setMimeType(ContentService.MimeType.JSON);
}


例えばフロントエンドからJavaScriptで操作する場合のサンプル

1.予定の取得

// 例: 2025-08-19を基準日付に予定を取得
const deployUrl = "https://script.google.com/macros/s/【ここにデプロイID】/exec";
const params = new URLSearchParams({ date: "2025-08-19" }); // date=YYYY-MM-DD

fetch(`${deployUrl}?${params.toString()}`)
  .then(response => response.json())
  .then(data => {
    // dataは [{title, start, end}, ...] の予定リスト
    console.log(data);
  })
  .catch(error => {
    console.error("取得エラー:", error);
  });

2.予定の追加

// 新規予定 {開始, 終了, イベント名} を追加
const deployUrl = "https://script.google.com/macros/s/【ここにデプロイID】/exec";
const postParams = new URLSearchParams({
start: "2025-08-20T14:00:00+09:00",
end: "2025-08-20T15:00:00+09:00",
title: "打ち合わせ"
});

fetch(deployUrl, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
body: postParams.toString()
})
.then(response => response.json())
.then(data => {
// dataは { result: "予定を追加しました" }
console.log(data);
})
.catch(error => {
console.error("追加エラー:", error);
});

カテゴリー: 未分類