AI

エラー追跡OSS比較:Sentry vs GlitchTip vs OpenReplay でアプリのバグを自前サーバーで監視

オープンソースラボ編集部2026年6月13日

エラー追跡OSS比較:Sentry vs GlitchTip vs OpenReplay でアプリのバグを自前サーバーで監視

本番アプリのエラーはリアルタイムで検知し、スタックトレースを記録し、再現ステップまで追えなければ修正が遅くなります。Sentry(クラウド版は月$26〜)・GlitchTip(SentryのOSSクローン)・OpenReplay(セッション録画付き)は、エラー追跡をセルフホストで無料化しつつ、アラート・ファネル・パフォーマンス計測まで対応します。

エラー追跡ツールの選定理由

  • コスト削減: Sentry Teamプランは月$26〜(エラー25万件上限)。大規模アプリでは月数万円になる
  • データプライバシー: ユーザーのスタックトレース・個人情報を外部サービスに渡したくない
  • セッション録画: エラーが起きた時のユーザー操作を動画で再現したい(OpenReplay)
  • フル制御: 保存期間・アラートルール・インテグレーションを自分で管理したい
  • Slack通知: エラー発生時に即座にSlackチャンネルに通知したい

主要ツールの概要

Sentry(セルフホスト版)

もっとも機能が充実したエラー追跡プラットフォームです。GitHubスター38k+。エラー集計・スタックトレース・パフォーマンス計測・リリーストラッキング・Slack/PagerDuty通知に対応。セルフホスト版はdocker-composeで起動できますが、要求スペックが高い(最小8GB RAM)点に注意です。

# Sentryセルフホスト版のセットアップ
git clone https://github.com/getsentry/self-hosted.git
cd self-hosted
./install.sh  # 対話形式でAdminアカウントを作成

# Docker Composeで起動
docker compose up -d

# デフォルトでポート9000で起動
# SENTRY_URL = http://localhost:9000
// Next.jsにSentryを統合
// npm install @sentry/nextjs

// sentry.client.config.ts
import * as Sentry from "@sentry/nextjs";

Sentry.init({
  dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
  environment: process.env.NODE_ENV,
  release: process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA,
  tracesSampleRate: 0.1,  // 10%のリクエストをパフォーマンス計測
  replaysOnErrorSampleRate: 1.0,  // エラー時は必ずセッション録画
  integrations: [
    Sentry.replayIntegration({
      maskAllText: true,
      blockAllMedia: true,
    }),
  ],
});

// sentry.server.config.ts
import * as Sentry from "@sentry/nextjs";

Sentry.init({
  dsn: process.env.SENTRY_DSN,
  tracesSampleRate: 0.1,
});

// next.config.js(Sentryプラグイン)
const { withSentryConfig } = require("@sentry/nextjs");

module.exports = withSentryConfig(nextConfig, {
  org: "your-org",
  project: "your-project",
  authToken: process.env.SENTRY_AUTH_TOKEN,
  silent: true,
  hideSourceMaps: true,
});
// Sentryでのエラーキャプチャとコンテキスト付与
import * as Sentry from "@sentry/nextjs";

// ユーザー情報をエラーに付与
Sentry.setUser({
  id: user.id,
  email: user.email,
  username: user.name,
});

// カスタムコンテキストを追加
Sentry.setContext("subscription", {
  plan: user.plan,
  mrr: user.mrr,
});

// エラーを手動でキャプチャ
try {
  await processPayment(orderId);
} catch (error) {
  Sentry.captureException(error, {
    tags: { feature: "checkout", payment_method: "stripe" },
    extra: { orderId, amount },
  });
  throw error;
}

// パフォーマンス計測(トランザクション)
const transaction = Sentry.startInactiveSpan({
  name: "process-batch",
  op: "task",
});
await processBatch(items);
transaction.end();

GlitchTip

