【GA4 API】Cloud Run経由でGoogle Analyticsデータを取得してみた
目次
こんにちは。 今回は、Cloud Run経由でGA4 APIを叩いてみようと思います。
前回のブログでは、GA4のデータをプログラムから取得する際、サービスアカウントのJSON鍵をDLして、ローカル上からJSON鍵を利用してCURLしていました。
一方で、JSON鍵をローカルにDLする場合、鍵の紛失や流出、社内のコンプライアンスに抵触する場合があります。
そこで今回は、GA4と疎通したサービスアカウントをCloud Runの実行サービスアカウントとすることで、JSON鍵をインストールせずにデータ取得ができるような仕様とします。
GA4 APIをCloud Run経由で取得する全体像
今回の構造の全体像は以下となります。
事前準備として、
- GA4 APIの有効化
- サービスアカウント作成
- Cloud Runアプリ作成(サービスアカウント紐づけ)
実行段階として、
- Cloud RunアプリのURLを叩いてデータ取得
となります。

手順
GA4 APIをCloud Run経由で取得する手順を説明していきます。
※手順1~3まではローカルにJSON鍵をDLする方法とほぼ同じ
1. GA4 API有効化
Google Cloudコンソールで「APIとサービス」→「ライブラリ」を開き、「Google Analytics Data API」を検索して有効化します。

2. サービスアカウントの準備
次に、サービスアカウントを作成します。
「IAMと管理」→「サービスアカウント」を開き、「サービスアカウントを作成」を選択。

サービスアカウントの詳細設定を行っていきます。
| 項目 | 設定内容 |
|---|---|
| サービスアカウント名 | 任意の英数字 |
| サービスアカウントID | アカウント名を入れると自動反映される |
| サービスアカウントの説明 | 任意 |
| ロール | 閲覧者 |
| サービスアカウントユーザーロール | 空欄 |
| サービスアカウント管理者ロール | 空欄 |
※ロールや権限まわりは、後でGA4との疎通により自動で設定される。

これにより、サービスアカウントが作成されます。
後にサービスアカウントのメールアドレスを使用するのでメモしておきます。

3. GA4側でサービスアカウントの登録
GA4側でサービスアカウントの登録を行い、GCPとGA4側の疎通設定を行います。
GA4の左下「管理」(歯車アイコン)→「プロパティ」→「プロパティのアクセス管理」を選択。
「+」→「ユーザーを追加」を選択し、サービスアカウントのメールアドレスと「閲覧者」権限を選択し追加。

これで、GCPとGA4の紐付けが完了しました。
4. Cloud Runへのデプロイ
次にCloud Run上にREST APIアプリを作成し、そのアプリにGA4への疎通があるサービスアカウントを紐づけます。
下記のGithubリポジトリをCLONEします。
https://github.com/petlabo/ga4-api-on-cloud-run
git clone https://github.com/petlabo/ga4-api-on-cloud-run.git
本アプリはFlaskで構築されており、GA4の「RunReport」を取得する機能を備えています。
具体的な処理フローとしては、パラメータの取得および辞書形式への変換を行い、RunReportRequestメソッドを介してGA4のレポートデータを取得する構成となっています。
次にCLONEしたアプリをCloud Runへデプロイします。
その際、GA4と疎通を取れたサービスアカウントのメールアドレスを紐づけ、Cloud RunからGA4へと一貫して疎通できるようにします。
# ローカルからGCPへのログイン
gcloud auth login
# サービスアカウントを紐づけたうえでCloud Runにデプロイ
gcloud run deploy ga4-report-service \
--source . \
--region asia-northeast1 \
--allow-unauthenticated \
--set-env-vars GA_PROPERTY_ID=[ブログのプロパティID] \
--service-account [作成したサービスアカウントのメールアドレス] \
--project [プロジェクトID]
※ ブログのプロパティIDは左上のブログタイトルを開き、下図場所の数字を取得する。
5. 実行してみる-Cloud Runアプリ経由でデータ取得
実際にCloud Run経由でGA4のデータを取得してみます。
Cloud RunのURLを叩くことで、GA4データが取得できます。
すでにCloud Run側にサービスアカウントが紐づけられているため、鍵等は不要です。
$ curl -X GET "https://[Cloud RunのURL]/?dimensions=city,country&metrics=activeUsers,sessions&start_date=2026-01-01&end_date=today"
>
{
# GA4データ
"data": [
{
"city": "Sample City A",
"country": "United States",
"activeUsers": "9",
"sessions": "9"
},
# ... #
# 入力パラメータ
"parameters": {
"date_range": ["2026-01-01", "today"],
"dimensions": ["city", "country"],
"metrics": ["activeUsers", "sessions"]
},
# 実行成功/失敗
"status": "success"
【余談】運用コストの試算
今回のCloud Run構成で発生する月額コストを試算しました。
1カ月あたり数百〜数千リクエスト想定であれば無料枠内に収まります。
| サービス | 無料枠(月間) | 想定利用量 | 判定 |
|---|---|---|---|
| Cloud Run | 18万vCPU秒 or 36万GiB秒 or 200万リクエスト | 数百〜数千リクエスト | 0円 |
| Cloud Build | 1日あたり120ビルド | デプロイ時数分/回 ※基本一回のみと仮定 | 0円 |
| Artifact Registry | 500MB | 約60~70MB | 0円 |
| ネットワーク | 100GB | 数百MB程度 | 0円 |
※ Artifact Registry(Cloud Runアプリのコンテナイメージ保存)の固定料金のみ、上限を意識するようなサイズではあるものの、いずれも無料枠に抑えられる。
おわりに
今回はCloud Run経由でGA4データを取得してみました。
ローカル上に余計な鍵を保存する必要がないため、余計な管理対象を増やさないことが利点です。
一方で、URLさえ知っていれば第三者からアクセスができてしまうため、VPC内制限やOAUTH認証の導入など、工夫の手立てはありそうです。
それでは。