2021.06.16 コラム
【データ連携担当のトラブルメモ】#3. 計測タグを更新する際の注意点(Treasure Data)
● はじめに
本シリーズでは「データ連携担当のトラブルメモ」と題して、DataCurrent社データ連携担当として携わってきた、データ連携にまつわる様々なトラブルやヒヤリ・ハットを振り返り、その原因究明のポイントや対策などを備忘録的に整理してまいります。
非常に基礎的な内容も含まれると思いますが、それゆえにこれからデータ連携領域を担当されるという方々の一助になるようなものにできればと思います。
● 今回のデータ連携担当(プロフィール)
田中 芳樹
2008年4月に株式会社サイバー・コミュニケーションズ(CCI)入社。Google Analyticsを始めとしたアクセス解析ツールやKrux、BlueKaiなどのDMPの実装・運用領域を担務。2021年2月よりデータの利活用を推進するコンサルティング会社「株式会社DataCurrent」に出向し、事業会社の基盤構築・運用やオーディエンスデータの連携を担当。
● 第3回 計測タグを更新する際の注意点
タグ実装という領域
データ連携担当としてかかわる範囲は当然「データを連携すること」になりますが、そこには「連携するデータを用意すること」も含まれることがあります。なので、時にはWebサイトのアクセスログデータを確保するためのタグ実装を担当することもあります。
計測タグの実装はとりわけ神経を使います。やり直しがきかないからです。実装したタグに不備があって計測情報が蓄積されていなかった場合、その拾えなかった情報はすべてロストです。怖いですね。原則として、このあたりのタグの生成や計測確認は複数人でのチェックがかかる運用で進めることが望ましいです。
新しくタグを埋めるだけではなく、既存タグの更新を行う場合も同様に注意が必要なのですが、過去にTreasure Dataのタグ更新で経験した事象が、いくつか注意点など示唆を含んでいるかなと思いましたので、ここで紹介させていただこうと思います。
環境情報
弊社利用の計測サービス: Treasure Data
計測機能: Javascript SDK
その時何が起きたか
ある日、利用していたTreasure Dataでタグが新しくなるという話が舞い込みました。Treasure Dataでは計測タグのことを「javascript SDK」と呼ぶのですが、そのJSファイルのバージョンが既存の1.9.2から2.0に上がるというのです。
ちょうどGDPRなど、データ計測に対する許諾取得という考え方が広がっていった頃のことです。Treasure Dataもその流れに対応すべく、タグを新しくしたということでした。
変更内容を確認して、一見、呼び出すJSファイルを更新すればよいだけのように見えました。タグの記述の中で「//cdn.treasuredata.com/sdk/1.9.2/td.min.js」を呼び出しているので、それを「2.0/td.min.js」に更新すればよいと。実際、それで読み込みエラーなどは起こりませんでした。
が、
それだけだとCookie IDなど一部の項目で計測が発生しなかったのです。危ないところでした。よくよく変更点を調べてみると、「td.setSignedMode()」というメソッドが追加されています。データ計測の許諾が取得できている場合はこのメソッドを追加で有効にしないと、計測情報の一部が欠落してしまうという設計に変わっていたのでした。
タグのルールが更新されたとき、計測そのものの発生を左右する要素が追加されているかもしれないので、変更内容はしっかりと把握しないといけないですね。
ちなみにこのあたりはその後になって新たに「startInSignedMode」という、より使いやすいメソッドも追加されています。気になる人は以下の公式ドキュメントをご参照ください。
(Treasure Data javascript SDKについて、詳細はこちら)
もう1つの問題、Treasure Data重複実装のケース
ただ、この話はこれだけでは終わりませんでした。私達がTreasure Dataをよく使っているように、他でもTreasure Dataを利用するサービスが多々ありまして、時折同じWebサイトのページ上で複数のTreasure Dataの計測タグが実装されるケースに出会います。
この時、複数のJSファイルが呼び出されるわけですが、Treasure Dataには最初に呼び出されたJSファイルが有効に働く、という特性を持っています。そして今回問題になったのは、新たに追加された「td.setSignedMode()」というメソッドはバージョン2.0以上のタグでは必須になる一方で、バージョン2.0未満ではエラーになってしまうという点でした。つまり、
・先にバージョン2.0以上のタグが読み込まれていた後に、「td.setSignedMode()」のないバージョン2.0未満のタグを発火させる ⇒ 後者の計測が発生しない。
・先にバージョン2.0未満のタグが読み込まれていた後に、「td.setSignedMode()」ありのバージョン2.0以上のタグを発火させる ⇒ エラーとなりこちらも計測が発生しない。
という課題が発生しました。
対策
結局、私達が使うTreasure Dataのタグはなるべく遅く動かすようにして、先に2.0未満が呼ばれようと、2.0以上が呼ばれようと、どちらでも対応できるように対処しました。
javascriptでは、
try { エラー有無を判定したいプログラム } catch (e) { エラーがあった場合の対処 }
というエラー回避用の便利な構文があるので、「try { td.setSignedMode()} catch (e) {}」などのように記述して、先にバージョン2.0未満のタグが読み込まれてエラーが発生しても、回避できるようにして実装をすることになりました。
※なお、後で同じ目的で追加された「startInSignedMode」ではこのあたりのSDKバージョンの違いによる動作の問題は発生ないようになっているようです。
まとめ
Webページに計測タグを新しく実装したり、更新する場合は
- 複数人で動作や計測結果のチェックを行う
- タグ全体の動作を左右する要素には特に注意を払う
- (レアケースではあるが)複数のタグを同一ページで動かす際の挙動にも注意する
弊社では、新規データソースの連携方法の整理や実際の連携作業、開発といったことから、既に連携しているデータのトラブル、ご相談まで幅広くサポートしています。お困りごとございましたらお気軽にご相談ください。
本件に関するお問い合わせは下記にて承ります。
株式会社DataCurrent
info@datacurrent.co.jp