mcpField
S
sentry-ruby-sdk

sentry-ruby-sdk

github.com/getsentry開発2722.1k 回インストール今日更新
リポジトリ

sentry-ruby-sdk について

Rails、Rack、Sinatra を含む Ruby プロジェクト向けの Sentry 設定スキルです。プロジェクトを調査し、エラー、トレーシング、ログ、メトリクス、プロファイリング、定期ジョブの設定を案内し、他の監視ツールからの移行にも対応します。

主な機能

  1. 01Ruby のフレームワークと監視 Gem を検出
  2. 02Sentry Gem の選択と初期化を案内
  3. 03エラー、トレーシング、構造化ログを設定
  4. 04メトリクス、プロファイリング、定期ジョブに対応
  5. 05移行と検証の手順を提供

活用シーン

  1. 01Rails または Sinatra のサービスに Sentry を追加
  2. 02Sidekiq のバックグラウンドジョブを計測
  3. 03他の Ruby 監視ツールから移行
  4. 04既存の OpenTelemetry を使ってトレーシングを設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/getsentry/sentry-for-ai --skill sentry-ruby-sdk

インストール後、Claude Code で/sentry-ruby-sdkを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
crons.md
error-monitoring.md
logging.md
metrics.md
migration.md
profiling.md
tracing.md

詳細

すべてのスキル > SDK のセットアップ > Ruby SDK

Sentry Ruby SDK

プロジェクトをスキャンし、Sentry の完全なセットアップをガイドする、意見のはっきりしたウィザードです。

このスキルを使うタイミング

  • ユーザーが Ruby アプリに「Sentry を追加」したい、または「Sentry をセットアップ」したい場合
  • ユーザーが Ruby でエラー監視、トレーシング、ログ記録、メトリクス、プロファイリング、または cron を利用したい場合
  • ユーザーが sentry-ruby、sentry-rails、または Ruby Sentry SDK に言及した場合
  • ユーザーが AppSignal、Honeybadger、Bugsnag、Rollbar、または Airbrake から Sentry への移行を検討している場合
  • ユーザーが Rails/Sinatra で例外、HTTP リクエスト、またはバックグラウンドジョブを監視したい場合

注: 以下の SDK API は sentry-ruby v6.6.2 に基づいています。 実装する前に、必ず docs.sentry.io/platforms/ruby/ で確認してください。


フェーズ 1:検出

# Existing Sentry gems
grep -i sentry Gemfile 2>/dev/null

# Framework
grep -iE '\brails\b|\bsinatra\b' Gemfile 2>/dev/null

# Web server — Puma triggers queue time guidance
grep -iE '\bpuma\b' Gemfile 2>/dev/null

# Background jobs
grep -iE '\bsidekiq\b|\bresque\b|\bdelayed_job\b' Gemfile 2>/dev/null

# Yabeda metrics framework
grep -iE '\byabeda\b' Gemfile 2>/dev/null

# Competitor monitoring tools — triggers migration path if found
grep -iE '\bappsignal\b|\bhoneybadger\b|\bbugsnag\b|\brollbar\b|\bairbrake\b' Gemfile 2>/dev/null

# Scheduled jobs — triggers Crons recommendation
grep -iE '\bsidekiq-cron\b|\bclockwork\b|\bwhenever\b|\brufus-scheduler\b' Gemfile 2>/dev/null
grep -rn "Sidekiq::Cron\|Clockwork\|every.*do" config/ lib/ --include="*.rb" 2>/dev/null | head -10

# OpenTelemetry tracing — check for SDK + instrumentations
grep -iE '\bopentelemetry-sdk\b|\bopentelemetry-instrumentation\b' Gemfile 2>/dev/null
grep -rn "OpenTelemetry::SDK\.configure\|\.use_all\|\.in_span" config/ lib/ app/ --include="*.rb" 2>/dev/null | head -5

# Existing metric patterns (StatsD, Datadog, Prometheus)
grep -rE "(statsd|dogstatsd|prometheus|\.gauge|\.histogram|\.increment|\.timing)" \
  app/ lib/ --include="*.rb" 2>/dev/null | grep -v "_spec\|_test" | head -20

