API経由でGoogle Meetの成果物作成を有効化したカレンダー予定を作成する

記事タイトルとURLをコピーする

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

はじめに

概要

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

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

  • Gemini でメモを生成する
  • 会議を文字起こし
  • 会議を録画

公式ドキュメントでは、自動メモ生成機能を使用するために推奨される会議の長さは、15 分から最大 8 時間までであることが記載されています。

当記事では、Google Calendar API と Google Meet REST API を使用して、API 経由でアーティファクト作成を有効化したイベントと Meet 会議の作成方法を解説します。

Google Calendar API とは

Google Calendar API は、HTTP 呼び出しまたは Google クライアント ライブラリを使用してアクセスできる RESTful API です。この API を利用すると、Google カレンダーの Web UI で利用できるほとんどの操作を、自身のプログラムから呼び出すことができます。

以下の記事も参照してください。

blog.g-gen.co.jp

Google Meet REST API とは

Google Meet REST API は、HTTP 呼び出しまたは Google クライアント ライブラリを使用してアクセスできる RESTful API です。この API を利用すると、自身のプログラムから以下の操作ができます。

  • Meet 会議のためのスペースの作成、取得、更新
  • 参加者と参加者セッションのリストを取得
  • アーティファクトを取得

また、Google Workspace Events API を使用して Meet イベントに登録できます。特定の会議スペースまたは特定のユーザーに属するすべてのスペースを登録することで、変更の通知を受け取れます。

免責事項

当記事で紹介するプログラムのソースコードは、ご自身の責任のもと、使用、引用、改変、再配布して構いません。

ただし、同ソースコードが原因で発生した不利益やトラブルについては、当社は一切の責任を負いません。

事前準備

各種 API の有効化

使用する Google Cloud プロジェクトで以下の API を有効化します。

  • Google Calendar API
  • Google Meet REST API
 gcloud services enable \
  calendar-json.googleapis.com \
  meet.googleapis.com

OAuth 同意画面の構成

  1. Google Cloud コンソールで、ハンバーガーメニューから > Google Auth platform > [ブランディング] に移動します。
  2. 「開始」ボタンを押下し、以下の情報を入力し、OAuth 同意画面の設定を構成します。
項目
アプリ名 同意を求めるアプリの名前
ユーザーサポートメール 同意に関して問い合わせる際に使用するメールアドレス
対象 内部
メールアドレス 使用しているメールアドレス

デスクトップ アプリケーションの認証情報を承認

  1. Google Cloud コンソールで、ハンバーガーメニューから > Google Auth platform > [クライアント] に移動します。
  2. 「クライアントを作成」を押下します。
  3. アプリケーションの種類デスクトップアプリを選択し、デスクトップアプリの名前を入力して「作成」を押下します。
  4. OAuth クライアントの作成が完了したら、「JSON をダウンロード」*を押下し、クライアントシークレットを保存します。

アーティファクト作成を有効化したイベントと Meet 会議の作成処理

当記事では、Astral 社が開発・提供している、Rust 製のパッケージ・プロジェクト管理ツールの uv を使用します。

プロジェクトの初期化

以下のコマンドを実行して、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()
  1. authorize 関数は作成した client_secret.json を使用して、OAuth の認証を行います。Google アカウントを選択し認証に成功すると、token.json が作成され、認証情報(アクセストークンやリフレッシュトークン)が保管されます。scopes ではアプリから操作できる範囲を限定しているので、実装する処理に応じてスコープを変更する必要があります。
  2. create_event 関数は認証に使用した Google アカウントの Google カレンダーにイベントを作成します。今回実装した処理では、実行した時刻から1時間の予定を作成しています。
  3. create_space 関数はアーティファクト生成を有効化した Meet 会議のスペースを作成しています。設定は JSON 形式で実装します。Google Meet REST API の呼び出しは、 google-apps-meet ライブラリからも可能ですが、本機能は2025年11月時点でベータ版として提供されているので使用していません。
  4. update_event 関数は [2.] で作成したイベントの event["conferenceData"] に、[3.] で作成したスペースの Uri を設定しています。

main 関数が実行されると、イベント、スペースの作成、イベントの更新処理が順番に呼び出されます。

動作確認

ターミナルで uv run main.py を実行することで、OAuth の同意画面が表示されます。Google アカウントを選択し認証すると、認証された Google アカウントの Google カレンダーにアーティファクト作成が有効化された Meet 会議を含むイベントが登録されます。

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

高宮 怜(記事一覧)

クラウドソリューション部クラウドエクスプローラ課

2025年6月より、G-genにジョイン。前職は四国のSIerで電力、製造業系のお客様に対して、PM/APエンジニアとして、要件定義から運用保守まで全工程を担当。現在はGoogle Cloudを学びながら、フルスタックエンジニアを目指してクラウドエンジニアとしてのスキルを習得中。