0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Calendar with ChatGPT

Posted at

google calendar, google form, google drive, google colabの連携例をお示しください。

ChatGPT:

もちろんです。Google系サービス(Calendar, Form, Drive, Colab)を組み合わせると、自動化やデータ収集・分析の効率化が可能です。以下に具体例を示します。

  1. 連携のシナリオ例
    目的:
    社員研修のアンケートフォームをGoogle Formで作成 → 回答をGoogle Sheetに保存 → 自動集計 → 結果に基づきGoogle Calendarにイベントを登録 → Colabでデータ分析
  2. Google Form → Google Drive → Colab
    手順例:
    Google Formを作成
    質問: 氏名、参加希望日、意見など
    回答の保存先: Google Sheet(Drive上に保存)
    Colabで回答データを分析
import pandas as pd

# Google Sheetを読み込み
sheet_url = 'https://docs.google.com/spreadsheets/d/XXX/edit#gid=0'
csv_url = sheet_url.replace('/edit#gid=', '/export?format=csv&gid=')
df = pd.read_csv(csv_url)

# データ集計例
attendance_count = df['参加希望日'].value_counts()
print(attendance_count)
  1. Google Sheet → Google Calendar
    目的: 集計結果から自動的にイベント登録
    Google Calendar APIを有効化
    Google Cloud ConsoleでCalendar APIを有効化
    サービスアカウントキーを取得
    Colabからイベント登録
from google.oauth2 import service_account
from googleapiclient.discovery import build
import datetime

# サービスアカウント認証
SCOPES = ['https://www.googleapis.com/auth/calendar']
SERVICE_ACCOUNT_FILE = 'service_account.json'

credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)

service = build('calendar', 'v3', credentials=credentials)

# 例: 参加希望日ごとにイベント作成
for date_str, count in attendance_count.items():
    event_date = datetime.datetime.strptime(date_str, "%Y-%m-%d")
    event = {
        'summary': f'研修 (参加人数: {count})',
        'start': {'date': event_date.strftime('%Y-%m-%d')},
        'end': {'date': (event_date + datetime.timedelta(days=1)).strftime('%Y-%m-%d')},
    }
    service.events().insert(calendarId='primary', body=event).execute()
  1. Google Driveで資料管理 → Colabで自動処理
    研修資料をDriveにアップロード
    Colabで資料の一覧取得や加工
from google.colab import drive
drive.mount('/content/drive')

import os
files = os.listdir('/content/drive/MyDrive/研修資料')
print(files)
  1. フルフロー例まとめ
    Google Form → Google Sheet (Drive上) → Colabで分析
    ↘ Google Calendarに自動イベント登録
    ↘ Google Drive資料管理と連携
    💡 ポイント
    ColabではDriveマウントやAPI利用で他サービスと自由に連携可能
    フォーム回答のトリガーで自動化したい場合は Google Apps Script が便利
    カレンダー登録はサービスアカウントやOAuth2で認証管理する
    もし希望であれば、Google Apps Scriptを使った「フォーム回答があったら自動でカレンダーに登録」フルスクリプト例も作れます。
    作ってほしいですか?

はい。

ChatGPT:

了解です。では、Google Formの回答をトリガーにして、Google Calendarに自動登録する Google Apps Script(GAS)フル例 を示します。

  1. 前提
    Google Form → 回答はGoogle Sheetに自動保存
    Google Calendarは既存のカレンダーを使用(calendarIdに指定)
  2. GASコード例
    Google Sheetを開き
    メニューから「拡張機能」→「Apps Script」を選択
    以下コードを貼り付け
    // Google Calendar ID(例: primary またはカレンダーのID)
    const CALENDAR_ID = 'primary';

/**

  • フォーム回答トリガー用関数
  • e.values で回答内容を取得
    */
    function onFormSubmit(e) {
    // 送信された回答の配列を取得
    const responses = e.values;
    // 例: フォームの質問順: [タイムスタンプ, 氏名, 参加希望日, コメント]
    const name = responses[1];
    const dateStr = responses[2]; // yyyy-mm-dd形式を想定
    const comment = responses[3];

// 日付をDate型に変換
const startDate = new Date(dateStr);
const endDate = new Date(startDate);
endDate.setDate(startDate.getDate() + 1); // 終日イベント

// Calendarサービス取得
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);

