本番環境の「読めないスタックトレース」に別れを告げる:Sentry Releases & Source Maps 完全攻略
こんにちは。プロダクトの成長とともに増え続ける「原因不明のJavaScriptエラー」に頭を抱えたことはありませんか?
「Sentryでエラーは飛んできているが、表示されるのはminifyされた難読化コードの海……」。これではデバッグに時間がかかるだけでなく、チームの士気も下がります。オブザーバビリティの真髄は、「どれだけ速く、正確に原因へ到達できるか」にあります。
今回は、Webpack/Vite環境において、SentryのReleasesとSource Mapsを完璧に統合し、本番環境の難読化コードを「開発時のソースコード」へと瞬時に復元するための、現場直結の極限設定を伝授します。
—
1. なぜ「Releases」を怠るのか?(概念の再定義)
Sentryにおける`Release`は単なるバージョン管理ではありません。これは「デプロイされたコードの正体」をSentryに教えるためのIDです。
`Release`を指定しないと、Sentryは「どのビルド成果物に対してソースマップを適用すべきか」を判断できず、古いソースマップと新しいコードが混在する地獄を見ることになります。
現場の鉄則:リリースIDは「Gitのコミットハッシュ」一択
動的なバージョン番号(例: `v1.2.0`)は使わないでください。デプロイのたびに一意に定まる `git rev-parse HEAD` をIDに採用することで、ソースマップの不整合を物理的に排除できます。
—
2. ビルドパイプライン統合のベストプラクティス
ViteやWebpackを使用している場合、手動でソースマップをアップロードするのはナンセンスです。`@sentry/webpack-plugin` または `@sentry/vite-plugin` を使い、ビルドプロセスに自動組み込みします。
Vite + Sentry 統合設定 (`vite.config.ts`)
import { sentryVitePlugin } from “@sentry/vite-plugin”;
import { defineConfig } from “vite”;
export default defineConfig({
build: {
sourcemap: true, // これを忘れると元も子もない
},
plugins: [
sentryVitePlugin({
org: “your-org-slug”,
project: “your-project-slug”,
authToken: process.env.SENTRY_AUTH_TOKEN, // CI環境変数で管理
// ソースマップをアップロードした後に削除する設定(セキュリティの鉄則)
telemetry: false,
// ビルド成果物のみを対象にするためのパス設定
include: “./dist”,
ignore: [“node_modules”, “vite.config.ts”],
release: {
name: process.env.COMMIT_SHA, // CIで注入したコミットハッシュ
},
}),
],
});
ここがプロのポイント:
- `sourcemap: true` は必須ですが、本番環境のサーバーから直接 `.map` ファイルを公開してはいけません(ソースコードが漏洩します)。Sentryにアップロードした後は、Webサーバーからは削除するのが鉄則です。
—
3. Sentryの真価を引き出す「神テクニック」
① チーム開発を加速させる:`sentry.client.config.ts` の共有化
チームメンバーごとに設定がバラつくのは「オブザーバビリティの債務」です。以下の設定を全環境で統一してください。
Sentry.init({
dsn: process.env.SENTRY_DSN,
release: process.env.COMMIT_SHA, // ビルド時に注入
// 開発環境と本番でノイズを分けるための設定
environment: process.env.NODE_ENV,
// レートリミット制御:無限のログを防ぐ
tracesSampleRate: 0.1,
// リリースごとのソースマップ適用を確認するためのタグ付け
initialScope: {
tags: { ‘build.env’: ‘production’ }
}
});
② 開発スピードを劇的に上げる「キーボードショートカット」
SentryのIssue画面で以下の操作を覚えてください。
- `j` / `k`: Issueリストの上下移動。マウス不要。
- `o`: 選択したIssueを開く。
- `a`: Issueの担当者を自分に割り当てる。
- `Space`: Issueを選択状態にする。
③ 入れるべき「神プラグイン」
- GitHub Integration: SentryのIssue画面から、直接GitHubのIssue作成やプルリクエストへのリンクが可能です。「誰が書いたコードか」をGit Blameで即座に特定できます。
—
4. トラブルシューティング:なぜ解決しないのか?
「設定したのにスタックトレースが復元されない」という場合、以下の3点を確認してください。
1. `rewrite` フラグの確認: `sentry-cli` の設定で `rewrite: true` になっていますか? これにより、ソースマップ内のパスと、アップロードされたソースコードのパスが正しくマッピングされます。
2. CDNパスの不一致: `urlPrefix` を設定し、Sentryがサーバー上のどのパス(例: `~/assets/`)からソースマップを探すべきかを明示していますか?
3. ビルド順序: 「ソースマップのアップロード」が「本番サーバーへのデプロイ」より前に完了している必要があります。CIパイプラインの順序を再確認してください。
—
最後に:オブザーバビリティは「文化」である
ソースマップを適切に管理することは、単なるエラー追跡ではありません。「自分たちのコードが本番でどう動いているか」を可視化する文化そのものです。
難読化されたコードに翻弄される時間は、今日で終わりにしましょう。この構成を一度組んでしまえば、あなたはデバッグに追われる日々から解放され、より創造的な開発に集中できるはずです。
もし「特定のエラーだけスタックトレースが取れない」といった深淵な問題に突き当たったら、Sentryの `Debug` モードをONにして、アップロードログを詳細に追跡してみてください。答えは常に、ビルドパイプラインの出力の中にあります。
さあ、今すぐビルドパイプラインをアップデートして、最高レベルのオブザーバビリティを手に入れてください!