Django製のSentryクローンです。GitHubスター1.7k+。Sentryと互換性のあるAPIを持つため、既存のSentry SDKをそのまま使えます。Sentryより軽量(最小2GB RAM)でシンプルな設計です。個人・小規模チーム向け。

# GlitchTipをdocker-composeで起動
version: "3"

services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: glitchtip
      POSTGRES_USER: glitchtip
      POSTGRES_PASSWORD: glitchtip_pass
    volumes:
      - glitchtip_db:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine

  web:
    image: glitchtip/glitchtip:latest
    environment:
      DATABASE_URL: postgresql://glitchtip:glitchtip_pass@postgres:5432/glitchtip
      REDIS_URL: redis://redis:6379/0
      SECRET_KEY: "your-secret-key-here-min-50-chars"
      GLITCHTIP_DOMAIN: https://errors.yoursite.com
      DEFAULT_FROM_EMAIL: "errors@yoursite.com"
      EMAIL_BACKEND: "django.core.mail.backends.smtp.EmailBackend"
      EMAIL_HOST: "smtp.sendgrid.net"
      EMAIL_HOST_PASSWORD: "your-sendgrid-api-key"
      EMAIL_HOST_USER: "apikey"
      EMAIL_PORT: 587
    ports:
      - "8000:8000"
    depends_on:
      - postgres
      - redis

  worker:
    image: glitchtip/glitchtip:latest
    command: celery -A glitchtip worker -l info
    environment:
      DATABASE_URL: postgresql://glitchtip:glitchtip_pass@postgres:5432/glitchtip
      REDIS_URL: redis://redis:6379/0
      SECRET_KEY: "your-secret-key-here-min-50-chars"
    depends_on:
      - postgres
      - redis

volumes:
  glitchtip_db:
// GlitchTipはSentry SDKで接続可能(DSNを変更するだけ)
import * as Sentry from "@sentry/nextjs";

Sentry.init({
  // GlitchTipのDSNに変更するだけで移行完了
  dsn: "https://your-key@errors.yoursite.com/1",
  tracesSampleRate: 0.1,
});

OpenReplay

セッション録画に特化したエラー追跡ツールです。GitHubスター9.5k+。ユーザーセッションの映像録画・マウス移動・クリック・コンソールログ・ネットワークリクエストをまとめて記録し、エラー発生時の操作を完全再現できます。

# OpenReplayをdocker-composeで起動
curl -L https://raw.githubusercontent.com/openreplay/openreplay/main/scripts/helmcharts/openreplay/scripts/oo.sh | bash

# または軽量版(単一Dockerコンテナ)
# 最小要求: 2 vCPU + 8GB RAM
docker run -d   --name openreplay   -p 80:80   -p 443:443   -e DOMAIN=replay.yoursite.com   openreplay/openreplay:latest
// Next.jsにOpenReplayを統合
// npm install @openreplay/tracker @openreplay/tracker-assist

// app/providers.tsx
"use client";
import Tracker from "@openreplay/tracker";
import { useEffect } from "react";

const tracker = new Tracker({
  projectKey: process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY!,
  ingestPoint: process.env.NEXT_PUBLIC_OPENREPLAY_INGEST_POINT!,
  capturePerformance: true,
  network: {
    capturePayload: false,  // リクエストボディはキャプチャしない
    sanitizer: (data) => {
      // パスワード等をマスク
      delete data.requestBody?.password;
      return data;
    },
  },
});

export function OpenReplayProvider({ children }: { children: React.ReactNode }) {
  useEffect(() => {
    tracker.start();
  }, []);

  return <>{children}</>;
}

// エラー発生時のセッションURLを取得
const sessionUrl = tracker.getSessionURL();
console.log("Replay URL:", sessionUrl);
// → https://replay.yoursite.com/123/session/abc456

// Slackに自動通知(エラー発生時)
Sentry.configureScope((scope) => {
  scope.addEventProcessor((event) => {
    event.extra = {
      ...event.extra,
      openreplay_session: tracker.getSessionURL(),
    };
    return event;
  });
});

