ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
連携・プラグイン/2026-04-02中級

Antigravity × Google Analytics 4 完全統合ガイド — WebとモバイルのGA4実装を自動化する

AntigravityとGoogle Analytics 4(GA4)を連携させ、WebアプリやモバイルアプリへのGA4実装を効率化する方法を解説します。イベント設計からデータレイヤー構築まで実践的に学べます。

Google Analytics 4GA4Antigravity338analytics3データ分析Firebase6

取り組みの背景:なぜ GA4 × Antigravity なのか

アプリやWebサービスを公開した後、「ユーザーがどこで離脱しているか」「どの機能がよく使われているか」を把握することは、プロダクトの成長に欠かせません。Google Analytics 4(GA4)はその答えを提供する強力な分析基盤ですが、実装には意外と手間がかかります。

Antigravity(Google の AI IDE)を活用すれば、GA4 の実装作業を大幅に効率化できます。ここではNext.js や React アプリへの GA4 統合から、カスタムイベントの設計、Firebase 経由のモバイルアプリ連携まで、実践的なワークフローをご紹介します。

この記事で学べること:

  • Antigravity を使った GA4 の基本セットアップ方法
  • カスタムイベント設計とデータレイヤーの実装
  • コンバージョン計測の自動化
  • モバイルアプリ(Firebase Analytics)との統合

GA4 の基礎知識:Universal Analytics との違い

GA4 は、従来の Universal Analytics(UA)と異なり、イベントベースのデータモデルを採用しています。UAではセッションとページビューが中心でしたが、GA4ではすべてのインタラクションが「イベント」として記録されます。

主な変更点:

  • イベントベース: クリック・スクロール・購入など、すべての操作がイベントとして統一的に扱われる
  • クロスプラットフォーム: Web・iOS・Android のデータを 1 つのプロパティで管理可能
  • BigQuery 連携: 無料で BigQuery へエクスポートでき、高度な分析が可能
  • 機械学習の活用: 予測指標(離脱予測・収益予測など)が標準搭載

Step 1:Antigravity に GA4 プロジェクトの情報を渡す

Antigravity でGA4実装を始める前に、プロジェクトのコンテキストを整理しておくと作業がスムーズになります。

まず、AGENTS.md(または .antigravity/rules.md)に以下を記述します:

## Analytics Requirements
- GA4 Measurement ID: G-XXXXXXXXXX
- Framework: Next.js 15 (App Router)
- Events to track:
  - page_view (auto)
  - button_click (custom)
  - form_submit (custom)
  - purchase (enhanced ecommerce)
- Conversion goals:
  - form_submit → Lead
  - purchase → Revenue

このコンテキストを設定することで、Antigravity が適切なコード生成を行いやすくなります。

Step 2:Next.js への GA4 基本実装

Antigravity のチャットで次のようにプロンプトを入力します:

Next.js 15 App Router に Google Analytics 4 を実装してください。
Measurement ID は G-XXXXXXXXXX です。
- src/components/GoogleAnalytics.tsx を作成
- layout.tsx に組み込む
- next/script の afterInteractive で読み込む
- 開発環境では無効にする

Antigravity が生成するコードの例:

// src/components/GoogleAnalytics.tsx
import Script from "next/script";
 
interface GoogleAnalyticsProps {
  measurementId: string;
}
 
export const GoogleAnalytics = ({ measurementId }: GoogleAnalyticsProps) => {
  // 開発環境ではGA4を無効化(不要なデータ汚染を防ぐ)
  if (process.env.NODE_ENV !== "production") {
    return null;
  }
 
  return (
    <>
      <Script
        strategy="afterInteractive"
        src={`https://www.googletagmanager.com/gtag/js?id=${measurementId}`}
      />
      <Script
        id="google-analytics"
        strategy="afterInteractive"
        dangerouslySetInnerHTML={{
          __html: `
            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            gtag('js', new Date());
            gtag('config', '${measurementId}', {
              page_path: window.location.pathname,
              send_page_view: false
            });
          `,
        }}
      />
    </>
  );
};
// src/app/layout.tsx(抜粋)
import { GoogleAnalytics } from "@/components/GoogleAnalytics";
 
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="ja">
      <body>
        {children}
        <GoogleAnalytics measurementId={process.env.NEXT_PUBLIC_GA_ID!} />
      </body>
    </html>
  );
}

環境変数の設定: .env.localNEXT_PUBLIC_GA_ID=G-XXXXXXXXXX を追加します。本番環境では Vercel や Cloudflare Workers の環境変数として設定してください。

Step 3:カスタムイベントのユーティリティ関数を自動生成

GA4 のカスタムイベントを送信するユーティリティ関数を Antigravity に作成してもらいます:

