Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

sentry-react-sdk

React アプリケーションに Sentry SDK を導入・設定するスキルです。「React に Sentry を追加したい」「@sentry/react をインストールしたい」、またはエラー監視・トレーシング・セッションリプレイ・プロファイリング・ロギングを設定したい場合に使用してください。React 16以降、React Router v5〜v7(非フレームワークモード)、TanStack Router、Redux、Vite、webpackに対応しています。

description の原文を見る

Full Sentry SDK setup for React. Use when asked to "add Sentry to React", "install @sentry/react", or configure error monitoring, tracing, session replay, profiling, or logging for React applications. Supports React 16+, React Router v5-v7 non-framework mode, TanStack Router, Redux, Vite, and webpack.

SKILL.md 本文

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

Sentry React SDK

React プロジェクトをスキャンし、Sentry の完全セットアップをガイドする指向型ウィザード。

このスキルを呼び出すタイミング

  • ユーザーが「React に Sentry を追加」または「React アプリで Sentry をセットアップ」するよう求めている
  • ユーザーが React でエラーモニタリング、トレーシング、セッションリプレイ、プロファイリング、またはロギングを望んでいる
  • ユーザーが @sentry/react、React Sentry SDK、または Sentry エラーバウンダリーに言及している
  • ユーザーが React Router v5/v6/v7 非フレームワークナビゲーション、Redux ステート、またはコンポーネントパフォーマンスのモニタリングを望んでいる

プロジェクトが @sentry/react-router を使用する React Router フレームワークモードの場合は、このスキルの代わりに sentry-react-router-framework-sdk を使用してください。

注意: 以下の SDK バージョンと API は、執筆時点での Sentry ドキュメント (@sentry/react ≥8.0.0) を反映しています。 実装前に常に docs.sentry.io/platforms/javascript/guides/react/ で確認してください。


フェーズ 1: 検出

推奨を行う前に、プロジェクトを理解するために以下のコマンドを実行します:

# React バージョンを検出
cat package.json | grep -E '"react"|"react-dom"'

# 既存の Sentry を確認
cat package.json | grep '"@sentry/'

# ルーターとフレームワークモードのヒントを検出
cat package.json | grep -E '"react-router-dom"|"react-router"|"@react-router/"|"@tanstack/react-router"|"@sentry/react-router"'

# ステート管理を検出
cat package.json | grep -E '"redux"|"@reduxjs/toolkit"'

# ビルドツールを検出
ls vite.config.ts vite.config.js webpack.config.js craco.config.js 2>/dev/null
cat package.json | grep -E '"vite"|"react-scripts"|"webpack"'

# ロギングライブラリを検出
cat package.json | grep -E '"pino"|"winston"|"loglevel"'

# 隣接ディレクトリのバックエンドコンパニオンを確認
ls ../backend ../server ../api 2>/dev/null
cat ../go.mod ../requirements.txt ../Gemfile ../pom.xml 2>/dev/null | head -3

決定する事項:

