PostHog とは?

PostHog は現在 GitHub で最も注目を集めるオープンソースのプロダクト分析&AI 可観測性プラットフォーム(⭐ 1.9 万超 Star)。Google Analytics のようなクローズドツールとは異なり、PostHog はプロダクト分析、ユーザー行動追跡、A/B 実験、機能フラグ、エラー追跡を単一のオープンソースプラットフォームに統合し、データは完全に自己管理できます。

開発者が PostHog を選ぶ理由

比較項目 Google Analytics Mixpanel PostHog
オープンソース/セルフホスティング ❌ ❌ ✅ MIT License
データの所有権 Google へ帰属 Mixpanel へ帰属 自分自身
セッションリプレイ ❌ ✅ 有料 ✅ 標準搭載
機能フラグ ❌ ❌ ✅ 標準搭載
A/B 実験 ❌ ✅ 有料 ✅ 標準搭載
AI 可観測性 ❌ ❌ ✅ LLM 呼び出しを追跡
無料枠 無制限(ただしサンプリングあり) 100 万イベント/月 100 万イベント/月
料金体系 エンタープライズ版は高額 使用量ベース 超過分は使用量ベース

PostHog の中心的な役割は、プロダクトチームと開発者がユーザーの行動を理解し、プロダクトの意思決定を推進することです。独自の selling point は以下の通り:

  • All-in-One プラットフォーム:1 つのツールでプロダクト分析、Web 分析、セッションリプレイ、機能フラグ、実験、エラートラッキング、ログ、アンケートをカバー
  • AI 可観測性:LLM 呼び出しのレイテンシ、コスト、生成内容を追跡。2026 年現在、これは差別化できる機能
  • MCP 統合:MCP プロトコル経由で Claude Code や Cursor といった AI コーディングツールに接続し、エディタ内で直接データを参照可能
  • Self-driving モード:rage click(苛つきクリック)、エラー、失敗したクエリを自動検出し、分析レポートや PR を自動生成

PostHog と他ソリューションのアーキテクチャ比較

┌─────────────────────────────────────────────────┐
│                   PostHog                        │
├──────────┬──────────┬──────────┬────────────────┤
│ プロダクト分析 │ セッションリプレイ │ 機能フラグ │ AI 可観測性    │
│ (Events) │ (Replay) │ (Flags)  │ (LLM Traces)   │
├──────────┴──────────┴──────────┴────────────────┤
│         統合 ClickHouse データエンジン               │
├─────────────────────────────────────────────────┐
│        フロントエンド SDK | バックエンド SDK | API | MCP           │
└─────────────────────────────────────────────────┘

PostHog のセルフデプロイ

方法 1:PostHog Cloud(おすすめ)

最も速く始められる方法で、運用は一切不要:

無料枠の月間内訳:100 万イベント、5,000 回の録画、100 万回の Flag リクエスト、10 万件の例外。

方法 2:Docker ワンクリックデプロイ(セルフホスティング)

データを完全にコントロールしたい場合、PostHog はミニマルな Hobby デプロイ構成を提供しています。

前提条件: - Linux サーバー - メモリ 4GB 以上 - Docker + Docker Compose

ワンコマンドでデプロイ:

BASH
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/posthog/posthog/HEAD/bin/deploy-hobby)"

デプロイ完了後、http://localhost:8000 にアクセスすると PostHog の管理画面が表示されます。

方法 3:Docker Compose 手動デプロイ

より細かな制御が必要な場合:

YAML
# docker-compose.yml
version: '3.8'

services:
  posthog:
    image: posthog/posthog:latest
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgres://posthog:posthog@db:5432/posthog
      - REDIS_URL=redis://redis:6379/
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: posthog
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:7

volumes:
  pgdata:
BASH
# サービスの起動
docker-compose up -d

# ログの確認
docker-compose logs -f posthog

⚠️ 注意:オープンソースのセルフホスティング版は月 10 万イベント以下の処理量を推奨。それを超える場合は PostHog Cloud への移行をおすすめします。


クイックスタート:最初のアプリを接続する

フロントエンド JavaScript SDK の接続

SDK をインストール:

