エラー追跡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(セルフホスト) | GlitchTip | OpenReplay |
|---|---|---|---|
| ライセンス | BSL-1.1 | MIT | ELv2 |
| エラー収集 | ✅ | ✅ | ✅ |
| スタックトレース | ✅ | ✅ | ✅ |
| セッション録画 | ✅(Replay) | ❌ | ✅ 高機能 |
| パフォーマンス計測 | ✅ | ❌ | ✅ |
| リリーストラッキング | ✅ | ❌ | ❌ |
| Slack通知 | ✅ | ✅ | ✅ |
| PagerDuty連携 | ✅ | ❌ | ❌ |
| 最小RAM | 8GB | 2GB | 8GB |
| Sentry SDK互換 | ✅ | ✅ | ❌ |
| GitHub Stars | 38k+ | 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 |