LoginSignup
4
5

More than 3 years have passed since last update.

Google Analytics(gtag.js)でクライアントIDを取得する裏ワザ

Posted at

概要

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.html
     var 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タグマネージャーに切り替えることをお勧めします。

つまり、将来的に実装が変更されて動作しなくなるリスクがあるためお勧めできないということだ。
あくまで現状の実装に依存したテクニックであり、変更リスクが伴う内部実装に依存してはいけない。
お手軽に取得できる裏ワザとして覚えておき、適用する場合には突然つかえなくなったときのことも想定した上でご使用ください。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5