こんにちは。フューチャーアーキテクト 製造・エネルギーサービス事業部の柴田です😌 見真の心で本質を探求しています!
2026年初めての試みとして、データエンジニアリングをテーマにしたブログ連載を開催します🎉
この記事は1本目です。
| 日付 | 執筆者 | タイトル / テーマ |
|---|---|---|
| 6/30(火) | 柴田健太さん | Workspace Events API で GWS フォルダの変更をリアルタイム検知し、スプレッドシートを BigQuery に自動取り込みする(この記事です) |
| 7/1(水) | 真野隼記さん | ガイドライン公開しました |
| 7/2(木) | 鈴木風真さん | 【S3 Tables(Iceberg)】timestamptz 型の登録に苦戦した話 |
| 7/3(金) | 棚井龍之介さん | TBD |
| 7/6(月) | 片岡久人さん | TBD |
はじめに
「Google Drive の共有フォルダにあるスプレッドシートが更新されたら、自動的にテーブルとしてBigQueryに取り込みたい」。このような仕組みを作りたいと思うことは誰にでもあると思います。
従来は Google Drive API の changes.watch を使った Webhook ベースの方法が一般的でしたが、Webhookサーバーの運用が必要で、やりたいことのシンプルさに対してとても手間がかかっていました。
2025年7月に Google が Google Workspace Events API をアップデートし、Drive フォルダの変更を直接 Cloud Pub/Sub に通知できるようになりました(2026年6月時点でDeveloper Public Preview)。これにより、リアルタイムなデータパイプライン構築が格段に容易になりました。
本記事では、以下の最小構成でスプレッドシートの自動取り込みパイプラインを構築する手順を解説します。
アーキテクチャ
Google Drive フォルダ |
各コンポーネントの役割
| # | コンポーネント | サービス | 役割 | 補足 |
|---|---|---|---|---|
| 1 | 変更検知 | Workspace Events API | Drive フォルダ内のファイル変更(作成・編集・削除)を検知し、イベントを発行する | Developer Public Preview サブスクリプションの有効期限は最大7日間 |
| 2 | イベント中継 | Cloud Pub/Sub | イベントメッセージを受信・保持し、後続の処理にリアルタイムで配信する | at-least-once 配信。メッセージの順序保証なし |
| 3 | データ処理 | Cloud Functions | Pub/Sub のメッセージをトリガーに起動し、スプレッドシートの読み取り・BigQuery への書き込みを行う | 今回はスプレッドシート以外のファイルは自動スキップ |
| 4 | データ読み取り | Google Sheets API | Cloud Functions から呼び出され、スプレッドシートのデータを取得する | ヘッダー行(1行目)をカラム名として使用 |
| 5 | データ蓄積 | BigQuery | 1スプシに対して1テーブルでデータを格納する | ファイル名やヘッダー行そのままテーブル名とカラム名として扱う |
この構成の特徴
| 項目 | 説明 |
|---|---|
| サーバーレス | Cloud Functions + Pub/Sub で運用不要 |
| リアルタイム | ファイル変更から数秒〜数十秒で BigQuery に反映 |
| 最小コスト | 従量課金のみ、アイドル時はゼロコスト |
| Webhook 不要 | Workspace Events API が直接 Pub/Sub に通知 |
前提条件
- Google Cloud プロジェクトを利用
- Google Workspace アカウント(ビジネス以上)
- Python 3.12+
手順1: Google Cloud インフラ構築
この手順はGoogle CloudのCloud Shellで実行します
1-1. 環境変数の設定
export GCP_PROJECT_ID="your-project-id" |
フォルダ ID の確認方法
Google Drive でフォルダを開き、URL の末尾にある文字列がフォルダ ID です。https://drive.google.com/drive/folders/XXXXXXXXXX← このXXXXXXXXXX部分
1-2. API の有効化
今回は以下のAPIを有効化しています。
【Google Driveの変更通知のために必要】
- Cloud Pub/Sub API (pubsub.googleapis.com)
- Google Workspace Events API(workspaceevents.googleapis.com)
【スプシテーブル化処理のために必要】
- Google Drive API (drive.googleapis.com)
- Google Sheets API (sheets.googleapis.com)
- Cloud Functions API (cloudfunctions.googleapis.com)
- Cloud Build API (cloudbuild.googleapis.com)
- BigQuery API (bigquery.googleapis.com)
1-3. Pub/Sub Topic の作成
# Topic 作成 |
補足workspace-subs-prod-gcp-sa@gcp-sa-workspace-events.iam.gserviceaccount.com は Google が管理する固定のサービスアカウントです。この権限がないとイベントが Pub/Sub に届きません。
1-4. BigQuery データセットの作成
今回はスプシをテーブル化してBigQueryに取り込みますので、テーブルのデータセットだけあらかじめ作成します。
# データセット作成 |
手順2: Cloud Function の実装
2-1. ディレクトリ構成
cloud_function/ |
2-2. ソースコード
requirements.txt
functions-framework==3.* |
main.py
import base64 |
2-3. Cloud Function のデプロイ
Cloud Functionをデプロイするコマンドです。作成したPub/Subトピックがトリガーになるように設定しています。こちらもCloud Shell上で実行してください。
gcloud functions deploy gws-drive-to-bigquery \ |
手順3: Workspace Events API サブスクリプション作成
ここが今回の肝です。Workspace Events API を使って、Drive フォルダの変更イベントを Pub/Sub に通知するサブスクリプションを作成します。
注意
今回はソースコードを掲載していますが、認証方法などは一例で、環境によっては利用できない場合もあります。
自分の環境によって適切なものを選択してください。
3-1. OAuth 2.0 クライアント ID の準備
- Google Cloud Console を開く
- 「認証情報を作成」→「OAuth クライアント ID」
- アプリケーションの種類: 「デスクトップ アプリ」
- JSON をダウンロードして
credentials.jsonとして保存
3-2. サブスクリプション作成スクリプト
このスクリプトはローカル環境で実行してください。
requirements.txt
import json |
# 実行 |
サブスクリプションの有効期限
Workspace Events API のサブスクリプションは 最大7日間 で期限切れになります。本番運用では Cloud Scheduler で 定期的に更新スクリプトを実行してください。
手順4: 動作確認
4-1. テスト用スプレッドシートの作成
監視対象フォルダに、以下のようなテスト用スプレッドシートを作成します:
| 名前 | 年齢 | 部署 |
|---|---|---|
| 田中太郎 | 30 | 開発 |
| 鈴木花子 | 25 | 営業 |
4-2. BigQuery でデータ確認
スプレッドシートを保存してから数秒〜数十秒後に、BigQuery でデータを確認できます
-- データセットのテーブルを確認 |
データが入らない場合
まずはCloud Functionのログを確認して処理が実行されているかを確認してください。もし処理が実行されていない場合はPub/Subのサブスクリプションでメッセージが配信されているかを確認してください。
注意事項・制限事項
Workspace Events API(Developer Preview)の制限
| 項目 | 制限 |
|---|---|
| サブスクリプション有効期限 | 最大 7 日間(要定期更新) |
| 1ユーザーあたりのサブスクリプション数 | 上限あり(要確認) |
| イベント配信保証 | at-least-once(重複ありだが今回は実装で対処) |
| プレビュー状態 | 本番利用は自己責任 |
Cloud Function のサービスアカウント権限
Cloud Function のサービスアカウントに以下の権限が必要です:
# BigQuery Data Editor |
コスト見積もり
月間 1,000 回のスプレッドシート更新を想定した場合:
| サービス | 概算月額コスト |
|---|---|
| Cloud Functions | $0〜$1(無料枠内) |
| Pub/Sub | $0〜$0.1(無料枠内) |
| BigQuery(ストレージ) | $0〜$0.5 |
| BigQuery(クエリ) | 使用量による |
| 合計 | ほぼ無料〜$2 程度 |
まとめ
Google Workspace Events API(プレビュー)を使うことで、従来の Webhook ベースの方式と比較して、大幅にシンプルなアーキテクチャでリアルタイムデータパイプラインを構築できます。
ポイント
- Workspace Events API が Drive → Pub/Sub の橋渡しをしてくれる
- Cloud Function でサーバーレスに処理
- サブスクリプションの 7日間有効期限に注意(要定期更新)