質問影響
React 19+?reactErrorHandler() フックパターンを使用
React <19?Sentry.ErrorBoundary を使用
@sentry/react は既に存在?インストールをスキップ、機能設定に直進
React Router フレームワークモードのインジケータ (@sentry/react-router@react-router/*)?sentry-react-router-framework-sdk を使用
react-router-dom v5/v6/v7?使用するルーター統合を決定
@tanstack/react-router?tanstackRouterBrowserTracingIntegration() を使用
Redux が使用中?createReduxEnhancer() を推奨
Vite が検出?sentryVitePlugin でソースマップを設定
CRA (react-scripts)?CRACO で @sentry/webpack-plugin を使用してソースマップを設定
バックエンドディレクトリが見つかった?フェーズ 4 のクロスリンク提案をトリガー

フェーズ 2: 推奨

見つかったものに基づいて具体的な推奨を提示します。オープンエンドな質問をしないでください — 提案でリードしてください:

推奨 (コアカバレッジ):

  • エラーモニタリング — 常に; ハンドルされていないエラー、React エラーバウンダリー、React 19 フックをキャプチャ
  • トレーシング — React SPA はページロード、ナビゲーション、API コールトレーシングから恩恵を受けます
  • セッションリプレイ — ユーザー向けアプリに推奨; エラー周辺のセッションを記録

オプション (強化された可観測性):

  • ロギングSentry.logger.* 経由の構造化ログ; 構造化ログ検索が必要な場合に推奨
  • プロファイリング — JS Self-Profiling API (⚠️ 実験的; クロスオリジン分離ヘッダーが必要)

推奨ロジック:

機能推奨するタイミング...
エラーモニタリング常に — 交渉の余地のないベースライン
トレーシングReact SPA には常に — ページロード + ナビゲーション span は高い価値
セッションリプレイユーザー向けアプリ、ログインフロー、またはチェックアウトページ
ロギングアプリが構造化ログ検索またはログ-トレース相関を必要とする場合
プロファイリングパフォーマンスクリティカルなアプリ; サーバーが Document-Policy: js-profiling ヘッダーを送信

React 固有のエクストラ:

  • React 19 が検出される → createRootreactErrorHandler() をセットアップ
  • React Router v5/v6/v7 非フレームワークが検出される → マッチするルーター統合を設定 (フェーズ 3 を参照)
  • React Router フレームワークモードが検出される → sentry-react-router-framework-sdk に切り替え
  • Redux が検出される → Redux ストアに createReduxEnhancer() を追加
  • Vite が検出される → ソースマップ用に sentryVitePlugin を設定 (読み取り可能なスタックトレースに必須)

提案: 「エラーモニタリング + トレーシング + セッションリプレイをセットアップすることをお勧めします。ロギングまたはプロファイリングも追加したいですか?」


フェーズ 3: ガイド

インストール

npm install @sentry/react --save

src/instrument.ts を作成

Sentry は他のコードが実行される前に初期化する必要がありますSentry.init() を専用のサイドカーファイルに配置します:

import * as Sentry from "@sentry/react";

Sentry.init({
  dsn: import.meta.env.VITE_SENTRY_DSN, // ビルドツールに応じて調整 (下の表を参照)
  environment: import.meta.env.MODE,
  release: import.meta.env.VITE_APP_VERSION, // ビルド時にインジェクト

  sendDefaultPii: true,

  integrations: [
    Sentry.browserTracingIntegration(),
    Sentry.replayIntegration({
      maskAllText: true,
      blockAllMedia: true,
    }),
  ],

  // トレーシング
  tracesSampleRate: 1.0, // 本番環境では 0.1–0.2 に低下
  tracePropagationTargets: ["localhost", /^https:\/\/yourapi\.io/],

  // セッションリプレイ
  replaysSessionSampleRate: 0.1,
  replaysOnErrorSampleRate: 1.0,

  enableLogs: true,
});

ビルドツール別 DSN 環境変数:

ビルドツール変数名コード内でのアクセス
ViteVITE_SENTRY_DSNimport.meta.env.VITE_SENTRY_DSN
Create React AppREACT_APP_SENTRY_DSNprocess.env.REACT_APP_SENTRY_DSN
カスタム webpackSENTRY_DSNprocess.env.SENTRY_DSN

エントリーポイントセットアップ

エントリーファイルで instrument.ts最初のインポートとしてインポートします:

// src/main.tsx (Vite) or src/index.tsx (CRA/webpack)
import "./instrument";              // ← 必ず最初に

import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App";

createRoot(document.getElementById("root")!).render(
  <StrictMode>
    <App />
  </StrictMode>
);

React バージョン固有のエラーハンドリング

React 19+createRootreactErrorHandler() を使用:

import { reactErrorHandler } from "@sentry/react";

createRoot(document.getElementById("root")!, {
  onUncaughtError: reactErrorHandler(),
  onCaughtError: reactErrorHandler(),
  onRecoverableError: reactErrorHandler(),
}).render(<App />);

React <19 — アプリを Sentry.ErrorBoundary でラップ:

import * as Sentry from "@sentry/react";

createRoot(document.getElementById("root")!).render(
  <Sentry.ErrorBoundary fallback={<p>Something went wrong</p>} showDialog>
    <App />
  </Sentry.ErrorBoundary>
);

<Sentry.ErrorBoundary> を、独立してエラーをキャッチする必要があるサブツリー (ルートセクション、ウィジェットなど) に使用します。

ルーター統合

ルーター (非フレームワークモード) に対応する統合を設定します:

ルーター統合
React Router v7reactRouterV7BrowserTracingIntegrationuseEffectuseLocationuseNavigationTypecreateRoutesFromChildrenreact-routermatchRoutes
React Router v6reactRouterV6BrowserTracingIntegrationuseEffectuseLocationuseNavigationTypecreateRoutesFromChildrenreact-router-dommatchRoutes
React Router v5reactRouterV5BrowserTracingIntegrationルートを withSentryRouting(Route) でラップ
TanStack RoutertanstackRouterBrowserTracingIntegration(router)ルーターインスタンスをパス — フックは不要
ルーターなし / カスタムbrowserTracingIntegration()URL パスでトランザクション命名

React Router v6/v7 セットアップ:

// instrument.ts の integrations 配列内:
import React from "react";
import {
  createRoutesFromChildren, matchRoutes,
  useLocation, useNavigationType,
} from "react-router-dom"; // v7 の場合は "react-router"
import * as Sentry from "@sentry/react";
import { reactRouterV6BrowserTracingIntegration } from "@sentry/react";
import { createBrowserRouter } from "react-router-dom";

// オプション A — createBrowserRouter (v6.4+ 推奨):
const sentryCreateBrowserRouter = Sentry.wrapCreateBrowserRouterV6(createBrowserRouter);
const router = sentryCreateBrowserRouter([...routes]);

// オプション B — React Router v7 用 createBrowserRouter:
// const sentryCreateBrowserRouter = Sentry.wrapCreateBrowserRouterV7(createBrowserRouter);

// オプション C — フック統合 (データ API なし v6):
Sentry.init({
  integrations: [
    reactRouterV6BrowserTracingIntegration({
      useEffect: React.useEffect,
      useLocation,
      useNavigationType,
      matchRoutes,
      createRoutesFromChildren,
    }),
  ],
});

TanStack Router セットアップ:

import { tanstackRouterBrowserTracingIntegration } from "@sentry/react";

// TanStack ルーターインスタンスをパス:
Sentry.init({
  integrations: [tanstackRouterBrowserTracingIntegration(router)],
});

Redux 統合 (検出された場合)

import * as Sentry from "@sentry/react";
import { configureStore } from "@reduxjs/toolkit";

const store = configureStore({
  reducer: rootReducer,
  enhancers: (getDefaultEnhancers) =>
    getDefaultEnhancers().concat(Sentry.createReduxEnhancer()),
});

ソースマップセットアップ (強く推奨)

ソースマップなしでは、スタックトレースはミニ化されたコードを表示します。ビルドプラグインを設定して、ソースマップを自動的にアップロードします:

Vite (vite.config.ts):

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { sentryVitePlugin } from "@sentry/vite-plugin";

export default defineConfig({
  build: { sourcemap: "hidden" },
  plugins: [
    react(),
    sentryVitePlugin({
      org: process.env.SENTRY_ORG,
      project: process.env.SENTRY_PROJECT,
      authToken: process.env.SENTRY_AUTH_TOKEN,
    }),
  ],
});

.env に追加します (コミットしないこと):

SENTRY_AUTH_TOKEN=sntrys_...
SENTRY_ORG=my-org-slug
SENTRY_PROJECT=my-project-slug

Create React App (CRACO 経由):

npm install @craco/craco @sentry/webpack-plugin --save-dev
// craco.config.js
const { sentryWebpackPlugin } = require("@sentry/webpack-plugin");

module.exports = {
  webpack: {
    plugins: {
      add: [
        sentryWebpackPlugin({
          org: process.env.SENTRY_ORG,
          project: process.env.SENTRY_PROJECT,
          authToken: process.env.SENTRY_AUTH_TOKEN,
        }),
      ],
    },
  },
};

合意した各機能について

機能を 1 つずつ実装していきます。参照ファイルを読み込み、その手順を正確に従い、次に進む前に検証します:

機能参照読み込むタイミング...
エラーモニタリング${SKILL_ROOT}/references/error-monitoring.md常に (ベースライン)
トレーシング${SKILL_ROOT}/references/tracing.mdSPA ナビゲーション / API コールトレーシング
セッションリプレイ${SKILL_ROOT}/references/session-replay.mdユーザー向けアプリ
ロギング${SKILL_ROOT}/references/logging.md構造化ログ検索 / ログ-トレース
プロファイリング${SKILL_ROOT}/references/profiling.mdパフォーマンスクリティカルなアプリ
React 機能${SKILL_ROOT}/references/react-features.mdRedux、コンポーネント追跡、ソースマップ、統合カタログ

各機能について: ${SKILL_ROOT}/references/<feature>.md を読む、手順に正確に従う、動作を検証します。


設定リファレンス

キー Sentry.init() オプション

オプションデフォルト
dsnstring必須。 空のときは SDK 無効
environmentstring"production"例: "staging""development"
releasestring例: "my-app@1.0.0" または git SHA — エラーをリリースにリンク
sendDefaultPiibooleanfalseIP アドレスとリクエストヘッダーを含む
tracesSampleRatenumber0–1; 開発では 1.0、本番では 0.1–0.2
tracesSamplerfunctionトランザクション単位でサンプリング; レート上書き
tracePropagationTargets(string|RegExp)[]分散トレーシングヘッダーを受け取る送信 URL
replaysSessionSampleRatenumber記録されるすべてのセッションの割合
replaysOnErrorSampleRatenumber記録されるエラーセッションの割合
enableLogsbooleanfalseSentry.logger.* API を有効化
attachStacktracebooleanfalsecaptureMessage() コールのスタックトレース
maxBreadcrumbsnumber100イベント単位で保存される breadcrumb
debugbooleanfalseコンソールへの冗長 SDK 出力
tunnelstring広告ブロッカーをバイパスするプロキシ URL

React 互換性マトリックス

React バージョンエラーハンドリング方法SDK 最小
React 19+createRoot での reactErrorHandler()@sentry/react ≥8.0.0
React 16–18Sentry.ErrorBoundary コンポーネント@sentry/react ≥7.0.0
React 16componentDidCatch クラスバウンダリー@sentry/react ≥6.0.0

検証

テストイベントをトリガーして、Sentry がデータを受け取っていることを確認します:

// アプリ内の任意の場所に一時的なテストボタンを追加
import * as Sentry from "@sentry/react";

function SentryTest() {
  return (
    <>
      <button onClick={() => { throw new Error("Sentry React test error"); }}>
        Test Error
      </button>
      <button onClick={() => Sentry.captureMessage("Sentry test message", "info")}>
        Test Message
      </button>
    </>
  );
}

Sentry ダッシュボードを確認します:

  • Issues → エラーが数秒以内に表示される
  • Traces → ページロードおよびナビゲーショントランザクションが表示される
  • Replays → ページ操作後にセッション記録が表示される
  • Logs → ロギング有効時に構造化ログエントリが表示される

何も表示されない場合は、Sentry.init()debug: true を設定し、ブラウザコンソールで確認します。


フェーズ 4: クロスリンク

React セットアップ完了後、Sentry カバレッジが不足しているコンパニオンバックエンドを確認します:

ls ../backend ../server ../api ../go ../python 2>/dev/null
cat ../go.mod 2>/dev/null | head -3
cat ../requirements.txt ../pyproject.toml 2>/dev/null | head -3
cat ../Gemfile 2>/dev/null | head -3
cat ../pom.xml 2>/dev/null | grep '<artifactId>' | head -3

Sentry が設定されていないバックエンドが存在する場合、対応するスキルを提案します:

バックエンド検出スキルを提案
Go (go.mod)sentry-go-sdk
Python (requirements.txtpyproject.toml)sentry-python-sdk
Ruby (Gemfile)sentry-ruby-sdk
Java (pom.xmlbuild.gradle)@sentry/java を使用 — docs.sentry.io/platforms/java/ を参照
Node.js (Express、Fastify)@sentry/node を使用 — docs.sentry.io/platforms/javascript/guides/express/ を参照

トラブルシューティング

問題ソリューション
イベントが表示されないdebug: true を設定、DSN を確認、ブラウザコンソルで SDK エラーを確認
ソースマップが機能しない本番モード (npm run build) でビルド; SENTRY_AUTH_TOKEN が設定されていることを確認
ミニ化されたスタックトレースソースマップがアップロードされていない — プラグイン設定と認証トークンを確認
instrument.ts が最初に実行されないエントリーファイルで React/app インポートの前の最初のインポートであることを確認
React 19 エラーがキャプチャされないreactErrorHandler() が 3 つすべての createRoot オプションにパスされていることを確認
React <19 エラーがキャプチャされない<Sentry.ErrorBoundary> がコンポーネントツリーをラップしていることを確認
ルータートランザクション名が <unknown>ルーターバージョンに対応するルーター統合を追加
tracePropagationTargets がマッチしない正規表現のエスケープを確認; デフォルトは localhost と DSN オリジンのみ
セッションリプレイが記録されないreplayIntegration() が init に含まれていることを確認; replaysSessionSampleRate を確認
Redux アクションが breadcrumb にないストア enhancer に Sentry.createReduxEnhancer() を追加
広告ブロッカーがイベントを破棄tunnel: "/sentry-tunnel" を設定、サーバー側リレーエンドポイントを追加
リプレイストレージコストが高いreplaysSessionSampleRate を低下; replaysOnErrorSampleRate: 1.0 を維持
プロファイリングが機能しないドキュメントレスポンスで Document-Policy: js-profiling ヘッダーが設定されていることを確認

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
getsentry
リポジトリ
getsentry/sentry-for-ai
ライセンス
MIT
最終更新
不明

Source: https://github.com/getsentry/sentry-for-ai / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: getsentry · getsentry/sentry-for-ai · ライセンス: MIT