つらくない Google Analytics を構想する
#つらくないGoogleAnalytics
フロントエンドの人なら多少なりとも共感してもらえると思うが、 #GoogleAnalytics は存在がつらい。
GA がつらすぎるせいで効果測定というビジネス上極めて大事な行為に苦手意識を持っているエンジニアは割といるんじゃないかと思う(何を隠そう私がその一人だ)。
自分はスタートアップをやりたいと思ったことはないものの、何かサービスを新しくやるなら GA の代替を作る仕事なんかは良いんじゃないかと思ったことがある(でも金にはならなそうだ。あらゆるイベントを記録するのに必要なデータベースの規模が大きそうだし、トラッキングに対する世間の風当たりも強いし)。
ここではつらくない Google Analytics があるとしたらどういうものになるかを構想していきたい。
------
Google Analytics のつらさにもいくつか種類がある。ソフトの出来に関すること(なぜかダッシュボードが異常に重く、フィルタリングやグループ化などの基本操作が見つかりにくい)もあれば、トラッキングそのものの辛さ( HTML を普通に改修することが破壊的変更になりうる、GA 用のクラスやイベント名をまともに管理できてる現場を見たことがない )もある。
前者よりも後者のほうが本質的なので、ここでは特に後者を考えたい。
データの連続性が重視されるのでコードを消したりイベントをリネームすることが躊躇される
GA イベントの連続性を保つためにリファクタリングを邪魔されていると感じることが多い
ここは #コミュニケーション でなんとかすべき点ではあるが…
結果として負債化しやすい
「このイベントは deprecated です。○月△日からはあのイベントを追ってください」つって連続したグラフが簡単に出せたりして欲しい
コードの管理と分析ツールが乖離している
悪い意味で疎結合(本当は密結合であるものが技術的な都合で分断されている)と感じることが多い
ノーコードの Web 制作に良い点があるとすれば、制作ツールと GA と連携することによってマークアップと分析のための業務が完全に一体化できることかもしれないと思っている
「これ GA がリポジトリの内容知ってたら解決しない?」と思うことがときどきある。
HTML や DOM にはコンバージョンイベントを表す標準化されたセマンティクスがない
たとえば最近は aria 属性を書くことでテスタビリティやスタイリングに一貫性を生じさせることができるようになったが、同じことがトラッキングやイベントの分野でも起きて欲しい
JS の標準クラスとかでも良い。Redux はドメインイベントをオブジェクトで表現する設計を広めることに貢献したが、あくまで特定ライブラリでの文化にとどまってしまった
コードを読んでこのイベントがどのくらい大事なのかわからないことが多い
<button data-conversion-name="購入完了">購入完了</button> みたいな工夫が人によっていろいろされてるがこれだという方法がない
こういう管理は GTM が得意という印象だが GTM にしてももうちょいなんとかならんかと思っている
同じルーティングであっても違うページ扱いされることが普通
たとえば /items/1 と /items/2 はルーティング上「同じページ」なのでまとめて集計したいという(当たり前の)欲求を叶えるのがめんどくさい
URL の正規表現検索は GA に存在するが、検索結果の一覧にしか使えない
items/:id から /cart に遷移した数を取るみたいなことをしようとするととたんに辛くなる。
結果的に <a> タグのクリックのたびにページ遷移のイベントを送ることになるのだが、本来そんなのは GA が勝手にやってほしいと思う
これに関連して、クローラやトラッキングツール向けに「アプリケーションのルーティング情報」を教える技術があればいろいろ簡単になるのにと感じることが多い。標準仕様として定義されて欲しい。
最近 URLPattern という仕様が標準として提案されたっぽい。が、この文脈で使えるだろうか?
https://web.dev/urlpattern/
いや、パターンを表すブラウザ API より、どちらかというと robots.txt や manifest.json のような「ルーティング定義ファイル仕様」が欲しい物に近い
<meta name="routing-definition" href="/routes.json"> といった感じのやつ
この辺を解決する方法としては「GA に当たるツールがリポジトリと連携できる」みたいな機能が必要になると思う
新しいイベントを GUI で追加したら連携しているリポジトリに TypeScript の型定義を更新した PR を自動で送るとか
Next.js の filesystem based routing を認識して /items/1 と /items/2 が同じページであると認識するとか
Next 以外にも「ルーティング一覧」を吐けるフレームワークなら対応できると良い
たとえば Rails なら rake routes をパースすることで同じことを実現できるだろう
------
一応前者の、GA の出来に関するツラミも挙げていこう
とにかく重い
UI が意味不明
GROUP BY とか SORT みたいな当たり前の機能が何故か遠回りになる
結果的に、GA のダッシュボードなんか使うより BigQuery で GA のイベントを整形したテーブルに SQL を投げたほうが良くない?となることが多い
そして GA の BQ エクスポートのテーブルはマジで使いづらいので、分析用に使いやすいテーブルにする操作が必須である
こういうテーブルを作ってくれる人は本当にありがたいが、これは本来お前の仕事なんだぞ GA という気持ちを持っている
最近は #AI に #SQL を書かせることで GA からエクスポートしたテーブルをそのまま扱うのがやりやすくなったが…
JS の読み込み速度が遅い
Lighthouse でパフォーマンスを測って改善してたら GA と GTM が邪魔になることは有名