機能比較表

比較項目Sentry(セルフホスト)GlitchTipOpenReplay
ライセンスBSL-1.1MITELv2
エラー収集
スタックトレース
セッション録画✅(Replay)✅ 高機能
パフォーマンス計測
リリーストラッキング
Slack通知
PagerDuty連携
最小RAM8GB2GB8GB
Sentry SDK互換
GitHub Stars38k+1.7k+9.5k+

エラー追跡と連携するCI/CDパイプラインの構築についてはdevopsカテゴリ(/categories/devops)を参照してください。セッション録画と組み合わせるウェブ解析ツールはopen-source-analytics(/categories/marketing)でまとめています。

FAQ

Q. SentryセルフホストとGlitchTipを比較した時、どちらを選べばよいですか?

A. チームの規模と使いたい機能で判断します。GlitchTipを選ぶケース: ①小規模チーム(5人以下)②月エラー件数が数万件以下③Sentry SDKをそのまま流用したい④RAM 2GBのVPS(Hetzner CX21: 月5ユーロ程度)で動かしたい。Sentryセルフホストを選ぶケース: ①リリーストラッキングが必要②パフォーマンスモニタリング(Transactions・Web Vitals)が必要③Sentry公式のSlack/PagerDutyインテグレーションを使いたい④8GB RAM以上のサーバーがある。移行パスとして「まずGlitchTipで無料運用→必要になったらSentryセルフホストへ移行」も有効(DSNを変えるだけで移行できます)。

Q. OpenReplayのセッション録画でユーザーのパスワードや個人情報が漏れませんか?

A. OpenReplayはデフォルトでプライバシー保護機能を複数用意しています。①type="password"フィールドは自動的にマスク(****表示)②data-openreplay-obscured属性を付けた要素はぼかし処理③data-openreplay-hidden属性で録画から完全除外④ネットワークリクエストのpayloadキャプチャはデフォルトOFF。セルフホスト版の場合: 録画データは自社サーバーにのみ保存されます。OpenReplay Cloudを使う場合は規約確認が必要です。特にECサイト・金融・医療では追加でsanitizer関数を実装してカード番号等をマスクすることを推奨します。

Q. Sentryのセルフホストのアップデート方法と運用コストはどのくらいですか?

A. アップデートは git pull && ./install.sh で実施します(月1回程度の更新頻度)。注意: メジャーバージョンアップ時にDBマイグレーションが実行されるため、事前にDBバックアップ必須。運用コスト目安: 月10万エラー以下→4GB RAM VPS(月$20〜30)で動作。月100万エラー→8〜16GB RAM(月$60〜100)。ストレージ: エラーデータは90日保存で100GBのSSDが目安。ClickHouseを使うため、Supabase等のマネージドPostgreSQLは使えず、専用VPSが必要です。

Q. Next.jsでSentryを使うとビルド時間・バンドルサイズへの影響はありますか?

A. ビルド時間への影響: Source MapのSentryアップロードが追加されるため、Vercel等のCI/CDでビルド時間が30〜60秒増加することがあります(SENTRY_AUTH_TOKENが必要)。バンドルサイズ: @sentry/nextjsは約80KB(gzip後約30KB)のバンドルサイズ増加があります。最適化方法: ①tracesSampleRate: 0にしてパフォーマンス計測を無効化(サイズ削減)②tunnelオプションを使いSentryへのリクエストをNext.jsのAPI Routeを経由させることでadblockerによるブロックを回避。本番環境のみSentryを有効化: if (process.env.NODE_ENV === "production") { Sentry.init(...) } で開発環境のオーバーヘッドを排除できます。

まとめ

ユースケース推奨ツール
軽量・低コストのエラー追跡GlitchTip
高機能・リリーストラッキングSentry(セルフホスト)
セッション録画でバグ再現OpenReplay
Sentry SDK流用で即移行GlitchTip

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。