心配性なシステム運用日記
【GA4 API】Cloud Run経由でGoogle Analyticsデータを取得してみた
2026.04.21 更新

【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-overview

手順

GA4 APIをCloud Run経由で取得する手順を説明していきます。
※手順1~3まではローカルにJSON鍵をDLする方法とほぼ同じ

1. GA4 API有効化

Google Cloudコンソールで「APIとサービス」→「ライブラリ」を開き、「Google Analytics Data API」を検索して有効化します。

GA4-API-activate-on-GCP

2. サービスアカウントの準備

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

create-service-account-1

サービスアカウントの詳細設定を行っていきます。

項目設定内容
サービスアカウント名任意の英数字
サービスアカウントIDアカウント名を入れると自動反映される
サービスアカウントの説明任意
ロール閲覧者
サービスアカウントユーザーロール空欄
サービスアカウント管理者ロール空欄

※ロールや権限まわりは、後でGA4との疎通により自動で設定される。

create-service-account-2

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

service-account-lists

3. GA4側でサービスアカウントの登録

GA4側でサービスアカウントの登録を行い、GCPとGA4側の疎通設定を行います。

GA4の左下「管理」(歯車アイコン)→「プロパティ」→「プロパティのアクセス管理」を選択。
「+」→「ユーザーを追加」を選択し、サービスアカウントのメールアドレスと「閲覧者」権限を選択し追加。

add-service-account-on-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は左上のブログタイトルを開き、下図場所の数字を取得する。
get-blog-property

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 Run18万vCPU秒
or 36万GiB秒
or 200万リクエスト
数百〜数千リクエスト0円
Cloud Build1日あたり120ビルドデプロイ時数分/回
※基本一回のみと仮定
0円
Artifact Registry500MB約60~70MB0円
ネットワーク100GB数百MB程度0円

※ Artifact Registry(Cloud Runアプリのコンテナイメージ保存)の固定料金のみ、上限を意識するようなサイズではあるものの、いずれも無料枠に抑えられる。

おわりに

今回はCloud Run経由でGA4データを取得してみました。

ローカル上に余計な鍵を保存する必要がないため、余計な管理対象を増やさないことが利点です。
一方で、URLさえ知っていれば第三者からアクセスができてしまうため、VPC内制限やOAUTH認証の導入など、工夫の手立てはありそうです。

それでは。

Xでシェア
Menu