開発eurekapu-nuxt4

Nuxt 4 プロジェクトに GA4(G-9NMESN4QFX)を設置した。タグ自体は nuxt.config.tsapp.head.script に2行追加するだけで終わった。だが、その途中で AI(私)が「このサイトのドメインは eurekapu.com」と思い込んで書いてしまい、実態と食い違うミスを生んだ。気づいたあと、絶対URLを runtimeConfig に集約し、運営体制のルールを CLAUDE.md に書き足すところまで一気に進めた。

やったこと(時系列)

  1. nuxt.config.ts に GA4 タグ(gtag.js 本体 + 初期化スクリプト)を追加
  2. デプロイ先ドメインを AI が eurekapu.com と決め打ちして書き始めた
  3. 実際のデプロイ先は info-accounting.com だった(指摘されて気づいた)
  4. 関連箇所3つを info-accounting.com に統一(i18n baseUrl・ogUrl・README)
  5. 絶対URLの生成を runtimeConfig.public.siteUrl に一元化
  6. 運営体制のルールを CLAUDE.md の Conventions セクションに2項目追記

GA4 タグの設置

核心は nuxt.config.ts の以下の部分だけ。

app: {
  head: {
    script: [
      { src: 'https://www.googletagmanager.com/gtag/js?id=G-9NMESN4QFX', async: true },
      {
        children: `
          window.dataLayer = window.dataLayer || [];
          function gtag(){dataLayer.push(arguments);}
          gtag('js', new Date());
          gtag('config', 'G-9NMESN4QFX');
        `
      }
    ]
  }
}

ここは特に詰まらなかった。問題はこの次に起きた。

ドメインの取り違え - 根拠1行で決め打ちしたミス

GA4 設置後、関連する箇所(i18n baseUrl、OGP の絶対URL、README のサイト紹介文)にドメインを書こうとした。私はそこで https://eurekapu.com と書き始めた。

根拠は、nuxt.config.ts の i18n 設定にあった baseUrl: 'https://eurekapu.com' の1行だけ。プロジェクト名が eurekapu-nuxt4 だったことも、思い込みを補強した。

実際のデプロイ先は info-accounting.com だった。指摘されて初めて、設定ファイル1行を根拠に決め打ちした自分のミスに気づいた。

事業の立て付けはこうなっている。

  • コンテンツ/ブランド: エウレカープ(個人)
  • 運営主体: info-accounting 合同会社(ひとり会社)
  • 個人が作ったコンテンツを合同会社が提供を受けて運営する

つまりブランド名(eurekapu)とデプロイ先ドメイン(info-accounting.com)は意図的にずれている。AI が i18n 設定の1行だけ見て「このサイト = eurekapu.com」と単純化したのは、構造を理解せずに一番手前にあった情報で穴埋めしただけだった。

runtimeConfig で絶対URLを一元化

同じミスを構造的に防ぐため、絶対URLを書く場所を1箇所に絞った。

// nuxt.config.ts
runtimeConfig: {
  public: {
    siteUrl: 'https://info-accounting.com'
  }
}

ページ側からはこう呼ぶ。

// practice.vue
const config = useRuntimeConfig()
const ogUrl = `${config.public.siteUrl}/practice`

これでドメインを書き換えたいときに nuxt.config.ts の1箇所だけ触ればよくなり、AI が文字列を直書きする余地を減らせる。修正したのは i18n baseUrl・1ページの ogUrl・README の3箇所。

CLAUDE.md に書かないと、AI も自分も忘れる

ドメインを訂正したあと、もう1つ気づいたことがある。「コンテンツ = エウレカープ(個人)、運営 = info-accounting 合同会社」という立て付けを、私は会話の中で口頭で伝えただけだった。次のセッションで AI が git log や設定ファイルを見ても、この構造は見えてこない。

だから次に同じ作業をするとき、AI はまた同じ思い込みで eurekapu.com と書き始める可能性が高い。

CLAUDE.md の Conventions セクション(既に「外部リンクは新規タブで開く」「参考書籍の出典を明記する」が並んでいる場所)に、運営体制のルールを2項目追記した。

  • デプロイ先ドメインは info-accounting.com。絶対URL は runtimeConfig.public.siteUrl 経由で参照する
  • コンテンツのブランド名は「エウレカープ」、運営主体は「info-accounting 合同会社」。両者を混同しない

口頭で伝えた情報は、次のセッションでは消える。AI が再現可能な形で動くためには、設定ファイルかドキュメントに書き残すしかない。今回はその当たり前を、ドメイン取り違えで思い出させられた。

学び

  • 設定ファイルの1行を根拠に「このサイト = ◯◯」と決めつけるな。ブランド名とデプロイ先ドメインが一致しているとは限らない
  • 絶対URLは直書きせず runtimeConfig に集約する。書き換える場所が1箇所になり、AI の文字列直書きミスも減る
  • 口頭で伝えた事業の立て付けは、次のセッションでは消えている。CLAUDE.md に書かないと、AI も自分も同じミスを繰り返す