// イベント作成
calendar.createAllDayEvent(${name} 研修参加, startDate, endDate, {
description: comment
});

Logger.log(イベント作成: ${name} - ${dateStr});
}
3. トリガー設定
Apps Script画面で左の「時計マーク(トリガー)」をクリック
「トリガーを追加」
設定
関数: onFormSubmit
イベントの種類: フォーム送信時
保存 → 承認ポップアップに従って認証
4. 動作確認
Google Formに回答
回答に応じて、自動的にGoogle Calendarにイベントが追加される
タイトル: 「氏名 研修参加」
日付: 参加希望日
説明欄: コメント
💡 ポイント
CalendarApp.getCalendarById() で複数カレンダーも指定可能
createEvent() を使えば時間指定イベントも作れる
e.values の配列はフォームの質問順に対応するので、列順に注意
希望であれば、このGASを Google Drive上の資料リンクと自動紐付け するバージョンも作れます。
作りますか?

はい。

ChatGPT:

了解です。では、先ほどの フォーム回答 → カレンダー登録 のスクリプトに Google Driveの資料リンクを自動添付 するバージョンを作ります。

  1. 前提
    フォーム回答の「研修資料希望」欄があり、資料名(Drive上のファイル名)を入力する
    Drive上の資料フォルダは固定(例: 研修資料)
    カレンダーイベントの説明欄に該当資料のリンクを自動追加
  2. GASコード例(Drive連携版)
    // Google Calendar ID(例: primary)
    const CALENDAR_ID = 'primary';
    // Drive上の資料フォルダID
    const DRIVE_FOLDER_ID = 'YOUR_DRIVE_FOLDER_ID';

/**

  • フォーム回答トリガー用関数
  • e.values で回答内容を取得
    */
    function onFormSubmit(e) {
    const responses = e.values;
    // フォーム質問順: [タイムスタンプ, 氏名, 参加希望日, コメント, 資料希望]
    const name = responses[1];
    const dateStr = responses[2];
    const comment = responses[3];
    const requestedDocName = responses[4];

// 日付をDate型に変換
const startDate = new Date(dateStr);
const endDate = new Date(startDate);
endDate.setDate(startDate.getDate() + 1); // 終日イベント

// Driveフォルダから資料リンクを取得
const folder = DriveApp.getFolderById(DRIVE_FOLDER_ID);
let fileLink = '資料が見つかりません';

const files = folder.getFilesByName(requestedDocName);
if (files.hasNext()) {
const file = files.next();
fileLink = file.getUrl();
}

// Calendarサービス取得
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);

// イベント作成(資料リンクを説明欄に追加)
const eventDescription = ${comment}\n資料リンク: ${fileLink};
calendar.createAllDayEvent(${name} 研修参加, startDate, endDate, {
description: eventDescription
});

Logger.log(イベント作成: ${name} - ${dateStr} - ${fileLink});
}
3. 設定手順
フォーム回答シートに新しい列「資料希望」を追加
GAS内の DRIVE_FOLDER_ID を該当フォルダIDに置き換え
トリガー設定(フォーム送信時)を済ませる
認証を許可
4. 動作イメージ
フォーム回答: 「佐藤太郎」「2025-10-15」「コメント」「研修資料A」
カレンダーイベント
タイトル: 佐藤太郎 研修参加
日付: 2025-10-15
説明欄: コメント + 資料リンク: https://drive.google.com/...
💡 ポイント
Driveに同名ファイルが複数ある場合は最初の1件のみリンクを添付
ファイル名はフォーム回答と正確に一致させる必要あり
時間指定イベントにする場合は createEvent(start, end, options) に変更可能
希望であれば、さらに フォーム回答 → カレンダー → Colabで集計 → 自動分析レポート生成 までつなぐ 完全自動化フロー の例も作れます。
作りますか?