# Companion frontend
cat package.json frontend/package.json web/package.json 2>/dev/null | grep -E '"@sentry|"sentry-'

検出結果に基づく案内:

  • 競合製品を検出(appsignal、honeybadger、bugsnag、rollbar、airbrake)→ まず ${SKILL_ROOT}/references/migration.md を読み込み、移行の一環として競合製品のイニシャライザーを削除します
  • Sentry がすでに存在 → フェーズ 2 に進み、機能を設定します
  • Rails → sentry-rails と config/initializers/sentry.rb を使用します
  • Rack/Sinatra → sentry-ruby と Sentry::Rack::CaptureExceptions ミドルウェアを使用します
  • Sidekiq → sentry-sidekiq を追加します。既存のメトリクスパターンが見つかった場合は、メトリクスを推奨します
  • Yabeda を検出 → sentry-yabeda を追加します。Yabeda のメトリクスを Sentry のメトリクスに送ります
  • Puma を検出 → キュー時間の取得は自動で行われます(v6.4.0 以降)が、リバースプロキシで X-Request-Start ヘッダーを設定する必要があります。${SKILL_ROOT}/references/tracing.md の「Request Queue Time」を参照してください
  • OTel トレーシングを検出(Gemfile に opentelemetry-sdk とインストルメンテーションがある、またはソース内に OpenTelemetry::SDK.configure がある)→ OTLP の方法を使用します:config.otlp.enabled = true を設定し、traces_sample_rate は設定しないでください。Sentry はエラーを OTel トレースに自動的に関連付けます

フェーズ 2:推奨

自由回答形式の質問はせず、具体的な提案から始めます。

機能次の場合に推奨...
エラー監視常に
OTLP 統合OTel トレーシングを検出した場合 — ネイティブのトレーシングを置き換えます
トレーシングRails/Sinatra/Rack/任意の HTTP フレームワーク。OTel トレーシングを検出した場合はスキップします
ログ記録常に — enable_logs: true のコストはかかりません
メトリクスSidekiq がある場合、または既存のメトリクスライブラリ(StatsD、Prometheus)を検出した場合
プロファイリング⚠️ ベータ版 — パフォーマンスプロファイリングを求められた場合。stackprof または vernier gem が必要です。OTel トレーシングを検出した場合はスキップします(traces_sample_rate が必要で、OTLP と互換性がありません)
cronスケジュールされたジョブを検出した場合(ActiveJob、Sidekiq-Cron、Clockwork、Whenever)

OTel トレーシングを検出した場合: 「プロジェクトで OpenTelemetry トレーシングが使われているようです。既存の OTel セットアップ経由で Sentry の OTLP 統合を使ったトレーシングと、エラー監視、Sentry ログ記録を推奨します[該当する場合はメトリクス/cron も追加]。この内容で進めてもよろしいですか?」

OTel がない場合: 「エラー監視、トレーシング、ログ記録を推奨します[該当する場合はメトリクスも追加]。この内容で進めてもよろしいですか?」


フェーズ 3:ガイド

インストール

Rails:

# Gemfile
gem "sentry-ruby"
gem "sentry-rails"
gem "sentry-sidekiq"      # if using Sidekiq
gem "sentry-resque"       # if using Resque
gem "sentry-delayed_job"  # if using DelayedJob
gem "sentry-yabeda"       # if using Yabeda metrics framework

Rack/Sinatra/プレーンな Ruby:

gem "sentry-ruby"

bundle install を実行します。

フレームワーク統合
フレームワーク/ランタイムGem初期化場所自動インストルメンテーション
Railssentry-railsconfig/initializers/sentry.rbコントローラー、ActiveRecord、ActiveJob、ActionMailer
Rack/Sinatrasentry-rubyconfig.ru の先頭リクエスト(Sentry::Rack::CaptureExceptions ミドルウェア経由)
Sidekiqsentry-sidekiqSentry イニシャライザーまたは Sidekiq 設定ワーカー実行 → トランザクション
Resquesentry-resqueSentry イニシャライザーワーカー実行 → トランザクション
DelayedJobsentry-delayed_jobSentry イニシャライザージョブ実行 → トランザクション
Yabeda メトリクスsentry-yabedaSentry イニシャライザーYabeda のメトリクスイベント → Sentry のメトリクス
初期化 — Rails(config/initializers/sentry.rb)
Sentry.init do |config|
  config.dsn = ENV["SENTRY_DSN"]
  config.spotlight = Rails.env.development?  # local Spotlight UI; no DSN needed in dev
  config.breadcrumbs_logger = [:active_support_logger, :http_logger]
  config.send_default_pii = true
  config.traces_sample_rate = 1.0  # lower to 0.05–0.2 in production
  config.enable_logs = true
  # Metrics on by default; disable with: config.enable_metrics = false
