【Astro】本番環境にのみGA計測タグを設置する方法

Webサイト分析には欠かせないGoogle Analytics(GA)やGoogle Tag Manager(GTM)ですが、開発環境では不要なアクセスデータを送信しないようにしたいものです。この記事では、Astroフレームワークを使用して本番環境のみにGA計測タグを設置する方法を解説します。
Astroにおける環境の区別
Astroでは、import.meta.env.PROD
という組み込み変数を使用して、本番環境と開発環境を区別できます。
- 開発環境(
npm run dev
):import.meta.env.PROD === false
- 本番環境(
npm run build
):import.meta.env.PROD === true
実装パターン
パターン1: 条件付きレンダリングを使用する方法
最もシンプルな方法は、条件付きレンダリングを使用することです。
---
// 本番環境かどうかを判断
const isProd = import.meta.env.PROD;
---
<html>
<head>
{isProd && (
<!-- Google Analytics タグ -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
)}
</head>
<body>
<!-- サイトコンテンツ -->
</body>
</html>
パターン2: 環境変数を使用する方法
環境変数と条件付きレンダリングを組み合わせることで、より柔軟な実装が可能です。
.env
ファイルを作成します:
# .env
PUBLIC_GA_ID=G-XXXXXXXXXX
- レイアウトファイルで環境変数を使用します:
---
// 本番環境かどうかを判断
const isProd = import.meta.env.PROD;
const gaId = import.meta.env.PUBLIC_GA_ID;
---
<html>
<head>
{isProd && gaId && (
<>
<script async src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}></script>
<script define:vars={{ gaId }}>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', gaId);
</script>
</>
)}
</head>
<body>
<!-- サイトコンテンツ -->
</body>
</html>
パターン3: Google Tag Manager(GTM)を使用する方法
GTMを使用する場合も同様のアプローチが適用できます:
---
// 本番環境かどうかを判断
const isProd = import.meta.env.PROD;
const gtmId = import.meta.env.PUBLIC_GTM_ID;
---
<html>
<head>
{isProd && gtmId && (
<>
<!-- Google Tag Manager -->
<script define:vars={{ gtmId }}>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer', gtmId);
</script>
<!-- End Google Tag Manager -->
</>
)}
</head>
<body>
{isProd && gtmId && (
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src={`https://www.googletagmanager.com/ns.html?id=${gtmId}`}
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
)}
<!-- サイトコンテンツ -->
</body>
</html>
パターン4: astro-google-analytics パッケージを使用する方法
Astroには、Google Analyticsを簡単に統合するためのパッケージ「astro-google-analytics」があります。
- パッケージをインストールします:
npm install astro-google-analytics
- レイアウトファイルで条件付きにコンポーネントをインポートします:
---
// 本番環境かどうかを判断
const isProd = import.meta.env.PROD;
// 本番環境の場合のみGoogleAnalyticsをインポート
let GoogleAnalytics;
if (isProd) {
const module = await import('astro-google-analytics');
GoogleAnalytics = module.GoogleAnalytics;
}
---
<html>
<head>
{isProd && GoogleAnalytics && <GoogleAnalytics id="G-XXXXXXXXXX" />}
<!-- その他のhead要素 -->
</head>
<body>
<!-- サイトコンテンツ -->
</body>
</html>
もっと簡単な方法は、直接条件付きでコンポーネントをレンダリングする方法です:
---
import { GoogleAnalytics } from 'astro-google-analytics';
// 本番環境かどうかを判断
const isProd = import.meta.env.PROD;
---
<html>
<head>
{isProd && <GoogleAnalytics id="G-XXXXXXXXXX" />}
<!-- その他のhead要素 -->
</head>
<body>
<!-- サイトコンテンツ -->
</body>
</html>
複数のレイアウトファイルがある場合
多くのAstroプロジェクトでは複数のレイアウトファイルを使用します。すべてのレイアウトで同じ条件付きロジックを繰り返すのは冗長なので、コンポーネントとして切り出すと良いでしょう。
---
// AnalyticsComponent.astro
const isProd = import.meta.env.PROD;
const gaId = import.meta.env.PUBLIC_GA_ID;
---
{isProd && gaId && (
<>
<script async src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}></script>
<script define:vars={{ gaId }}>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', gaId);
</script>
</>
)}
そして各レイアウトファイルでこのコンポーネントをインポートします:
---
import AnalyticsComponent from '../components/AnalyticsComponent.astro';
---
<html>
<head>
<AnalyticsComponent />
<!-- その他のhead要素 -->
</head>
<body>
<!-- サイトコンテンツ -->
</body>
</html>
環境変数の設定方法
Astroでは、.env
ファイルを使用して環境変数を設定できます:
# .env
PUBLIC_GA_ID=G-XXXXXXXXXX
PUBLIC_GTM_ID=GTM-XXXXXXXXX
PUBLIC_
接頭辞のついた環境変数は、クライアントサイドのコードからもアクセス可能です。セキュリティ上重要なAPIキーなどにはPUBLIC_
接頭辞をつけないよう注意してください。
本番環境と開発環境で異なる値を使用する場合
開発環境と本番環境で異なる値を使用したい場合は、.env.development
と.env.production
ファイルを作成できます:
# .env.development
PUBLIC_GA_ID=G-DEVELOPMENT
# .env.production
PUBLIC_GA_ID=G-PRODUCTION
これらのファイルは.env
ファイルよりも優先されます。
まとめ
Astroでは、import.meta.env.PROD
を使用して本番環境と開発環境を区別し、条件付きレンダリングによってGA計測タグを本番環境のみに設置できます。環境変数を組み合わせることで、より柔軟な実装が可能になります。
どの方法を選ぶかは、プロジェクトの要件や個人の好みによりますが、条件付きレンダリングと環境変数を組み合わせる方法が最も柔軟性が高いでしょう。
簡単な実装から複雑な実装まで、Astroはさまざまなアプローチをサポートしています。ぜひ、自分のプロジェクトに最適な方法を選んでみてください。
グリームハブ合同会社は、AIメンバーで価値創出に挑戦する会社です。人材不足が加速する中、AI活用で最前線を走ります。