mcpField
S
sentry-best-practices

sentry-best-practices

github.com/andrelandgraf開発2398 回インストール20 週間前に更新
リポジトリ

sentry-best-practices について

sentry-best-practices は、アプリケーションに Sentry の計測を組み込む開発スキルです。Sentry Next.js SDK の例を交え、例外、ユーザーやイベントのコンテキスト、パフォーマンス、パンくず、構造化ログを扱います。

主な機能

  1. 01処理済み例外の捕捉
  2. 02ユーザー、タグ、追加情報の付与
  3. 03スパンによる処理の追跡
  4. 04カスタムパンくずの追加
  5. 05構造化ログの記録

活用シーン

  1. 01関連情報を添えて処理済みエラーを追跡する
  2. 02API リクエストや UI 操作を計測する
  3. 03カスタムイベントと構造化ログを記録する

インストール

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

$npx skills add https://github.com/andrelandgraf/fullstackrecipes --skill sentry-best-practices

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

詳細

Sentry のベストプラクティス

Sentry で例外を記録し、コンテキストを追加して、パフォーマンスをトレースし、ログを記録します。

前提条件

まず、次のセットアップ手順を完了してください。

  • Sentry のセットアップ
例外の記録

処理済みでも追跡する価値のあるエラーを記録します。

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

try {
  await riskyOperation();
} catch (err) {
  Sentry.captureException(err);
}
コンテキストの追加

setUser はセッション中に保持されます。例外ごとに tags(インデックス化され、フィルタリング可能)と extra(任意の詳細情報)を追加します。

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

Sentry.setUser({ id: session.user.id, email: session.user.email });

Sentry.captureException(err, {
  tags: { feature: "checkout", plan: "pro" },
  extra: { orderId: "order_123", items: cart.items },
});

サインアウト時にユーザー情報をクリアします。

Sentry.setUser(null);
パフォーマンスのトレース

意味のある操作を startSpan で囲みます。同期形式では、属性を設定するための span を受け取ります。

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

const users = await Sentry.startSpan(
  { op: "http.client", name: "GET /api/users" },
  async () => (await fetch("/api/users")).json(),
);

Sentry.startSpan({ op: "ui.click", name: "Submit Button Click" }, (span) => {
  span.setAttribute("form", "checkout");
  processSubmit();
});
パンくずリスト

コンソールログ、フェッチ、UI のクリックは自動的に記録されます。カスタムイベントには手動でパンくずリストを追加します。

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

Sentry.addBreadcrumb({
  category: "auth",
  message: "User signed in",
  level: "info",
});
Sentry ロガー

構造化ログは「Logs」タブに表示されます。

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

const { logger } = Sentry;

logger.info("Payment processed", { orderId: "123", amount: 99.99 });
logger.warn("Rate limit approaching", { current: 90, max: 100 });
logger.error("Payment failed", { orderId: "123", reason: "declined" });

参考資料

コメント