end

sentry-rails は ActionController、ActiveRecord、ActiveJob、ActionMailer を自動計測します。

初期化 — Rack / Sinatra
require "sentry-ruby"

Sentry.init do |config|
  config.dsn = ENV["SENTRY_DSN"]
  config.spotlight = ENV["RACK_ENV"] == "development"
  config.breadcrumbs_logger = [:sentry_logger, :http_logger]
  config.send_default_pii = true
  config.traces_sample_rate = 1.0
  config.enable_logs = true
end

use Sentry::Rack::CaptureExceptions  # in config.ru, before app middleware
初期化 — Sidekiq スタンドアロン
require "sentry-ruby"
require "sentry-sidekiq"

Sentry.init do |config|
  config.dsn = ENV["SENTRY_DSN"]
  config.spotlight = ENV.fetch("RAILS_ENV", "development") == "development"
  config.breadcrumbs_logger = [:sentry_logger]
  config.traces_sample_rate = 1.0
  config.enable_logs = true
end
環境変数
SENTRY_DSN=https://[email protected]/ZZZ
SENTRY_ENVIRONMENT=production   # overrides RAILS_ENV / RACK_ENV
[email protected]
機能リファレンスファイル

機能を一度に1つずつ確認します。それぞれのリファレンスファイルを読み込み、手順に従って、次に進む前に動作を確認します。

機能リファレンスファイル読み込むタイミング
移行${SKILL_ROOT}/references/migration.md競合する gem が見つかった場合 — Sentry をインストールする前に読み込みます
エラーモニタリング${SKILL_ROOT}/references/error-monitoring.md必ず読み込みます
トレーシング${SKILL_ROOT}/references/tracing.mdHTTP ハンドラー/分散トレーシングを使用する場合
ロギング${SKILL_ROOT}/references/logging.md構造化ログを取得する場合
メトリクス${SKILL_ROOT}/references/metrics.mdSidekiq が存在する場合、または既存のメトリクスパターンがある場合
プロファイリング${SKILL_ROOT}/references/profiling.mdパフォーマンスプロファイリングが必要な場合(ベータ)
Cron${SKILL_ROOT}/references/crons.mdスケジュールされたジョブを検出した場合、またはリクエストされた場合

各機能について、Read ${SKILL_ROOT}/references/<feature>.md を実行し、手順に正確に従って、動作を確認します。


設定リファレンス

