google calendar, google form, google drive, google colabの連携例をお示しください。
ChatGPT:
もちろんです。Google系サービス(Calendar, Form, Drive, Colab)を組み合わせると、自動化やデータ収集・分析の効率化が可能です。以下に具体例を示します。
- 連携のシナリオ例
目的:
社員研修のアンケートフォームをGoogle Formで作成 → 回答をGoogle Sheetに保存 → 自動集計 → 結果に基づきGoogle Calendarにイベントを登録 → Colabでデータ分析- 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)
- 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()
- Google Driveで資料管理 → Colabで自動処理
研修資料をDriveにアップロード
Colabで資料の一覧取得や加工
from google.colab import drive
drive.mount('/content/drive')
import os
files = os.listdir('/content/drive/MyDrive/研修資料')
print(files)
- フルフロー例まとめ
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)フル例 を示します。
- 前提
Google Form → 回答はGoogle Sheetに自動保存
Google Calendarは既存のカレンダーを使用(calendarIdに指定) - 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の資料リンクを自動添付 するバージョンを作ります。
- 前提
フォーム回答の「研修資料希望」欄があり、資料名(Drive上のファイル名)を入力する
Drive上の資料フォルダは固定(例: 研修資料)
カレンダーイベントの説明欄に該当資料のリンクを自動追加 - 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つ挙げます。
- Microsoft Outlook Calendar
特徴: Office 365と統合、メールやTeamsと連携可能
利点: 企業ユーザーに最適、繰り返し予定や会議招待が簡単
対応: Web, Windows, Mac, iOS, Android - Apple Calendar (iCloud Calendar)
特徴: iOS/macOS標準、Apple製品との連携が強力
利点: Siri連携、デバイス間自動同期
対応: macOS, iOS, Web (iCloud.com), 他カレンダーの読み込み可 - Fantastical
特徴: Apple環境で人気、自然文入力でイベント作成
利点: 複数カレンダー統合、天気情報やリマインダーも対応
対応: macOS, iOS, Web - Zoho Calendar
特徴: Zohoの業務ツールと統合
利点: 共有カレンダー、タスク管理、招待メール
対応: Web, iOS, Android
ビジネス向き: 小規模チーム向けに便利 - Any.do Calendar
特徴: タスク管理アプリと統合されたカレンダー
利点: タスクと予定を1画面で管理、リマインダー充実
対応: Web, iOS, Android, Chrome拡張 - Teamup Calendar
特徴: 複数ユーザーで共有できる柔軟なカレンダー
利点: メールアカウント不要、色分けでグループ管理
対応: Web, iOS, Android
チーム向け: プロジェクトや施設予約管理に最適 - TimeTree
特徴: 共有に特化したカレンダーアプリ
利点: 家族・友人・チームとの予定共有が簡単、コメントやメモ付き
対応: Web, iOS, Android
💡 まとめ
個人利用なら Apple Calendar, Fantastical, TimeTree が便利
ビジネス利用なら Outlook, Zoho, Teamup
タスク統合なら Any.do
必要であれば、これら7つを Google Calendarと機能・連携面で比較した表 にして一覧化することもできます。
作りますか?
それぞれのカレンダーのSDK, APIがあればおしえてください。
ChatGPT:
以下に、先に挙げた7つのカレンダーサービスのSDKおよびAPI情報をまとめました。
- Microsoft Outlook Calendar
API: Microsoft Graph APIを使用して、Outlookのカレンダーイベントの作成、取得、更新、削除が可能です。詳細はMicrosoft Graph Calendar APIをご参照ください。
SDK: 公式のSDKは提供されていませんが、PythonやNode.jsなどの一般的なプログラミング言語で利用可能です。 - Apple Calendar (iCloud Calendar)
API: Apple CalendarはCalDAVプロトコルを使用しており、これを利用することでカレンダーの操作が可能です。詳細はCalDAVとiCloud Calendarの統合をご参照ください。
SDK: AppleのEventKitフレームワークを使用して、iOSおよびmacOSアプリでカレンダーの操作が可能です。詳細はEventKitドキュメントをご参照ください。 - Fantastical
API: Fantastical自体の公開APIは提供されていませんが、AppleのShortcutsアプリを使用して、Fantasticalとの連携が可能です。詳細はFantasticalとShortcutsの統合をご参照ください。
SDK: 公式のSDKは提供されていませんが、URLスキームを使用して他のアプリからFantasticalを操作することが可能です。詳細はFantasticalのURLスキームをご参照ください。 - Zoho Calendar
API: Zoho CalendarはRESTfulなAPIを提供しており、カレンダーの操作が可能です。詳細はZoho Calendar APIの紹介をご参照ください。
SDK: 公式のSDKは提供されていませんが、REST APIを直接利用することで、任意のプログラミング言語からアクセス可能です。 - Any.do
API: Any.doはGoogle Calendar、Outlook、Apple Calendarとの統合を提供しています。詳細はAny.doのカレンダー統合をご参照ください。
SDK: 公式のSDKは提供されていませんが、Zapierなどの自動化ツールを使用して、他のアプリとの連携が可能です。詳細はZapierとAny.doの統合をご参照ください。 - Teamup Calendar
API: Teamup CalendarはRESTfulなAPIを提供しており、カレンダーの操作が可能です。詳細はTeamup APIの概要をご参照ください。
SDK: 公式のSDKは提供されていませんが、Pythonなどのプログラミング言語からREST APIを利用することが可能です。 - 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 で統一しています。 - 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}¬es={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}¬es={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 の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。