google calendarに比べてそれなりに使えるカレンダーを7つ示してください。

ChatGPT:

もちろんです。Google Calendar以外にも、個人利用からビジネス利用まで幅広く使えるカレンダーサービスがあります。ここでは 機能性・連携性・クロスプラットフォーム対応 を基準に7つ挙げます。

  1. Microsoft Outlook Calendar
    特徴: Office 365と統合、メールやTeamsと連携可能
    利点: 企業ユーザーに最適、繰り返し予定や会議招待が簡単
    対応: Web, Windows, Mac, iOS, Android
  2. Apple Calendar (iCloud Calendar)
    特徴: iOS/macOS標準、Apple製品との連携が強力
    利点: Siri連携、デバイス間自動同期
    対応: macOS, iOS, Web (iCloud.com), 他カレンダーの読み込み可
  3. Fantastical
    特徴: Apple環境で人気、自然文入力でイベント作成
    利点: 複数カレンダー統合、天気情報やリマインダーも対応
    対応: macOS, iOS, Web
  4. Zoho Calendar
    特徴: Zohoの業務ツールと統合
    利点: 共有カレンダー、タスク管理、招待メール
    対応: Web, iOS, Android
    ビジネス向き: 小規模チーム向けに便利
  5. Any.do Calendar
    特徴: タスク管理アプリと統合されたカレンダー
    利点: タスクと予定を1画面で管理、リマインダー充実
    対応: Web, iOS, Android, Chrome拡張
  6. Teamup Calendar
    特徴: 複数ユーザーで共有できる柔軟なカレンダー
    利点: メールアカウント不要、色分けでグループ管理
    対応: Web, iOS, Android
    チーム向け: プロジェクトや施設予約管理に最適
  7. TimeTree
    特徴: 共有に特化したカレンダーアプリ
    利点: 家族・友人・チームとの予定共有が簡単、コメントやメモ付き
    対応: Web, iOS, Android
    💡 まとめ
    個人利用なら Apple Calendar, Fantastical, TimeTree が便利
    ビジネス利用なら Outlook, Zoho, Teamup
    タスク統合なら Any.do
    必要であれば、これら7つを Google Calendarと機能・連携面で比較した表 にして一覧化することもできます。
    作りますか?

それぞれのカレンダーのSDK, APIがあればおしえてください。

ChatGPT:

以下に、先に挙げた7つのカレンダーサービスのSDKおよびAPI情報をまとめました。

  1. Microsoft Outlook Calendar
    API: Microsoft Graph APIを使用して、Outlookのカレンダーイベントの作成、取得、更新、削除が可能です。詳細はMicrosoft Graph Calendar APIをご参照ください。
    SDK: 公式のSDKは提供されていませんが、PythonやNode.jsなどの一般的なプログラミング言語で利用可能です。
  2. Apple Calendar (iCloud Calendar)
    API: Apple CalendarはCalDAVプロトコルを使用しており、これを利用することでカレンダーの操作が可能です。詳細はCalDAVとiCloud Calendarの統合をご参照ください。
    SDK: AppleのEventKitフレームワークを使用して、iOSおよびmacOSアプリでカレンダーの操作が可能です。詳細はEventKitドキュメントをご参照ください。
  3. Fantastical
    API: Fantastical自体の公開APIは提供されていませんが、AppleのShortcutsアプリを使用して、Fantasticalとの連携が可能です。詳細はFantasticalとShortcutsの統合をご参照ください。
    SDK: 公式のSDKは提供されていませんが、URLスキームを使用して他のアプリからFantasticalを操作することが可能です。詳細はFantasticalのURLスキームをご参照ください。
  4. Zoho Calendar
    API: Zoho CalendarはRESTfulなAPIを提供しており、カレンダーの操作が可能です。詳細はZoho Calendar APIの紹介をご参照ください。
    SDK: 公式のSDKは提供されていませんが、REST APIを直接利用することで、任意のプログラミング言語からアクセス可能です。
  5. Any.do
    API: Any.doはGoogle Calendar、Outlook、Apple Calendarとの統合を提供しています。詳細はAny.doのカレンダー統合をご参照ください。
    SDK: 公式のSDKは提供されていませんが、Zapierなどの自動化ツールを使用して、他のアプリとの連携が可能です。詳細はZapierとAny.doの統合をご参照ください。
  6. Teamup Calendar
    API: Teamup CalendarはRESTfulなAPIを提供しており、カレンダーの操作が可能です。詳細はTeamup APIの概要をご参照ください。
    SDK: 公式のSDKは提供されていませんが、Pythonなどのプログラミング言語からREST APIを利用することが可能です。
  7. TimeTree
    API: TimeTreeは2023年12月22日をもってAPIの提供を終了しました。詳細はTimeTree APIの終了通知をご参照ください。
    SDK: 公式のSDKは提供されていませんが、API終了に伴い、現在は利用できません。
    まとめ
    Microsoft Outlook Calendar: Microsoft Graph APIを使用して、カレンダーの操作が可能です。
    Apple Calendar: CalDAVプロトコルを使用して、カレンダーの操作が可能です。
    Fantastical: ShortcutsアプリやURLスキームを使用して、他のアプリとの連携が可能です。
    Zoho Calendar: RESTfulなAPIを提供しており、カレンダーの操作が可能です。
    Any.do: Google Calendar、Outlook、Apple Calendarとの統合を提供しています。
    Teamup Calendar: RESTfulなAPIを提供しており、カレンダーの操作が可能です。
    TimeTree: APIの提供は終了しました。
    各サービスのAPIやSDKを利用することで、カレンダー機能をアプリケーションに組み込むことが可能です。具体的な実装方法についてさらに詳しく知りたい場合は、お気軽にお尋ねください。
    あなた:
    それぞれサンプルソースをお示しください。
    ChatGPT:
    もちろんです。ここでは、先ほど挙げた 6つのカレンダー(TimeTreeはAPI終了のため除外) に対して、簡単な API/SDK利用サンプルコード を示します。言語は Python で統一しています。
  8. Microsoft Outlook Calendar (Microsoft Graph API)
    import requests

ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN'
calendar_endpoint = 'https://graph.microsoft.com/v1.0/me/events'

event_data = {
"subject": "研修参加",
"start": {"dateTime": "2025-10-15T09:00:00", "timeZone": "Asia/Tokyo"},
"end": {"dateTime": "2025-10-15T17:00:00", "timeZone": "Asia/Tokyo"},
"body": {"contentType": "HTML", "content": "コメント"}
}

headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/json"
}

response = requests.post(calendar_endpoint, json=event_data, headers=headers)
print(response.json())
2. Apple Calendar (CalDAV)
from caldav import DAVClient
from caldav.elements import dav, cdav
from datetime import datetime, timedelta

client = DAVClient('https://caldav.icloud.com/', username='YOUR_APPLE_ID', password='YOUR_APP_SPECIFIC_PASSWORD')
principal = client.principal()
calendars = principal.calendars()
calendar = calendars[0]

start = datetime(2025, 10, 15, 9, 0)
end = start + timedelta(hours=8)
event = calendar.save_event(f"""
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
SUMMARY:研修参加
DTSTART:{start.strftime('%Y%m%dT%H%M%S')}
DTEND:{end.strftime('%Y%m%dT%H%M%S')}
DESCRIPTION:コメント
END:VEVENT
END:VCALENDAR
""")
print("イベント作成完了")
3. Fantastical (URLスキーム / macOSのみ)
Fantasticalには公式APIはありませんが、URLスキームでイベント作成が可能です。
import webbrowser

event_title = "研修参加"
event_date = "2025-10-15"
event_note = "コメント"

url = f"fantastical://x-callback-url/add?title={event_title}&date={event_date}&notes={event_note}"
webbrowser.open(url)
macOS / iOSでFantasticalを開いてイベント作成
4. Zoho Calendar (REST API)
import requests

ACCESS_TOKEN = 'YOUR_ZOHO_ACCESS_TOKEN'
calendar_id = 'primary'
url = f'https://calendar.zoho.com/api/v1/calendars/{calendar_id}/events'

event_data = {
"subject": "研修参加",
"start_datetime": "2025-10-15T09:00:00+09:00",
"end_datetime": "2025-10-15T17:00:00+09:00",
"description": "コメント"
}

headers = {
"Authorization": f"Zoho-oauthtoken {ACCESS_TOKEN}",
"Content-Type": "application/json"
}

response = requests.post(url, json=event_data, headers=headers)
print(response.json())
5. Any.do (Zapier経由のGoogle Calendar操作例)
Any.do公式APIは非公開ですが、Zapier経由でGoogle Calendarと連携可能です。PythonからZapier Webhookを呼び出してイベントを作る例:
import requests

WEBHOOK_URL = 'YOUR_ZAPIER_WEBHOOK_URL'

payload = {
"title": "研修参加",
"start": "2025-10-15T09:00:00",
"end": "2025-10-15T17:00:00",
"notes": "コメント"
}

response = requests.post(WEBHOOK_URL, json=payload)
print(response.status_code, response.text)
Zapier側でGoogle Calendarアクションに紐付ける
6. Teamup Calendar (REST API)
import requests

API_KEY = 'YOUR_TEAMUP_API_KEY'
CALENDAR_KEY = 'YOUR_TEAMUP_CALENDAR_KEY'
url = f'https://api.teamup.com/{CALENDAR_KEY}/events'

event_data = {
"title": "研修参加",
"start_dt": "2025-10-15T09:00:00",
"end_dt": "2025-10-15T17:00:00",
"description": "コメント"
}

headers = {
"Teamup-Token": API_KEY,
"Content-Type": "application/json"
}

response = requests.post(url, json=event_data, headers=headers)
print(response.json())
💡 ポイントまとめ
サービス API/SDK メモ
Microsoft Outlook Microsoft Graph API REST、Pythonなどで直接利用可能
Apple Calendar CalDAV / EventKit iOS/macOS専用、PythonはCalDAV経由
Fantastical URLスキーム APIなし、macOS/iOS限定
Zoho Calendar REST API OAuth認証必須
Any.do Zapier経由Webhook 公式APIなし、外部自動化ツール利用
Teamup Calendar REST API シンプルなPOSTでイベント作成可能
もし希望であれば、これらの カレンダーAPIをまとめて「フォーム回答 → 各カレンダー自動登録」Pythonスクリプト例 も作成できます。
作りますか?

あなた:
はい。
ChatGPT:
了解です。では、先ほどの各カレンダーAPIをまとめて、Google FormやCSVなどの回答データをもとに複数カレンダーに自動登録するPythonスクリプト例を作ります。
前提
フォーム回答はCSVに保存済み(列: 氏名, 参加日, コメント)
登録対象カレンダーは以下6種類(TimeTree除く)
Microsoft Outlook
Apple Calendar (CalDAV)
Fantastical (macOS URLスキーム)
Zoho Calendar
Any.do (Zapier Webhook経由)
Teamup Calendar
Python 3.x + 必要なライブラリ(requests, caldav, webbrowser)
サンプルスクリプト
import csv
import requests
from datetime import datetime, timedelta
import webbrowser

--- 設定 ---

OUTLOOK_TOKEN = 'YOUR_MICROSOFT_GRAPH_TOKEN'
ZOHO_TOKEN = 'YOUR_ZOHO_TOKEN'
ZOHO_CALENDAR_ID = 'primary'
TEAMUP_KEY = 'YOUR_TEAMUP_API_KEY'
TEAMUP_CALENDAR_KEY = 'YOUR_TEAMUP_CALENDAR_KEY'
ANYDO_WEBHOOK_URL = 'YOUR_ZAPIER_WEBHOOK_URL'
FANTASTICAL_ENABLED = True # macOSでFantastical操作する場合 True

Apple Calendar設定

