G-gen の高宮です。Google Calendar API と Google Meet REST API を利用し、Google Meet の成果物作成を有効化したカレンダーの予定を作成する方法を解説します。

はじめに
概要
Google カレンダーの Web UI では、予定(以下、イベント)を作成後、「Google Meet のビデオ会議を追加」を押下するか、ゲストを追加することで、イベントに Meet 会議の URL を追加することができます。

また、Meet 会議で録画や文字起こしなどの成果物(以下、アーティファクト)作成を、会議が開始されると同時に開始したい場合、ビデオ通話オプションの「会議の記録」タブで、以下の項目にチェックを入れます。これにより、自動記録が有効化されアーティファクトが作成されます。
- Gemini でメモを生成する
- 会議を文字起こし
- 会議を録画


公式ドキュメントでは、自動メモ生成機能を使用するために推奨される会議の長さは、15 分から最大 8 時間までであることが記載されています。
- 参考 : Google Meet の自動メモ生成
当記事では、Google Calendar API と Google Meet REST API を使用して、API 経由でアーティファクト作成を有効化したイベントと Meet 会議の作成方法を解説します。
Google Calendar API とは
Google Calendar API は、HTTP 呼び出しまたは Google クライアント ライブラリを使用してアクセスできる RESTful API です。この API を利用すると、Google カレンダーの Web UI で利用できるほとんどの操作を、自身のプログラムから呼び出すことができます。
以下の記事も参照してください。
Google Meet REST API とは
Google Meet REST API は、HTTP 呼び出しまたは Google クライアント ライブラリを使用してアクセスできる RESTful API です。この API を利用すると、自身のプログラムから以下の操作ができます。
- Meet 会議のためのスペースの作成、取得、更新
- 参加者と参加者セッションのリストを取得
- アーティファクトを取得
また、Google Workspace Events API を使用して Meet イベントに登録できます。特定の会議スペースまたは特定のユーザーに属するすべてのスペースを登録することで、変更の通知を受け取れます。
- 参考 : Google Meet REST API の概要
- 参考 : Google Workspace Events API を使用してイベントに登録する
- 参考 : Google Meet のイベントに登録する
免責事項
当記事で紹介するプログラムのソースコードは、ご自身の責任のもと、使用、引用、改変、再配布して構いません。
ただし、同ソースコードが原因で発生した不利益やトラブルについては、当社は一切の責任を負いません。
事前準備
各種 API の有効化
使用する Google Cloud プロジェクトで以下の API を有効化します。
- Google Calendar API
- Google Meet REST API
gcloud services enable \ calendar-json.googleapis.com \ meet.googleapis.com
OAuth 同意画面の構成
- Google Cloud コンソールで、ハンバーガーメニューから > Google Auth platform > [ブランディング] に移動します。
- 「開始」ボタンを押下し、以下の情報を入力し、OAuth 同意画面の設定を構成します。
| 項目 | 値 |
|---|---|
| アプリ名 | 同意を求めるアプリの名前 |
| ユーザーサポートメール | 同意に関して問い合わせる際に使用するメールアドレス |
| 対象 | 内部 |
| メールアドレス | 使用しているメールアドレス |
- 参考 : OAuth 同意画面を構成する
- 参考 : Manage OAuth App Branding
デスクトップ アプリケーションの認証情報を承認
- Google Cloud コンソールで、ハンバーガーメニューから > Google Auth platform > [クライアント] に移動します。
- 「クライアントを作成」を押下します。
- アプリケーションの種類でデスクトップアプリを選択し、デスクトップアプリの名前を入力して「作成」を押下します。
- OAuth クライアントの作成が完了したら、「JSON をダウンロード」*を押下し、クライアントシークレットを保存します。