以下の GA4 カスタムイベント用ユーティリティを TypeScript で実装してください:
- trackEvent(eventName, params): 汎用イベント送信
- trackButtonClick(buttonName, location): ボタンクリック追跡
- trackFormSubmit(formName, success): フォーム送信追跡
- trackPurchase(transactionId, value, currency): 購入イベント
- 型安全性を確保すること(GA4 標準パラメータの型定義)

生成されるユーティリティ関数:

// src/lib/analytics.ts
 
// GA4標準イベントパラメータの型定義
type GA4EventParams = {
  [key: string]: string | number | boolean | undefined;
};
 
// gtag関数が存在するか確認してからイベント送信
const gtag = (...args: unknown[]) => {
  if (typeof window !== "undefined" && "gtag" in window) {
    (window as Window & { gtag: (...a: unknown[]) => void }).gtag(...args);
  }
};
 
/**
 * 汎用イベント送信
 */
export const trackEvent = (eventName: string, params?: GA4EventParams) => {
  gtag("event", eventName, params);
};
 
/**
 * ボタンクリック追跡
 * @param buttonName ボタンの名前(例: "sign_up_button")
 * @param location ボタンの設置場所(例: "hero", "navbar")
 */
export const trackButtonClick = (buttonName: string, location: string) => {
  trackEvent("button_click", {
    button_name: buttonName,
    button_location: location,
  });
};
 
/**
 * フォーム送信追跡
 * @param formName フォームの識別名
 * @param success 送信成功かどうか
 */
export const trackFormSubmit = (formName: string, success: boolean) => {
  trackEvent("form_submit", {
    form_name: formName,
    success: success,
  });
};
 
/**
 * 購入イベント(コンバージョン計測)
 * @param transactionId 注文ID
 * @param value 購入金額
 * @param currency 通貨コード(例: "JPY")
 */
export const trackPurchase = (
  transactionId: string,
  value: number,
  currency: string = "JPY"
) => {
  trackEvent("purchase", {
    transaction_id: transactionId,
    value: value,
    currency: currency,
  });
};

Step 4:ページビュー追跡(App Router 対応)

Next.js の App Router では、クライアントサイドのナビゲーションを自動追跡するための処理が必要です。Antigravity にプロンプトします:

Next.js App Router でのクライアントサイドナビゲーション時に
GA4 の page_view イベントを送信する仕組みを実装してください。
usePathname と useSearchParams を使ったカスタムフックを作成してください。
// src/hooks/usePageView.ts
"use client";
 
import { usePathname, useSearchParams } from "next/navigation";
import { useEffect } from "react";
import { trackEvent } from "@/lib/analytics";
 
export const usePageView = () => {
  const pathname = usePathname();
  const searchParams = useSearchParams();
 
  useEffect(() => {
    // ページパスが変わったときにpage_viewイベントを送信
    const url = pathname + (searchParams.toString() ? `?${searchParams.toString()}` : "");
 
    trackEvent("page_view", {
      page_path: url,
      page_title: document.title,
    });
  }, [pathname, searchParams]);
};

このフックを layout.tsx 内の Client Component から呼び出します:

// src/components/PageViewTracker.tsx
"use client";
 
import { Suspense } from "react";
import { usePageView } from "@/hooks/usePageView";
 
const PageViewTrackerInner = () => {
  usePageView();
  return null;
};
 
// useSearchParams は Suspense でラップする必要がある
export const PageViewTracker = () => (
  <Suspense fallback={null}>
    <PageViewTrackerInner />
  </Suspense>
);

Step 5:Firebase Analytics でモバイルアプリに対応する

iOS・Android アプリでは、Firebase Analytics(GA4 のモバイル版)を使います。Antigravity に Firebase Analytics の実装も依頼できます:

React Native アプリに Firebase Analytics を統合してください。
- @react-native-firebase/analytics を使用
- カスタムイベント送信の共通関数を作成
- iOS と Android 両対応

Firebase Analytics と GA4 は同じ管理画面で確認できるため、Web とモバイルのデータを一元管理できます。詳細な Firebase 連携については、Antigravity × Firebase 自動プロビジョニングガイド も参考にしてください。

Step 6:コンバージョン計測の自動化テスト

実装後は、GA4 のデータが正しく送信されているかを確認する必要があります。Antigravity でテストコードも自動生成できます:

GA4 analytics.ts のユーティリティ関数のユニットテストを Vitest で書いてください。
window.gtag のモックも含めてください。
// src/lib/__tests__/analytics.test.ts
import { describe, it, expect, vi, beforeEach } from "vitest";
import { trackEvent, trackButtonClick, trackPurchase } from "../analytics";
 
