← スキル一覧に戻る

analytics-tracking
by Smarter-Poker
Smarter-Poker-World-Hub
⭐ 0🍴 0📅 2026年1月26日
SKILL.md
name: Analytics & Tracking description: User behavior tracking, event logging, and analytics dashboards
Analytics & Tracking Skill
Analytics Providers
Vercel Analytics (Recommended)
npm install @vercel/analytics
// app/layout.js or _app.js
import { Analytics } from '@vercel/analytics/react';
export default function Layout({ children }) {
return (
<>
{children}
<Analytics />
</>
);
}
PostHog (Self-hostable)
npm install posthog-js
import posthog from 'posthog-js';
// Initialize
if (typeof window !== 'undefined') {
posthog.init('YOUR_API_KEY', {
api_host: 'https://app.posthog.com'
});
}
// Track events
posthog.capture('game_started', {
game_type: 'gto_trainer',
difficulty: 'advanced'
});
// Identify users
posthog.identify(userId, {
email: user.email,
plan: user.plan
});
Google Analytics 4
import Script from 'next/script';
export default function Layout({ children }) {
return (
<>
<Script src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX" />
<Script id="google-analytics">
{`
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXX');
`}
</Script>
{children}
</>
);
}
Custom Event Tracking
Event Logger
// lib/analytics.js
export const analytics = {
track: (event, properties = {}) => {
// PostHog
if (typeof window !== 'undefined' && window.posthog) {
window.posthog.capture(event, properties);
}
// Supabase (custom logging)
logEvent(event, properties);
},
page: (url) => {
if (typeof window !== 'undefined' && window.posthog) {
window.posthog.capture('$pageview', { url });
}
},
identify: (userId, traits = {}) => {
if (typeof window !== 'undefined' && window.posthog) {
window.posthog.identify(userId, traits);
}
}
};
async function logEvent(event, properties) {
await supabase.from('analytics_events').insert({
event,
properties,
user_id: getCurrentUserId(),
timestamp: new Date().toISOString(),
session_id: getSessionId()
});
}
React Hook
import { useEffect } from 'react';
import { useRouter } from 'next/router';
import { analytics } from '@/lib/analytics';
export function usePageTracking() {
const router = useRouter();
useEffect(() => {
const handleRouteChange = (url) => analytics.page(url);
router.events.on('routeChangeComplete', handleRouteChange);
return () => router.events.off('routeChangeComplete', handleRouteChange);
}, [router.events]);
}
Key Events to Track
Game Events
analytics.track('game_started', { game_id, game_type, difficulty });
analytics.track('game_completed', { game_id, score, duration, correct_percentage });
analytics.track('level_up', { new_level, xp_earned });
analytics.track('achievement_unlocked', { achievement_id, achievement_name });
Commerce Events
analytics.track('store_viewed', {});
analytics.track('item_added_to_cart', { item_id, item_name, price });
analytics.track('checkout_started', { total_amount, items_count });
analytics.track('purchase_completed', { order_id, total_amount, payment_method });
Engagement Events
analytics.track('feature_used', { feature_name });
analytics.track('share_clicked', { content_type, platform });
analytics.track('referral_sent', { referral_code });
Database Schema
CREATE TABLE analytics_events (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
event TEXT NOT NULL,
properties JSONB,
user_id UUID REFERENCES auth.users,
session_id TEXT,
timestamp TIMESTAMPTZ DEFAULT NOW(),
user_agent TEXT,
ip_address INET
);
CREATE INDEX idx_events_timestamp ON analytics_events(timestamp);
CREATE INDEX idx_events_user ON analytics_events(user_id);
CREATE INDEX idx_events_event ON analytics_events(event);
スコア
総合スコア
50/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です