BASH
npm install posthog-js

アプリのエントリーポイントで初期化:

JAVASCRIPT
import posthog from 'posthog-js';

posthog.init('YOUR_POSTHOG_API_KEY', {
  api_host: 'https://us.posthog.com',  // セルフホスティングの場合は http://your-server:8000
  autocapture: true,  // すべてのクリック、ページビューなどを自動キャプチャ
});

// 手動でカスタムイベントを送信
posthog.capture('user_signed_up', {
  method: 'email',
  plan: 'free',
});

// ユーザー ID を設定(ログイン時に呼び出す)
posthog.identify('user-unique-id-123', {
  email: 'developer@example.com',
  name: '山田太郎',
});

autocapture: true を指定すれば、コードに一切埋め込む必要がありません——すべてのボタンクリック、リンククリック、フォーム送信が自動で記録されます。

バックエンド Python SDK の接続

バックエンド側のイベント(支払い完了、注文作成など):

BASH
pip install posthog
PYTHON
from posthog import Posthog

# 初期化(API キーは環境変数での保存を推奨)
posthog = Posthog(
    project_api_key='YOUR_PROJECT_API_KEY',
    host='https://us.posthog.com'
)

# イベントをキャプチャ
posthog.capture(
    distinct_id='user-unique-id-123',
    event='payment_completed',
    properties={
        'amount': 99.00,
        'currency': 'USD',
        'payment_method': 'stripe',
    }
)

# ユーザー属性を設定
posthog.identify(
    distinct_id='user-unique-id-123',
    properties={
        'email': 'developer@example.com',
        'plan': 'pro',
        'company': 'TechCorp',
    }
)

# クライアントのシャットダウン(アプリ終了時)
posthog.shutdown()

Next.js フルスタックプロジェクトでの接続

BASH
npm install posthog-js posthog-node
TSX
// components/PostHogProvider.tsx
import { PostHogProvider as PHProvider } from 'posthog-js/react';
import { useEffect, useState } from 'react';
import posthog from 'posthog-js';

export function PostHogProvider({ children }: { children: React.ReactNode }) {
  const [clientReady, setClientReady] = useState(false);

  useEffect(() => {
    posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
      api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST || 'https://us.posthog.com',
      person_profiles: 'identified_only',
    });
    setClientReady(true);
  }, []);

  if (!clientReady) return null;
  return <PHProvider client={posthog}>{children}</PHProvider>;
}
TSX
// app/layout.tsx
import { PostHogProvider } from '@/components/PostHogProvider';

export default function RootLayout({ children }) {
  return (
    <html lang="ja">
      <body>
        <PostHogProvider>{children}</PostHogProvider>
      </body>
    </html>
  );
}
TSX
// app/page.tsx
'use client';
import { usePostHog } from 'posthog-js/react';

export default function HomePage() {
  const posthog = usePostHog();

  return (
    <button onClick={() => {
      posthog.capture('cta_clicked', {
        cta_text: '無料で試す',
        page: 'homepage',
      });
    }}>
      無料で試す
    </button>
  );
}

コア機能の実践

1. プロダクト分析:ユーザーの行動を理解する

データを接続すると、PostHog が自動的にトレンドチャート、ファネル分析、リテンション曲線を生成します。

ファネル分析の例:登録 → アクティベート → 有料化

SQL
-- PostHog は SQL による直接クエリもサポート(ClickHouse)
SELECT
    event,
    COUNT(DISTINCT distinct_id) as users
FROM events
WHERE event IN ('user_signed_up', 'feature_activated', 'payment_completed')
  AND timestamp > now() - INTERVAL 30 DAY
GROUP BY event
ORDER BY timestamp

PostHog の UI での操作: 1. Product Analytics → Funnels に移動 2. 手順を追加:user_signed_up → feature_activated → payment_completed 3. 各ステップの转化率を確認

リテンション分析: 1. Product Analytics → Retention に移動 2. 初回イベント(例:user_signed_up)と再来イベント(例:pageview)を選択 3. D1/D7/D30 のリテンション曲線を確認

2. セッションリプレイ:ユーザーの実際の操作を見る