describe("GA4 Analytics Utils", () => {
  let gtagMock: ReturnType<typeof vi.fn>;
 
  beforeEach(() => {
    // window.gtag をモック
    gtagMock = vi.fn();
    Object.defineProperty(window, "gtag", {
      value: gtagMock,
      writable: true,
    });
  });
 
  it("trackEvent が正しいパラメータで gtag を呼ぶ", () => {
    trackEvent("button_click", { button_name: "signup" });
 
    expect(gtagMock).toHaveBeenCalledWith("event", "button_click", {
      button_name: "signup",
    });
  });
 
  it("trackButtonClick がイベントを送信する", () => {
    trackButtonClick("signup_button", "hero");
 
    expect(gtagMock).toHaveBeenCalledWith("event", "button_click", {
      button_name: "signup_button",
      button_location: "hero",
    });
  });
 
  it("trackPurchase が購入イベントを送信する", () => {
    trackPurchase("order_123", 1480, "JPY");
 
    expect(gtagMock).toHaveBeenCalledWith("event", "purchase", {
      transaction_id: "order_123",
      value: 1480,
      currency: "JPY",
    });
  });
 
  it("gtag が存在しない場合はエラーを投げない", () => {
    // @ts-expect-error window.gtagを削除
    delete window.gtag;
 
    // エラーが発生しないことを確認
    expect(() => trackEvent("test_event")).not.toThrow();
  });
});

テストを実行:

# Antigravityのターミナルから
npx vitest run src/lib/__tests__/analytics.test.ts

期待される出力:

✓ src/lib/__tests__/analytics.test.ts (4)
  ✓ trackEvent が正しいパラメータで gtag を呼ぶ
  ✓ trackButtonClick がイベントを送信する
  ✓ trackPurchase が購入イベントを送信する
  ✓ gtag が存在しない場合はエラーを投げない

Test Files  1 passed (1)
Tests       4 passed (4)

Step 7:GA4 BigQuery 連携でデータ分析を深化させる

GA4 の強力な機能のひとつが、BigQuery との無料連携です。Antigravity にデータ分析クエリの作成も依頼できます:

GA4 BigQuery エクスポートデータから以下を分析する SQL を書いてください:
- 過去30日のページ別コンバージョン率
- デバイス別の平均セッション時間
- ファネル分析(top_page → form_view → form_submit)

Antigravity が生成するサンプルクエリ:

-- ページ別コンバージョン率(過去30日)
SELECT
  page_path,
  COUNT(DISTINCT user_pseudo_id) AS total_users,
  COUNTIF(event_name = 'form_submit') AS conversions,
  ROUND(
    COUNTIF(event_name = 'form_submit') * 100.0 / COUNT(DISTINCT user_pseudo_id),
    2
  ) AS conversion_rate_pct
FROM
  `your-project.analytics_XXXXXXX.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
  AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
GROUP BY page_path
ORDER BY total_users DESC
LIMIT 20;

まとめ

Antigravity を使った GA4 統合のポイントをまとめます。

実装の流れ: プロジェクトコンテキストを AGENTS.md に記述 → GoogleAnalytics コンポーネントの生成 → カスタムイベントユーティリティの作成 → ページビュー追跡フックの実装 → テストコードの自動生成。

Antigravity の強み: 型安全な TypeScript コードの生成、テストコードの自動化、BigQuery 分析クエリの作成など、GA4 実装全体を効率化できます。GA4 のドキュメントを参照しながら実装する手間を大幅に削減できるのが大きなメリットです。

GA4 の実装が完了したら、取得したデータをもとにプロダクトを改善し続ける点が肝心です。データに基づく意思決定(Data-Driven Decision Making)は、個人開発においても大きな武器になります。

分析基盤の構築と並行して、より精度の高い A/B テストやファネル分析に興味がある方には、Antigravity × Sentry エラー監視との組み合わせガイド もあわせてご覧ください。

GA4 の概念からビジネス活用まで体系的に学べる一冊です。

シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

連携・プラグイン2026-04-08
Antigravity と Vertex AI・Firebase の本番連携でつまずくエラーへの対処
AntigravityエージェントをVertex AIおよびFirebaseと本番連携する際のエラーを完全網羅。認証・IAM権限・Firestoreアクセス・Cloud Functions連携・リアルタイム同期エラーまで実装コード付きで徹底解説します。
連携・プラグイン2026-07-11
許可を尋ねられても、答える人がいない — 統一パーミッションを無人実行の契約として書く
v2.2.1 の統一パーミッションは対話を前提にしています。深夜に走るスケジュール実行では、その前提が崩れます。allow / deny / queue の三分法でポリシーを事前宣言し、無人でも止まらない契約として書き下す設計をまとめました。
連携・プラグイン2026-07-09
Antigravity からローカル LLM を呼ぶ — Ollama・LM Studio 統合と実用ワークフロー
Ollama や LM Studio を介した Antigravity のローカル LLM 運用を、実測ベンチ・損益分岐の計算モデル・JSON 出力を強制するラッパー実装まで含めて整理しました。機密データを扱う案件と API コストの両面から、乗り換えの判断材料を揃えています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →