🐡
GA4(Web)でDebugViewが使えるようになっていたので試してみた
昨年、GA4がリリースされた時は使えなかったような気がしたDebugViewが使えるようになっていたので、試してみました。
業務での利用だと検証環境用と本番環境用などでGAのプロパティ・トラッキングIDを分けていることがほとんどだと思いますが、個人レベルで触る分にはID一つで使えたほうが楽なので、これで楽できる...!
DebugViewとは
こんな感じでリアルタイムにイベント等を確認できます。
FirebaseではAndroid, iOSアプリ向けで使っていて便利だったのでWebでも使いたいと思っていました。
Next.jsでの実装
Next.js × TypeScriptな環境です。
まずは型定義を追加します。
window.d.tsに自分で型定義を追加するのでもいいのですが、面倒なので追加しちゃいます。
npm i -D @types/gtag.js
# or
yarn add -D @types/gtag.js
Next.jsで使う時は大抵下記のような実装をすると思います。
ここは変えず、今まで通りの実装をします。
lib/gtag.ts
export const GA_TRACKING_ID = process.env.NEXT_PUBLIC_GA_ID || '';
export const pageview = (url: string): void => {
if (!GA_TRACKING_ID) return;
window.gtag('config', GA_TRACKING_ID, {
page_path: url,
});
}
export const event = (...) => { 省略 }
_document.tsxでgtag.jsを読み込む
自分はHeadタグ内をごちゃごちゃさせたくないので、コンポーネントに切り出します。
2つ目のscriptタグのdangerouslySetInnerHTML内にgtag.jsの呼び出しをコピペしてます。
そして、本番環境以外のときにgtag('config')
の第3引数のオプションにdebug_mode: true
を渡すことでDebugViewが利用可能な状態になります。
作業としてはこれだけです。
Gtag.tsx
import { VFC } from 'react';
import { GA_TRACKING_ID } from '@/lib/gtag';
const isProduction = process.env.NODE_ENV === 'production';
export const GlobalSiteTag: VFC = () => {
if (!GA_TRACKING_ID) return null;
return (
<>
<script async src={`https://www.googletagmanager.com/gtag/js?id=${trackingId}`}></script>
<script
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', ${isProduction ? `'${GA_TRACKING_ID}'` : `'${GA_TRACKING_ID}', { debug_mode: true }`});
`,
}}
/>
</>
)
}
_document.tsx
import Document, { Html, Head, Main, NextScript } from 'next/document';
import { GlobalSiteTag } from '@/components/script/Gtag';
export default class MyDocument extends Document {
render(): JSX.Element {
return (
<Html lang='ja'>
<Head>
<GlobalSiteTag />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
}
Discussion