アーティファクト作成を有効化したイベントと Meet 会議の作成処理
当記事では、Astral 社が開発・提供している、Rust 製のパッケージ・プロジェクト管理ツールの uv を使用します。
- 参考 : uv Introduction
プロジェクトの初期化
以下のコマンドを実行して、Python プロジェクトを初期化、仮想環境を構築します。
uv init <プロジェクト名> uv venv
ファイル構成
| ファイル名 | 説明 |
|---|---|
client_secret.json |
作成したクライアントから発行したクライアントシークレット |
.python-version |
uv で使用する Python のバージョン |
main.py |
メイン処理 |
pyproject.toml |
プロジェクトのパッケージや依存関係の管理 |
token.json |
認証情報(アクセストークンやリフレッシュトークン)を保管 |
ライブラリのインストール
以下のコマンドを実行して、必要なライブラリをインストールします。
uv add google-api-python-client==2.187.0 uv add google-auth-oauthlib==1.2.3
実装
main.py に以下のコードを実装します。
本実装では、API の呼び出しは、google-api-python-client ライブラリを使用して行っています。
import os import datetime from google.auth.transport import requests from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build def authorize() -> Credentials: """Calendar API と Meet API を呼び出すために OAuth 2.0 認証を行い、Credentials オブジェクトを返す""" CLIENT_SECRET_FILE = "./client_secret.json" credentials = None if os.path.exists("token.json"): credentials = Credentials.from_authorized_user_file("token.json") if credentials is None: flow = InstalledAppFlow.from_client_secrets_file( CLIENT_SECRET_FILE, scopes=[ "https://www.googleapis.com/auth/calendar.events.owned", "https://www.googleapis.com/auth/meetings.space.created", ], ) flow.run_local_server(port=0) credentials = flow.credentials if credentials and credentials.expired: credentials.refresh(requests.Request()) if credentials is not None: with open("token.json", "w") as f: f.write(credentials.to_json()) return credentials USER_CREDENTIALS = authorize() def create_event(): """Calendar API を使用してイベントを作成する""" # サービスオブジェクトの構築 service = build("calendar", "v3", credentials=USER_CREDENTIALS) # 指定した時刻から1時間の予定を作成 now = datetime.datetime.now() startTime = now.isoformat() endTime = (now + datetime.timedelta(hours=1)).isoformat() event = { "summary": "Google Calendar Meet Test Event", "start": { "dateTime": startTime, "timeZone": "Asia/Tokyo", }, "end": { "dateTime": endTime, "timeZone": "Asia/Tokyo", }, } # 自身のカレンダーに予定を追加 event = service.events().insert(calendarId="primary", body=event).execute() return event def create_space(): """Meet API を使用して アーティファクト生成を有効化した Space リソースを作成する""" # google-api-python-client での実装 service = build("meet", "v2", credentials=USER_CREDENTIALS) # 変更する Space リソースのボディ定義 space_body = { "config": { "artifactConfig": { "recordingConfig": { "autoRecordingGeneration": "ON", }, "transcriptionConfig": { "autoTranscriptionGeneration": "ON", }, "smartNotesConfig": { "autoSmartNotesGeneration": "ON", }, } } } # Space リソースの作成 return service.spaces().create(body=space_body).execute() def update_event(eventId: str = None, meetUri: str = None): """Calendar API を使用して既存のイベントに Meet 情報を追加する""" # サービスオブジェクトの構築 service = build("calendar", "v3", credentials=USER_CREDENTIALS) # 予定の更新 event = service.events().get(calendarId="primary", eventId=eventId).execute() event["conferenceData"] = { "conferenceSolution": { "key": {"type": "hangoutsMeet"}, }, "entryPoints": [ { "entryPointType": "video", "uri": meetUri, } ], } updated_event = ( service.events() .update( calendarId="primary", eventId=event["id"], body=event, conferenceDataVersion=1, ) .execute() ) return updated_event def main(): """メイン処理""" # イベントと Space の作成 event = create_event() print(f"Google Calendar URL {event.get('htmlLink')}") space = create_space() meet_uri = space.get("meetingUri") print(f"Meet URL {meet_uri}") # イベントに Space を紐付けて更新 event = update_event(eventId=event["id"], meetUri=meet_uri) # カレンダーの更新結果を確認(イベントのURLは変わらず、作成した Meet URL が追加されている) print(f"Update Google Calendar URL {event.get('htmlLink')}") print(f"Calendar Meet URL {event['conferenceData']['entryPoints'][0]['uri']}") if __name__ == "__main__": main()
authorize関数は作成したclient_secret.jsonを使用して、OAuth の認証を行います。Google アカウントを選択し認証に成功すると、token.jsonが作成され、認証情報(アクセストークンやリフレッシュトークン)が保管されます。scopesではアプリから操作できる範囲を限定しているので、実装する処理に応じてスコープを変更する必要があります。create_event関数は認証に使用した Google アカウントの Google カレンダーにイベントを作成します。今回実装した処理では、実行した時刻から1時間の予定を作成しています。create_space関数はアーティファクト生成を有効化した Meet 会議のスペースを作成しています。設定はJSON形式で実装します。Google Meet REST API の呼び出しは、google-apps-meetライブラリからも可能ですが、本機能は2025年11月時点でベータ版として提供されているので使用していません。update_event関数は [2.] で作成したイベントのevent["conferenceData"]に、[3.] で作成したスペースの Uri を設定しています。
main 関数が実行されると、イベント、スペースの作成、イベントの更新処理が順番に呼び出されます。
- 参考 : Google Calendar API のスコープを選択する
- 参考 : Events
- 参考 : REST Resource: spaces
動作確認
ターミナルで uv run main.py を実行することで、OAuth の同意画面が表示されます。Google アカウントを選択し認証すると、認証された Google アカウントの Google カレンダーにアーティファクト作成が有効化された Meet 会議を含むイベントが登録されます。


登録されたイベントの Meet 会議に参加すると、アーティファクト作成が自動で開始されることが確認できます。


高宮 怜(記事一覧)
クラウドソリューション部クラウドエクスプローラ課
2025年6月より、G-genにジョイン。前職は四国のSIerで電力、製造業系のお客様に対して、PM/APエンジニアとして、要件定義から運用保守まで全工程を担当。現在はGoogle Cloudを学びながら、フルスタックエンジニアを目指してクラウドエンジニアとしてのスキルを習得中。
Follow @Ggen_RTakamiya