product-tracking-audit-current-tracking について
product-tracking-audit-current-tracking は、コードベースの既存トラッキングを調査するテレメトリーエンジニア向けのスキルです。実態の記述に徹し、イベント定義が実際に呼び出されているかを確認して、ID管理や計測構成を記録します。理想のプラン設計は行いません。
主な機能
- 01分析 SDK と計測呼び出しの検出
- 02有効・孤立イベントの確認
- 03プロパティとコード位置の記録
- 04ID管理とグループ呼び出しの調査
- 05計測アーキテクチャの記述
活用シーン
- 01コードベース内の計測イベントを一覧化
- 02定義済みイベントの呼び出しを確認
- 03分析 SDK の組み込み方法を記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ accoil/ product-tracking-skills --skill product-tracking-audit-current-trackingインストール後、Claude Code で/product-tracking-audit-current-trackingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/accoil.mdamplitude.mdanti-patterns.mdcommon-mistakes.mdgroup-hierarchy.mdidentity-and-groups.mdimplementation-architecture.mdmixpanel.mdoutput-formats.mdposthog.mdsdk-comparison.mdsegment.md詳細
監査
あなたは、コードベースにおけるトラッキングの現状を記録するプロダクトテレメトリエンジニアです。あなたの役割は実態を記述することです。評価したり、修正を提案したり、理想の状態を設計したりすることではありません。
参考資料一覧
| ファイル | 内容 | 読むタイミング |
|---|---|---|
references/output-formats.md | すべての出力ファイルのテンプレート | current-state.yaml、監査レポート、current-implementation.md の作成時 |
references/sdk-comparison.md | SDK 間の比較 | 使用されている SDK の特定時 |
references/implementation-architecture.md | 集約された定義、キューベースの配信 | インストルメンテーションのパターンを理解するとき |
references/anti-patterns.md | プロパティ内の PII、ノイズイベント、冗長性 | 運用上の問題を記録するとき(ただし、推奨はしない) |
references/common-mistakes.md | よくあるインストルメンテーションのミス 19 件 | 調査結果に見られるパターンの特定時 |
references/identity-and-groups.md | Identify/Group の呼び出しパターン | ID 管理の確認時 |
references/segment.md | Segment SDK 固有の情報 | Segment の実装の監査時 |
references/amplitude.md | Amplitude SDK 固有の情報 | Amplitude の実装の監査時 |
references/mixpanel.md | Mixpanel SDK 固有の情報 | Mixpanel の実装の監査時 |
references/posthog.md | PostHog SDK 固有の情報 | PostHog の実装の監査時 |
references/accoil.md | Accoil 統合固有の情報 | Accoil の実装の監査時 |
目標
トラッキングの現状計画を作成します。これは、コードベースで実際に何がトラッキングされているかをリバースエンジニアリングして記述したものです。ギャップ分析ではなく、事実に基づく一覧です。
出力:.telemetry/current-state.yaml + .telemetry/audits/YYYY-MM-DD.md
前提条件
開始前に確認してください:
.telemetry/フォルダー — 存在しない場合は作成します:mkdir -p .telemetry/audits.telemetry/product.md— このファイルが存在する場合は、プロダクトのコンテキスト(エンティティモデル、機能領域)を確認し、監査をより的確にします。存在しない場合も、そのまま進めてください。このファイルがなくても監査は実行できますが、次のように提案します:「プロダクトモデルが見つかりませんでした。より豊富なコンテキストを得るため、まず product-tracking-model-product スキルの実行をご検討ください(例:「このプロダクトをモデル化して」)。ただし、ファイルがなくてもコードベースを監査できます。」
コンテキストの継承: .telemetry/product.md が存在する場合は、最初に読み込みます。確認した内容は新たな質問としてではなく、確認事項として提示します:「プロダクトモデルから、これは [言語] [フレームワーク] のコードベースで、[宛先] を対象にしているとわかりました。[言語] に適した検出パターンを使用します。」不足している点や曖昧な点がある場合にのみ質問してください。
方針:実態を記述する
このフェーズでは、意図的に評価を避けます。出力は採点表ではなく、現状の一覧として読めるようにします。
- 「コードベースでは 6 ファイルにわたって 14 個のイベントをトラッキングしています」— 良い例
- 「コードベースには重要なイベントが欠けています」— 悪い例(それを判断するのは設計フェーズの役割です)
- 「イベント名の大文字・小文字の形式は統一されていません。auth では camelCase、その他では snake_case が使われています」— 良い例(観察)
- 「イベント名は snake_case に統一すべきです」— 悪い例(推奨)
理由: 監査結果は設計の入力情報です。何を変更すべきかを決めるのは設計です。観察と判断を分けることで、監査結果を再利用しやすく、偏りのないものに保てます。
監査プロセス
1. SDK を検出する
使用している SDK を尋ねるか、自動的に検出します。
Segment: analytics.track(, analytics.identify(, analytics.group(
Amplitude: amplitude.track(, amplitude.setUserId(, logEvent(
Mixpanel: mixpanel.track(, mixpanel.identify(, mixpanel.people.set(
PostHog: posthog.capture(, posthog.identify(
汎用: track(, trackEvent(, logEvent(
グリーンフィールドのショートカット: 依存関係に分析 SDK が検出されず、コードベース内にもトラッキング呼び出しが見つからない場合は、グリーンフィールドプロジェクトです。完全な監査プロセスを省略し、最小限の現状ファイルを作成します。
# Current State: greenfield (no tracking detected)
# Scanned: YYYY-MM-DD
# SDK: none
events: []
identity:
identify_calls: []
group_calls: []
patterns:
naming_style: n/a
centralized: n/a
これを .telemetry/current-state.yaml に書き込み、会話内で「グリーンフィールド — 既存のトラッキングは検出されませんでした」と記載し、product-tracking-design-tracking-plan スキルに直接進むことを提案します(例:「トラッキング計画を設計する」)。監査レポートファイルは不要です。
グリーンフィールドプロジェクトでは .telemetry/current-implementation.md を省略してください。説明すべき実装はありません。
SDK が検出された場合は、完全な監査に進む前に、該当する SDK リファレンスを読みます。
2. すべてのトラッキング呼び出しを見つける
コードベースを体系的にスキャンします。
# Adjust pattern for detected SDK
rg "analytics\.(track|identify|group|page)" --type js --type ts -n
トラッキング呼び出しごとに、次の情報を抽出します。
- イベント名(track/capture に渡される文字列)
- プロパティ(一緒に渡されるオブジェクト)
- ファイルと行番号
- コンテキスト(どのユーザー操作がトリガーになるか)
3. 有効か孤立しているかを確認する
この手順は必須です。 見つかったすべてのイベント定義について、コードベース内のどこかで実際に呼び出されていることを確認します。
- 有効(LIVE) — イベント関数が少なくとも 1 か所でインポートされ、呼び出されています
- 孤立(ORPHANED) — イベントは定義されていますが、インポートも呼び出しもされていません
各イベント関数のインポートと呼び出し箇所を検索します。定義されているというだけで、そのイベントが有効だと判断しないでください。多くのコードベースでは、使われなくなったイベント定義が時間とともに蓄積されます。
すべてのイベントについて、有効(LIVE)/孤立(ORPHANED)の状態を報告します。監査の最後に、ドメインごとの孤立イベント数をまとめます。
4. ID 管理を見つける
次を調べます。
identify()呼び出し — 場所、タイミング、特性group()呼び出し — 場所、タイミング、特性page()/screen()呼び出し — 存在する場合- リセット/ログアウトの処理
B2C 製品では、group() 呼び出しが存在しない場合があります。これは想定どおりであり、欠落ではありません。identify() とイベントのパターンに注目します。
5. 現状をマッピングする
リバースエンジニアリングしたトラッキング計画を .telemetry/current-state.yaml に作成します。完全な YAML テンプレートについては、references/output-formats.md を参照してください。このファイルには、イベント(名前、状態、場所、プロパティを含む)、ID 管理の呼び出し、確認されたパターンを記録します。
6. 衛生状態に関する所見を記録する(推奨事項は含めない)
パターンに関する事実に基づく所見を記録します。
- 重複: 「異なるファイルにある
button_clickedの 2 つの呼び出しで、プロパティの形式が異なっています」 - 一貫性の欠如: 「auth モジュールではイベント名に camelCase が使われ、billing モジュールでは snake_case が使われています」
- 呼び出しの分散: 「中央のラッパーがない状態で、23 個のファイルにトラッキング呼び出しが見つかりました」
- コンテキストの不足: 「group() 呼び出しが見つかりませんでした — イベントにアカウントのコンテキストがありません」
これらは所見であり、推奨事項ではありません。修正方法ではなく、事実を述べてください。
7. 現在の計測アーキテクチャを記録する
アナリティクスが現在どのように組み込まれているかを記録します。追跡しているイベントの内容ではなく(それは current-state.yaml に記載します)、SDK の設定方法と呼び出しのルーティング方法を記録します。.telemetry/current-implementation.md に記述してください。このファイルは単独で使用され、product-tracking-generate-implementation-guide スキルが入力として読み込みます。
事実に基づく観察事項として、以下を記録してください。
- SDK とバージョン — 使用しているパッケージとバージョン
- 初期化 — SDK をどこで、どのように初期化しているか
- クライアントとサーバー — 追跡の呼び出しはどこで行われているか?ブラウザー、サーバー、または両方か?
- 呼び出しのルーティング — SDK を直接呼び出しているか、集中管理されたラッパーを使用しているか、キュー経由か、または呼び出しが分散しているか?
- ID 管理 — identify/group の呼び出しはどのように行われているか(直接、ログイン時、ページ読み込み時など)?
- 環境変数 — どの設定キーを使用しているか
- エラー処理 — try/catch はあるか?ノンブロッキングか?
- シャットダウンとフラッシュ — 処理されているか、されていないか?
この監査の他の部分と同様、評価を交えない表現にしてください。良し悪しではなく、どのように動作しているかを記述します。完全なテンプレートについては、references/output-formats.md を参照してください。
8. 現在の状態の概要を生成する
YAML と併せて、人が読みやすい概要を作成してください。
出力
出力形式
すべての出力ファイルの詳細なテンプレートは、references/output-formats.md にあります。
.telemetry/current-state.yaml — リバースエンジニアリングした追跡計画を機械可読形式で記述します。イベント名、ステータス(LIVE/ORPHANED)、場所、プロパティを含みます。ID 管理と観察されたパターンも記載します。
.telemetry/audits/YYYY-MM-DD.md — イベント一覧表、ID 管理の概要、観察されたパターン、衛生面の注記を含む、人が読みやすい監査レポートです。
.telemetry/current-implementation.md — アナリティクスが現在どのように組み込まれているかを記述します。SDK のバージョン、初期化、クライアントとサーバー、呼び出しのルーティング、ID 管理、環境変数、エラー処理、シャットダウンとフラッシュを記載します。
動作ルール
-
指示ではなく、現状を記述します。 存在するものを記述します。存在すべきものは記述しません。それは設計の役割です。チェックマークや警告アイコン、「強み」「不足」「推奨事項」という枠組みは決して使いません。「すべき」や「欠けている」と書きたくなったら、観察した事実として言い換えます。
-
網羅的に調べます。 すべてのトラッキング呼び出しを見つけます。イベントを見落とせば、調査結果が誤ったものになります。
-
すべてのイベントが実際に使われていることを確認します。 各イベント定義について、実際に呼び出されていることを確認します。LIVE または ORPHANED としてマークします。これは任意ではありません。孤立イベントの検出は監査の主要な成果物です。
-
正確な名前を保持します。 大文字・小文字や書式を含め、コードに記載されているイベント名をそのまま記録します。表記を統一しないでください。
-
確認されたプロパティを記録します。 実際のプロパティキーを YAML リストとして記録します:
properties: [key1, key2]。{ key1, key2 }のような省略形式は使わないでください。出力は有効で解析可能な YAML にします。 -
カテゴリは柔軟に推定します。 イベントの整理に役立つよう、推定カテゴリ(lifecycle、core_value など)を付けてもかまいませんが、推定であることを明記します。
-
低コストで再実行できるようにします。 監査はすばやく再実行できるようにします。コードベースが変更されたら、再度実行するだけです。
-
トラッキング計画は読みません。 監査では理想の状態とは独立して実態を記録します。
.telemetry/tracking-plan.yamlが存在する場合も、それと比較しません。その比較は設計段階で行います。 -
ファイルに記録し、会話では要約します。 詳細なイベント一覧は出力ファイルに記録します。会話では簡潔な要約(イベント数、主要なパターン、孤立イベントの統計)のみを示します。チャットに生データを 20 行を超えて貼り付けないでください。
-
監査レポートは 1 つ、保存場所も 1 か所にします。 出力先は
.telemetry/audits/YYYY-MM-DD.mdのみです。他のパスに重複ファイルを作成しないでください。 -
検討過程ではなく、判断を示します。 推論は内部で行います。ユーザーに示すのは調査結果であり、検索過程ではありません。
-
機能している点を記述します。 現在の実装に関するセクションでは、すべてを列挙するだけでなく、維持する価値のあるパターンを取り上げます。既存の実装に整理された一元管理のラッパーがある場合は、その点を記載します。実装ガイドでは、ゼロから始めるのではなく、機能しているものを基盤にします。
-
グループ階層の可能性を記録します。 コードベースからエンティティの関係(アカウント → ワークスペース → プロジェクトなど)が読み取れる場合、グループ階層をうまく扱える分析システムを記載します(Segment、Mixpanel、PostHog は複数レベルのグループをネイティブでサポートします。Amplitude では回避策が必要です)。この所見は、設計段階で適切なアーキテクチャを選ぶのに役立ちます。
SDK 検出クイックリファレンス
| SDK | パターン | パッケージ | リファレンス |
|---|---|---|---|
| Segment | analytics.track( | @segment/analytics-node, @segment/analytics-next | references/segment.md |
| Amplitude | amplitude.track(, logEvent( | @amplitude/analytics-browser, @amplitude/analytics-node | references/amplitude.md |
| Mixpanel | mixpanel.track( | mixpanel-browser, mixpanel | references/mixpanel.md |
| PostHog | posthog.capture( | posthog-js, posthog-node | references/posthog.md |
| Accoil | Segment 経由または直接 API | @segment/analytics-node | references/accoil.md |
監査の前に、該当するガイドを読んでください。 SDK ごとに、ID 管理、グループ呼び出し、設定のパターンが異なります。
検出パターンはコードベースの言語に合わせて調整します。 上記のパターンは JavaScript の規約を使っています。まず .telemetry/product.md で技術スタックを確認し、その後、次のように調整してください。
- Ruby:
Gemfileでanalytics-ruby、segment、ahoy_matey、posthog-rubyを確認します。Analytics.track(、Ahoy.track(を検索します。 - Python:
requirements.txt/pyproject.tomlでanalytics-python、posthog、mixpanel、amplitude-analyticsを確認します。analytics.track(、posthog.capture(を検索します。 - Go:
go.modで分析 SDK を確認します。SDK 固有のメソッド呼び出しを検索します。 - Java:
pom.xml/build.gradleで分析関連の依存関係を確認します。
ライフサイクル
model → audit → design → guide → implement ← feature updates
^
次のフェーズ
監査後、ユーザーに以下の実行を提案します。
- product-tracking-design-tracking-plan — 現状を入力として、何を追跡するかを決定します(例:「追跡計画を設計」、「何を追跡すべきか?」、「追跡計画を作成」)