前提
2023年3月17日(金)現在の話です。
API の公式ドキュメント
結論
どの gem を使うか?
google/analytics/data/v1beta です。
API の認証はどうするか?
GCP のサービスアカウントを作成し、認証用の JSON ファイルである credentials.json
を準備しておいてください*1。下記のような形式のものです。
{ "type": "service_account", "project_id": "foobar-project", "private_key_id": "12345abcdef", "private_key": "-----BEGIN PRIVATE KEY-----\nabcdefg=\n-----END PRIVATE KEY-----\n", "client_email": "hoge@fuga.iam.gserviceaccount.com", "client_id": "12345", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/hoge%40fuga.iam.gserviceaccount.com" }
GA4 へのアクセス権の設定はどうするか?
GA4 の設定画面の「プロパティ」の列から、「プロパティのアクセス管理」を選びます。
出てきたアカウント一覧画面にて、上記の「GCP のサービスアカウント」のメールアドレス*2を「閲覧者」として登録します。
他に準備すべきことは?
- 取得したい GA4 のプロパティの「プロパティID」を準備しておきます
- GCP の「API とサービス」から「Google Analytics Data API」を有効にしておきます
具体的なコードは?
- 以下のサンプルコードで最低限の動作(レスポンスの取得)ができます
- 認証は環境変数
ANALYTICS_DATA_CREDENTIALS
*3 に JSON ファイル の場所を指定するだけで行なえます- サンプルコード内では ENV に直接指定するという荒業を行っていますが、
dotenv
やdirenv
を使いましょう
- サンプルコード内では ENV に直接指定するという荒業を行っていますが、
- 取得したい GA4 の「プロパティID」を所定の場所に埋め込みます
- 「ディメンション」や「指標(メトリクス)」、「日付範囲」については本題ではないので省略します。
- ディメンションと指標に関するドキュメントは こちら
require 'google/analytics/data/v1beta' ENV['ANALYTICS_DATA_CREDENTIALS'] = 'credentials.json' client = Google::Analytics::Data::V1beta::AnalyticsData::Client.new property = 'properties/プロパティID' dimensions = [ Google::Analytics::Data::V1beta::Dimension.new(name: 'pagePathPlusQueryString'), ] # 戻り値の配列は以下で指定した順番になる metrics = [ Google::Analytics::Data::V1beta::Metric.new(name: 'screenPageViews'), Google::Analytics::Data::V1beta::Metric.new(name: 'screenPageViewsPerSession'), ] yesterday = (Date.today - 1).strftime('%Y-%m-%d') date_ranges = [ Google::Analytics::Data::V1beta::DateRange.new(start_date: yesterday, end_date: yesterday), ] order_bys = [ Google::Analytics::Data::V1beta::OrderBy.new( desc: true, metric: Google::Analytics::Data::V1beta::OrderBy::MetricOrderBy.new( metric_name: 'screenPageViews' ) ), ] request = Google::Analytics::Data::V1beta::RunReportRequest.new( property: property , dimensions: dimensions, metrics: metrics, order_bys: order_bys, date_ranges: date_ranges ) response = client.run_report(request) # 得られた response に対しての操作: # response.rows で結果の「行」の集合が配列で得られる # その配列の個々の要素である row に対し、row.metric_values と row.dimension_values で具体値の配列を取得する # row.metric_values や row.dimension_values の要素に対し value メソッドを実行することで値が取得できる # つまり、たとえば、以下のようにして 1行目 の screenPageViewsPerSession の値を取得できる # response.rows[0].metric_values[1].value
補足
google-analytics-data-v1alpha
のときにはGoogle::Analytics::Data::V1beta::RunReportRequest.new
のキーワード引数にentity:
というものがあり、それにより GA4 の プロパティID を指定していましたが、beta
になってproperty:
に変わっていますv1alpha
時代の解説記事をv1beta
で動かそうとすると、この部分でエラーになることがあります
- 現時点でも
beta
なので、今後も変更の可能性が十分に考えられ、UA が停止になって一定の期間が経過するまでは変更は覚悟しておいた方はよいと考えてます - Ruby のドキュメント はきちんと整備されており、また、そもそも複雑なことをやってはいないので、半日ぐらいかけて手を動かしながらがっつり一度習得すれば、多少の変更があっても今後ずっと使っていけるのではないかと思います