セッションリプレイでは、マウス移動、スクロール、クリックを含むユーザーの実際の操作映像を確認できます。

設定方法:

JAVASCRIPT
posthog.init('YOUR_API_KEY', {
  api_host: 'https://us.posthog.com',
  session_recording: {
    maskAllInputs: false,  // 入力内容をマスクしない(プライバシー敏感な場合は true に)
    recordCrossOriginIframes: true,
  },
});

Rage Clicks(苛つきクリック)のトラブルシューティング:

JAVASCRIPT
// ユーザーが同一要素を連続して 5 回以上高速クリックすると rage click イベントをトリガー
posthog.onFeatureFlags(() => {
  posthog.capture('rageclick', {
    element: document.activeElement.tagName,
    page: window.location.pathname,
  });
});

PostHog ダッシュボードでは以下のことができます: 1. rage click を含むすべてのセッションをフィルタリング 2. 録画を直接再生し、ユーザーを苛立たせている UI 問題を特定 3. ワンクリックで Issue を作成し、開発チームにアサイン

3. 機能フラグ:安全にグレイスケールリリース

機能フラグを使えば、コードをデプロイせずに機能のオン/オフを切り替えられます:

JAVASCRIPT
// 特定の機能がユーザーに開放されているかを確認
posthog.onFeatureFlags(() => {
  const newDashboard = posthog.getFeatureFlag('new-dashboard');

  if (newDashboard) {
    // 新版ダッシュボードを表示
    renderNewDashboard();
  } else {
    // 旧版を維持
    renderOldDashboard();
  }
});

実験的リリースの作成:

JAVASCRIPT
// ユーザー属性でターゲティング
posthog.capture('feature_viewed', {
  $feature_flag: 'beta-search',
  $feature_flag_response: true,
});

PostHog のバックエンドで: 1. Feature Flags → Create Flag に移動 2. 名前を beta-search に設定 3. リリース戦略を選択: - 全量リリース(100% のユーザー) - パーセンテージリリース(例:10% のユーザー) - ターゲティングリリース(メールドメイン、ユーザーグループ別) 4. 保存すると、SDK が自動で反映。再デプロイは不要

4. A/B 実験:データドリブンな意思決定

A/B 実験を使えば、機能変更の効果を統計学的に検証できます。

JAVASCRIPT
// 実験コード
posthog.onFeatureFlags(() => {
  const experiment = posthog.getFeatureFlag('landing-page-test');

  if (experiment === 'variant-a') {
    showVariantA();
  } else if (experiment === 'variant-b') {
    showVariantB();
  }

  // 実験の露出を記録
  posthog.capture('experiment_exposure', {
    $feature_flag: 'landing-page-test',
    variant: experiment,
  });
});

PostHog で実験を作成: 1. Experiments → Create Experiment に移動 2. 対応する機能フラグを選択 3. 目標指標を設定(例:payment_completed イベント) 4. 有意水準を設定(通常 95%) 5. 実験を実行し、統計的有意な結果を待つ

PostHog が自動的に p 値、信頼区間、勝利確率を計算してくれます。

5. エラートラッキング:フロントエンドの例外を自動キャプチャ

JAVASCRIPT
import posthog from 'posthog-js';

posthog.init('YOUR_API_KEY', {
  api_host: 'https://us.posthog.com',
  capture_performance: true,
});

// uncaught errors を自動キャプチャ
window.addEventListener('error', (event) => {
  posthog.capture('frontend_error', {
    error_message: event.message,
    error_url: event.filename,
    error_line: event.lineno,
    error_col: event.colno,
    stack: event.error?.stack,
  });
});

// unhandled promise rejections をキャプチャ
window.addEventListener('unhandledrejection', (event) => {
  posthog.capture('promise_rejection', {
    error_message: event.reason?.message || String(event.reason),
  });
});

PostHog の Error Tracking ページでは: - エラー頻度のトレンドを確認 - 影響を受けたセッション録画に紐づけ - アラートルールを設定(例:1 日のエラー数が 100 件を超えたら Slack に通知)

6. AI 可観測性:LLM 呼び出しを追跡