Sentry.init の主なオプション
オプション型デフォルト用途
dsnStringnil空の場合、SDK は無効になります。環境変数:SENTRY_DSN
environmentStringnil例:"production"。環境変数:SENTRY_ENVIRONMENT
releaseStringnil例:"[email protected]"。環境変数:SENTRY_RELEASE
spotlightBooleanfalseイベントを Spotlight サイドカーに送信します(ローカル開発用。DSN は不要です)
send_default_piiBooleanfalseIP アドレスとリクエストヘッダーを含めます
sample_rateFloat1.0エラーイベントのサンプルレート(0.0~1.0)
traces_sample_rateFloatnilトランザクションのサンプルレート。nil の場合、トレーシングは無効です
profiles_sample_rateFloatniltraces_sample_rate に対するプロファイリングレート。stackprof または vernier が必要です
enable_logsBooleanfalseSentry の構造化ログを有効にします
enable_metricsBooleantrueカスタムメトリクスを有効にします(デフォルトで有効)
breadcrumbs_loggerArray[]自動パンくずリストに使用するロガー(ロギングのリファレンスを参照)
max_breadcrumbsInteger100イベントごとのパンくずリストの最大数
debugBooleanfalseSDK の詳細な出力を stdout に表示します
capture_queue_timeBooleantrueX-Request-Start ヘッダーからリクエストのキュー時間を記録します(v6.4.0 以降。Rails では v6.4.1 で修正済み)
otlp.enabledBooleanfalseOTLP 経由で OTel スパンを Sentry に送信します。traces_sample_rate と併用しないでください
otlp.collector_urlStringnilOTel Collector の OTLP HTTP エンドポイント(例:http://localhost:4318/v1/traces)。設定すると、スパンは Sentry に直接送信されず、Collector に送信されます
org_idStringnil明示的な組織 ID。DSN から抽出された値を上書きします。セルフホスト/Relay の構成で便利です(v6.5.0 以降)
strict_trace_continuationBooleanfalse受信したトレースの sentry-org_id baggage が SDK の組織 ID と一致する場合にのみ継続します。サードパーティサービスからのトレースの結合を防ぎます(v6.5.0 以降)
before_sendLambdanil送信前にエラーイベントを変更または破棄します
before_send_transactionLambdanil送信前にトランザクションイベントを変更または破棄します
before_send_logLambdanil送信前にログイベントを変更または破棄します
環境変数
変数対応するオプション用途
SENTRY_DSNdsnデータソース名
SENTRY_RELEASEreleaseアプリのバージョン(例:[email protected])
SENTRY_ENVIRONMENTenvironmentデプロイ環境

Sentry.init で設定したオプションは、環境変数より優先されます。


検証

ローカル開発(DSN 不要) — Spotlight:

npx @spotlightjs/spotlight          # browser UI at http://localhost:8969
# or stream events to terminal:
npx @spotlightjs/spotlight tail traces --format json

config.spotlight = Rails.env.development?(上記の初期化ブロックにすでに記述されています)を設定すると、イベントは自動的にローカルのサイドカーに送られます。

実際の DSN を使用する場合:

Sentry.capture_message("Sentry Ruby SDK test")

何も表示されませんか?config.debug = true を設定して、標準出力を確認してください。DSN の形式を確認してください:https://<key>@o<org>.ingest.sentry.io/<project>。


フェーズ 4:相互リンク

cat package.json frontend/package.json web/package.json 2>/dev/null | grep -E '"@sentry|"sentry-'
検出されたフロントエンド提案
React / Next.jssentry-react-sdk
Svelte / SvelteKitsentry-svelte-sdk
Vue@sentry/vue — docs.sentry.io/platforms/javascript/guides/vue/

Ruby バックエンドと JS フロントエンド間でトレースをつなぐ方法については、references/tracing.md →「フロントエンドのトレース連結」を参照してください。


トラブルシューティング

問題解決策
イベントが表示されないconfig.debug = true を設定し、DSN を確認してください。最初のリクエストより前に Sentry.init が呼び出されていることを確認してください
Rails の例外が記録されないsentry-rails が必要です。sentry-ruby だけでは Rails のエラーハンドラーにフックしません
トレースがない(ネイティブ)traces_sample_rate > 0 を設定し、sentry-rails または Sentry::Rack::CaptureExceptions があることを確認してください
トレースがない(OTLP)opentelemetry-exporter-otlp gem がインストールされていることを確認してください。otlp.enabled = true を使用する場合は、traces_sample_rate を設定しないでください
Sidekiq ジョブがトレースされないsentry-sidekiq gem を追加してください
リクエストコンテキストが不足しているconfig.send_default_pii = true を設定してください
ログが表示されないconfig.enable_logs = true を設定してください。sentry-ruby ≥ 5.27.0 が必要です
メトリクスが表示されないenable_metrics が false ではないことを確認し、DSN を確認してください
シャットダウン時にイベントが失われるProcess.exit! は at_exit フックをスキップします。強制終了する前に Sentry.flush を明示的に呼び出してください
フォークするサーバーでイベントが失われるPuma/Unicorn はワーカープロセスをフォークします。on_worker_boot または after_fork で再初期化してください。再初期化しないと、バックグラウンドワーカースレッドが子プロセスで終了します
DSN が拒否される/イベントが配信されないDSN の形式を確認してください:https://<key>@o<org>.ingest.sentry.io/<project>。トランスポートエラーを確認するには config.debug = true を設定してください

コメント