はじめに
Google Analytics(以下、GA)は、ホームページへ設定し、アクセス数などを取得することができます。それを別のBIやシステムで利用するために、データをSupabaseへ取り込む流れを整理します。
Supabaseは、BaaS(Background As A Service)で、その界隈では有名なFirebaseの代替サービスと言われています。無料枠は、ストレージ1GBまで、2プロジェクトまで、1週間使わないと止まる。DBはPostgreSQL。
ちなみに読み方は、Superと同じでいいみたいです。ドメイン取得時の何かの問題で、Superbaseという名前にできなかったという裏事情があるようですw
Google Analyticsだけでも、グラフを見たり数字を見たりするのは十分ですが、例えば自社のCRMと合わせて可視化したいとか、他のデータと結合して集計したいとか、GAを見るだけの人に権限を与えたくないとか、いろいろな理由で外に出すケースがあります。
データベースは、Supabaseでなくても、第一候補はGoogle社製のBigQueryでしょう。でも諸事情ある場合もあるということで、今回はSupabase。
またGAとSupabaseの橋渡しは、make.comというサービス(以下、Make)を使います。ノーコードの処理を自動化してくれるものです。無料で、2つのシナリオを有効にできます。シナリオとは、処理の塊のこと。時限起動で、毎日1回とか、毎月何日何時とか仕込んで動かせます。
超概要
- SupabaseでGoogle Analyticsのデータを入れる設定
- Makeで、Google Analyticsからデータを抽出し、Supabaseへ入れる
作業手順
1. Supabaseの受け側の設定
プロジェクトは作ってある前提で始めます。
1-1. テーブルを作成
GAはたくさんの列(ディメンションとメトリクス)がありますが、今回は例としてこんな列。id
、date
、page_path
、sessions
、pageviews
、users
。
ちなみにディメンションとは、group byのキーで、メトリクスはそのcountとか集計値。つまりGAが提供するのは集計後の値です。group byとはいえ、ディメンションはものすごく多いので、ほぼ1アクセスごとのレコード。ちょっとそれがわかりづらいんですよね。
1-2. RLSの設定
Supabaseは、PostgreSQLのRLS(Row Level Security)の対応があります。テーブルのデータへのアクセス制御を厳密にコントロールする機構です。デフォルトではそれが有効になっていて、外からはSelectもInsertもできないので、Insertだけ許してあげる設定をします。
テーブルのデータ一覧(まだ空だけど)の上にある、Add RLS policyをクリックし、画面遷移先でテーブル名の右の方にあるCreate policyをクリックします。
Policy Nameを、Allow Insert for All
(任意でよいです)
Policy Commandで、INSERT
下のクエリの中かっこの中にtrue
と書きます。
そしてSave policyボタンを押す。
これによって、認証を通りさえすれば、外部からInsertだけはできるようになります。でも見ること(Select)も消すこと(Delete)もできないです。
1-3. APIキーを取得
ポリシーの設定画面は終わって、左のアイコンの並びの下の方の歯車、Project Settingsへ移ります。
Project SettingsのAPIのセクションにある、Project URLと、Project API Keysの anon
public
と書いてある右の値を取得して、取っておきます。
ここまでで、受け側である Supabaseの設定はおしまい。
2. Makeで受け渡し
Makeで、毎日お昼くらいに、昨日分をGAからデータを取り出して、Supabaseへ取り込むようにします。
なおこの設定だと、1日2回実行すると2重になっちゃうし、取り忘れれば飛ぶので、注意が必要
厳密なシステムでは、この辺りはいつも苦労します。あえて毎日、直近の1週間分を重複して取り、Upsertするような形にすることが多いと思います。
Makeでは、3つのモジュールを使います。
- GAからデータを取り出す
- 結果を行数分、ループする
- Supabaseへ1行Insertする(ループして全行Insertされる)
2-1. Google Analytics 4のモジュールを追加
Google Analytics 4というモジュールのうち、Make an API Callという処理を使います。
Creating a connectionから、名前とプロパティID。
プロパティIDは、GAの画面で、「プロパティとアプリ」を選ぶところに書いてある、9桁の数字。
GAにアクセスするGoogleのアカウントを選択すると、Makeから、そのアカウントを使ってGAにアクセスするよという申請が出るので許可します。
許可すると、Makeのモジュール設定画面に戻ります。と同時に、メールが送られていて、Makeに許可が出たよというセキュリティ通知が来てます。
次に、情報を得るための問い合わせ設定です。
一応正式なドキュメントはこちら。
そしてそれを入力するMakeの画面です。
モジュール設定画面では、Base URLは、
https://analyticsdata.googleapis.com/v1beta/
URLは、
/properties/123456789:runReport
です。123456789はプロパティIDに置き換えて。
Methodは、POST
Bodyは、下記
{
"dateRanges": [
{
"startDate": "yesterday",
"endDate": "yesterday"
}
],
"dimensions": [
{"name": "date"},
{"name": "pagePath"}
],
"metrics": [
{"name": "sessions"},
{"name": "screenPageViews"},
{"name": "totalUsers"}
]
}
モジュールを作り終わったら、モジュールを右クリックして「Run this module only」をやっておきましょう。
右上に「1」と出て、1件の処理が正常終了したとわかります。そこをクリックすると、Input(=設定値)とOutput(=処理結果)が見られます。
そして次のモジュールで、結果を使えるようになります。
2-2. GAの結果を整形
GAの結果の + のところを展開していくと、取得したデータは配列型になって取得できています。
Body.raws[1]
が1行目のデータで、Body.raws[1].dimensionValues[1].value
が、1行目のディメンションの日付で、20241112
が得られました。
Body.raws[1].dimensionValues[2].value
は、ページのURLです。
メトリックも同じですね。
なお、インデックスが1から始まっているので注意です。
で、これを一気にInsertはできなくて、1行ずつInsertします。rawsでループしたくなりますね。
それをやるのがFlow ControlのIteratorモジュールです。
設定はすごく簡単で、Arrayという欄をクリックすると、GAの結果の画面が横に出るので、そこから配列要素をクリックします。
今回は、Bodyの中のrows[]です。
そしてOKで閉じて、また「Run this module only」をやっておきましょう。
2-3. Supabaseへデータを登録
3つ目のモジュールで、SupabaseへInsertします。
Makeのモジュールを追加するところでSupabaseと検索すると、Supabaseモジュールが出てくるのですが、これはMakeとは別のStartIntegrate.comが提供する非公式モジュールでした。まぁいいかもしれませんが、SupabaseはREST-API経由でも操作できるので、今回は、HTTPモジュールを使って登録します。(多分大差はないです)
- URLは、SupabaseのProject Settingsで取得した、Project URLの後ろに、
/rest/v1/テーブル名
- 私は、
ga_data
というテーブルへInsertしたいので、https://~~~.supabase.co/rest/v1/ga_data
- 私は、
- Methodは、POST
- Headersは3つ作ります
- Name:
Content-Type
、Value:application/json
- Name:
apikey
、Value:Supabaseで取得したAPIキー
- Name:
Autorization
、Value:Bearer Supabaseで取得したAPIキー
-
Bearer ~~~APIキー~~~
の形 - apikeyでも使ったAPIキーをもう一度、その前に
Bearer
をつけた形です
-
- Name:
- Body type:
Raw
- Content type:
JSON (application/json)
- Request content
{
"date": "{{20.dimensionValues[1].value}}",
"page_path": "{{20.dimensionValues[2].value}}",
"sessions": "{{20.metricValues[1].value}}",
"pageviews": "{{20.metricValues[2].value}}",
"users": "{{20.metricValues[3].value}}"
}
ここまでできたら、左下のRun onceで、全部一気に実行して、Supabaseのテーブルをご確認ください!
おわりに
やることは単純です。完全にノーコード。でもやっぱり、情報処理関係の言葉を知らない非エンジニアには、難しいだろうなとは思います。この記事を見ながらやっても、打ち間違いとかでちょいちょい躓くだろうし、何をやっているのかわからないところもあるだろうと。(私も何か書き忘れたりミスってることもあるかもしれません)
エンジニア職は、コーディングの量はどんどん減るけども、まだもう少し仕事はあるなと思いました。
でもこれと同じコーディングをしなくちゃいけなくなったとき、できるエンジニアはレアになりそうですね。そんな場面なくなるかもだけど。馬車の運転をする技術が今はいらないように。
さてこのSupabaseのデータは、Bubbleで取り込んでグラフにしてみようかなと思ってます。そうすればスマホで見られる!(GAだってスマホで見られる🙈) ほかの情報とも結合できる応用が利きますよということですね。
自動化とか、システム連携、データのグラフ化とかでお困りの方、お気軽にご相談ください。
ではよきデータ集めライフを!
追記
BubbleのデータへInsertするには API Token が必要で、無償版では使えないことがわかったので、試せませんでした。でも有償のアプリを作るなら、簡単にできそうだというところまでは、たどり着きました。