#概要
Google Analytics(gtag.js)でクライアントIDを取得する方法は公式ドキュメントには記載されていない。
ググってもCookieから直接リードしたり、analytics.jsから取得する方法ですっきりしない。
今回は賢者の深い理解からくる裏ワザを紹介する。
なお、analytics.jsでクライアントIDを取得する方法は公式ドキュメントにある。
https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id?hl=ja#getting_the_client_id_from_the_cookie
プログラムでクライアントIDを必要とはせず、AnalyticsにクライアントIDを送信するだけでいい場合はこちら。
https://qiita.com/qrusadorz/items/b609d1b37b116806fcae
#裏ワザ公開
mbaerschさんが公開しているコードを引用する。
https://gist.github.com/mbaersch/677cfad72592631eea4d385116c91a63
gacode-example-gtag-js.htmlvar tracker_id = GA_TRACKING_ID.replace(/-/g, '_'); var tracker = window.ga.getByName('gtag_'+tracker_id); var _lsc_clientId = tracker.get('clientId');
エレガントすぎて言葉を失いそうだけど、少しだけコード解説しておく。
Analyticsを使っていれば説明不要だろう、各個に割り当てられるGA_TRACKING_IDが含んでいる-を_に置き換える。
次にgtag.jsをロードしたらwindow.gaにオブジェクトがセットされるので、これに対して前述で加工したIDに'gtag_'のプレフィクスを付けて検索する。
そうするとなんと、analytics.jsで利用していたtrackerが取得できる!
mbaerschのお言葉をGoogle翻訳先生に日本語にしてもらうとこういうことだ。
gtag.jsは-2019年3月現在-ユニバーサルアナリティクスの単なる「シェル」です。内部的には、有名なトラッカーはまだ機能しています。
後は概要でリンクをしている公式ドキュメントにあるよう、'clientId'を引数としてget()をコールすればクライアントIDが取得できる。
#Conclusion
mbaerschさんによってtrackerを引っ張り出すという裏ワザを手に入れた。
しかし、mbaerschさん曰く
これは不安定なソリューションであるだけでなく、内部のユニバーサルアナリティクストラッカーがあるという事実にも依存しています。gtag.jsの開発が続けば、将来的には常にそうなるとは限りません。したがって、このバージョンのコードは暫定的なソリューションにすぎません。一般に、gtag.jsで直接サポートされていないcustomTaskまたはその他の関数を使用する場合、このような一時的な配置を使用することはお勧めしません。このような場合、ユニバーサル構文を使用し続けるか、すぐにGoogleタグマネージャーに切り替えることをお勧めします。
つまり、将来的に実装が変更されて動作しなくなるリスクがあるためお勧めできないということだ。
あくまで現状の実装に依存したテクニックであり、変更リスクが伴う内部実装に依存してはいけない。
お手軽に取得できる裏ワザとして覚えておき、適用する場合には突然つかえなくなったときのことも想定した上でご使用ください。