これは PostHog 2026 年の注目機能で、AI アプリケーション開発者のために設計されています。

Python SDK で OpenAI 呼び出しを追跡:

BASH
pip install posthog openai
PYTHON
from posthog import Posthog
import openai

posthog = Posthog('YOUR_API_KEY', host='https://us.posthog.com')

def generate_with_tracking(user_id: str, prompt: str):
    import time
    start = time.time()

    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )

    latency = time.time() - start
    tokens_used = response.usage.total_tokens

    # LLM 呼び出しを追跡
    posthog.capture(
        distinct_id=user_id,
        event='llm_call_completed',
        properties={
            'model': 'gpt-4',
            'prompt_length': len(prompt),
            'response_length': len(response.choices[0].message.content),
            'tokens_used': tokens_used,
            'latency_ms': latency * 1000,
            'success': True,
        }
    )

    return response

LangChain で追跡:

PYTHON
from langchain.callbacks import PostHogCallbackHandler

handler = PostHogCallbackHandler(
    api_key='YOUR_API_KEY',
    host='https://us.posthog.com',
    distinct_id='user-123',
)

# chain 内で使用
chain = LLMChain(llm=llm, prompt=prompt, callbacks=[handler])
result = chain.run("こんにちは、PostHog について教えてください")

PostHog ダッシュボードで確認できる内容: - 各 LLM 呼び出しのレイテンシ分布 - トークン消費とコスト統計 - 失敗リクエストのエラー原因 - ユーザー別の呼び出しパターン


MCP 統合:エディタ内でデータを照会

PostHog は MCP プロトコルに対応しており、Claude Code や Cursor などのツール内で直接プロダクトデータを照会できます。

MCP の設定(Claude Code):

JSON
// .mcp.json
{
  "mcpServers": {
    "posthog": {
      "command": "npx",
      "args": ["-y", "@posthog/mcp"],
      "env": {
        "POSTHOG_API_KEY": "phc_your_api_key",
        "POSTHOG_PERSONAL_API_KEY": "phx_your_personal_key",
        "POSTHOG_PROJECT_ID": "12345",
        "POSTHOG_API_HOST": "https://us.posthog.com"
      }
    }
  }
}

設定完了後、Claude Code 内で直接会話で照会できます:

> 過去 7 日間で何人のユーザーが登録しましたか?
> /dashboard ページのコンバージョンファネルを見せて
> 昨日 rage click が最も多かったページはどこ?

よくある質問

PostHog の無料版で十分?

多くの個人開発者や小規模チームにとって:月 100 万イベント + 5,000 回の録画で完全に賄えます。一般的な SaaS サイトでは、100 万イベント ≈ MAU 5〜10 万人に相当します。

セルフホスティングと Cloud の違いは?

Cloud セルフホスティング
運用 不要 Docker + DB 管理が必要
データの場所 PostHog サーバー 自分のサーバー
機能の完全性 すべての機能 一部エンタープライズ機能は利用不可
対象規模 どの規模でも 月 10 万イベント以下
料金 無料枠 + 従量 サーバーコスト

PostHog のパフォーマンスオーバーヘッドは?

JavaScript SDK は非同期で読み込まれるため、ページのレンダリング性能に影響しません。バックエンド SDK はキューを使ってバッチ送信するため、ビジネスロジックへの影響もありません。

プライバシーコンプライアンス(GDPR/PIPL)に対応?

対応しています。PostHog EU インスタンスは GDPR 要件を満たします。中国市場では maskAllInputs とカスタムデータフィルタリングルールで PIPL に適合できます。


まとめ

PostHog は現在最も包括的なオープンソースプロダクト分析プラットフォームであり、1 つのツールで Google Analytics + Hotjar + LaunchDarkly + Optimizely + Sentry の組み合わせを代替できます。開発者とプロダクトチームにとって、データの自主管理 + All-in-One 体験が最大の価値です。

主要リソース: - PostHog 公式サイト - GitHub リポジトリ ⭐ 19,000+ - ドキュメントセンター - デプロイガイド - 会社マニュアル(オープンソース)

この記事がお役に立った場合は、ぜひ他の開発者にもシェアしてください!