from caldav import DAVClient
APPLE_ID = 'YOUR_APPLE_ID'
APPLE_PASSWORD = 'YOUR_APP_SPECIFIC_PASSWORD'
client = DAVClient('https://caldav.icloud.com/', username=APPLE_ID, password=APPLE_PASSWORD)
principal = client.principal()
apple_calendar = principal.calendars()[0]

CSVファイルパス

CSV_FILE = 'form_responses.csv'

--- CSV読み込み ---

with open(CSV_FILE, newline='', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
name = row['氏名']
date_str = row['参加日'] # yyyy-mm-dd
comment = row['コメント']

    start = datetime.strptime(date_str, "%Y-%m-%d")
    end = start + timedelta(hours=8)

    # --- 1. Microsoft Outlook ---
    outlook_event = {
        "subject": f"{name} 研修参加",
        "start": {"dateTime": start.isoformat(), "timeZone": "Asia/Tokyo"},
        "end": {"dateTime": end.isoformat(), "timeZone": "Asia/Tokyo"},
        "body": {"contentType": "HTML", "content": comment}
    }
    headers = {
        "Authorization": f"Bearer {OUTLOOK_TOKEN}",
        "Content-Type": "application/json"
    }
    resp = requests.post('https://graph.microsoft.com/v1.0/me/events', json=outlook_event, headers=headers)
    print('Outlook:', resp.status_code)

    # --- 2. Apple Calendar (CalDAV) ---
    apple_event_text = f"""

BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
SUMMARY:{name} 研修参加
DTSTART:{start.strftime('%Y%m%dT%H%M%S')}
DTEND:{end.strftime('%Y%m%dT%H%M%S')}
DESCRIPTION:{comment}
END:VEVENT
END:VCALENDAR
"""
apple_calendar.save_event(apple_event_text)
print('Apple Calendar: OK')

    # --- 3. Fantastical ---
    if FANTASTICAL_ENABLED:
        url = f"fantastical://x-callback-url/add?title={name} 研修参加&date={date_str}&notes={comment}"
        webbrowser.open(url)
        print('Fantastical URL opened')

    # --- 4. Zoho Calendar ---
    zoho_event = {
        "subject": f"{name} 研修参加",
        "start_datetime": start.isoformat(),
        "end_datetime": end.isoformat(),
        "description": comment
    }
    headers = {"Authorization": f"Zoho-oauthtoken {ZOHO_TOKEN}", "Content-Type": "application/json"}
    resp = requests.post(f'https://calendar.zoho.com/api/v1/calendars/{ZOHO_CALENDAR_ID}/events', json=zoho_event, headers=headers)
    print('Zoho:', resp.status_code)

    # --- 5. Any.do (Zapier Webhook) ---
    payload = {"title": f"{name} 研修参加", "start": start.isoformat(), "end": end.isoformat(), "notes": comment}
    resp = requests.post(ANYDO_WEBHOOK_URL, json=payload)
    print('Any.do/Zapier:', resp.status_code)

    # --- 6. Teamup Calendar ---
    teamup_event = {"title": f"{name} 研修参加", "start_dt": start.isoformat(), "end_dt": end.isoformat(), "description": comment}
    headers = {"Teamup-Token": TEAMUP_KEY, "Content-Type": "application/json"}
    resp = requests.post(f'https://api.teamup.com/{TEAMUP_CALENDAR_KEY}/events', json=teamup_event, headers=headers)
    print('Teamup:', resp.status_code)

ポイント
CSV1行につき、6つのカレンダーに順番にイベントを登録
FantasticalはmacOS専用のURLスキームで開くだけなので、手動承認が必要
Microsoft / Zoho / TeamupはREST API経由で自動登録可能
Apple CalendarはCalDAVを通してPythonから登録
Any.doはZapier Webhook経由で間接的に登録
💡 拡張アイデア
Google Form回答 → Google Sheet → Pythonスクリプトで定期自動実行
イベント作成結果をログやSlackに通知
参加人数集計 → 自動で複数日程イベント作成
必要であれば、このスクリプトを Google Colab上でフォーム連携 → 自動実行 できるように改造したバージョンも作れます。
作りますか?
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?