こんにちは!プロダクトの裏側を支えるバックエンド、そしてAPIサーバーの開発、本当にお疲れ様です。
夜中にスマホが鳴り響き、「なんかAPIが500エラー返してるらしいんだけど…」という絶望的なSlack通知。慌ててローカルのログを開いても、ログの海から該当リクエストのスタックトレースを探すだけで時間が溶けていく――。そんな経験、ありませんか?
バックエンド開発において、「エラーを見逃さないこと」は、ユーザーの信頼を守るための絶対防衛ラインです。そして、その防衛を劇的に楽にしてくれるのが、今回紹介するエラートラッキングツール「Rollbar」です。
今回は、Node.js(Express)環境を舞台に、Rollbarを魂を込めて実装する方法を解説します。「エラー検知の仕組みってどうなってるの?」という基礎から、現場で即座に役立つ実践的なセットアップまで、一歩ずつ丁寧に紐解いていきましょう。これをマスターすれば、あなたのデバッグ作業は劇的に楽になりますよ。
—
1. なぜ「ログ出力」だけでは足りないのか?
「console.errorでファイルに吐き出してるから大丈夫だよ」
そう思うかもしれませんが、大規模なAPIサーバーやマイクロサービスの世界では、標準出力(stdout)やファイルログだけでは以下の壁にぶつかります。
- ノイズの海: 大量のアクセスログの中にエラーが埋もれ、本当に重要な例外が見えなくなる。
- 文脈の欠如: 「何が起きたか(Error)」は分かっても、「誰の、どんなリクエスト(Context)」で起きたかが分からない。
- 初動の遅れ: ユーザーから「画面が固まりました」と連絡を受けて初めてエラーに気づく。
Rollbarなどのエラートラッキングツールは、これらを解決するために存在します。エラーが発生した瞬間に、「どのコードの何行目で、どんなリクエストパラメータの時に、どんなスタックトレースで起きたか」を自動収集し、グループ化して通知してくれます。
—
2. 環境構築とインストール
それでは、実際にExpressアプリケーションにRollbarを組み込んでいきましょう。
まずは、必要なパッケージをインストールします。プロジェクトのルートディレクトリで以下のコマンドを実行してください。
npm install express rollbar dotenv
- `express`: お馴染みのWebフレームワーク
- `rollbar`: 公式のNode.js用SDK
- `dotenv`: 環境変数を安全管理するためのライブラリ
—
3. 最強の初期化:シングルトンなRollbarクライアントの作成
実務でやりがちなアンチパターンとして、「ファイルごとにバラバラにRollbarを初期化してしまう」というものがあります。これでは環境ごとの切り替え(本番環境だけ有効にする等)が漏れる原因になります。
まずは、プロジェクトの共通パーツとして、Rollbarインスタンスを生成・設定するモジュールを作りましょう。
`src/logger/rollbar.js`
const Rollbar = require(‘rollbar’);
require(‘dotenv’).config();
// Rollbarインスタンスの初期化
const rollbar = new Rollbar({
accessToken: process.env.ROLLBAR_ACCESS_TOKEN, // Rollbarダッシュボードから取得するプロジェクトトークン
environment: process.env.NODE_ENV || ‘development’, // ‘production’, ‘development’ などの環境名
captureUncaught: true, // キャッチされなかった例外(Uncaught Exception)を自動捕捉
captureUnhandledRejections: true, // キャッチされなかったPromiseの拒否(Unhandled Rejection)を自動捕捉
// ソースマップ対応(TypeScriptやBabelを使う場合に超重要ですが、JSでも定義しておくと安心)
codeVersion: ‘1.0.0’,
});
module.exports = rollbar;
> 💡 先輩からのワンポイントアドバイス
> `captureUncaught` と `captureUnhandledRejections` は必ず `true` にしてください。非同期処理(Async/Await)の普及により、`try/catch` で囲み忘れたPromiseのrejectがアプリをクラッシュさせる原因の9割を占めています。ここをRollbarに拾わせるのが、夜眠れるようになるための第一歩です。
—
4. Expressへのミドルウェアとしての組み込み
次に、ExpressのアプリケーションにRollbarを組み込みます。
ここで最も重要なのは、「エラーハンドリングミドルウェアは、すべてのルーティング定義の『一番最後』に置く必要がある」というExpressのルールです。
`src/app.js`
const express = require(‘express’);
const rollbar = require(‘./logger/rollbar’); // 先ほど作ったRollbarモジュール
const app = express();
app.use(express.json());
// — 通常のルーティング —
app.get(‘/’, (req, res) => {
res.send(‘Hello, Rollbar World!’);
});
// 意図的にエラーを起こすテスト用エンドポイント
app.get(‘/error-test’, (req, res, next) => {
// 例:存在しないプロパティにアクセスしてTypeErrorを発生させる
const user = null;
console.log(user.name);
});
// — 【超重要】Rollbarのエラーハンドリングミドルウェア —
// すべてのルート定義の直後、かつ他のエラーハンドラーの前に配置します
app.use(rollbar.errorHandler());
// 一般的なフォールバックエラーハンドラー(必要に応じて)
app.use((err, req, res, next) => {
res.status(500).json({
error: ‘Internal Server Error’,
// 本番環境ではスタックトレースを隠すなどの配慮を
message: process.env.NODE_ENV === ‘production’ ? ‘予期せぬエラーが発生しました’ : err.message,
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
—
5. 精度高い「Hello World」!動作確認の儀式
設定ができたら、実際に正しくエラーがRollbarに飛ぶか確認してみましょう。
環境変数ファイル `.env` を作成し、Rollbarのプロジェクトアクセストークンを設定します。
`.env`
ROLLBAR_ACCESS_TOKEN=あなたのアクセストークンをここに貼り付け
NODE_ENV=development
PORT=3000
サーバーを起動します。
node src/app.js
ブラウザ、またはターミナルから `http://localhost:3000/error-test` にアクセスしてください。
サーバー側で `TypeError: Cannot read properties of null (reading ‘name’)` が発生し、Expressのデフォルト(またはカスタム)エラーレスポンスが返ってくるはずです。
そして、Rollbarのダッシュボード画面を開いてみてください。
そこに、先ほど発生させたエラーが、以下のようなリッチな情報とともに美しく記録されているはずです:
- 発生時刻
- スタックトレース(どのファイルの何行目か)
- リクエストのURL (`/error-test`)
- HTTPメソッド (`GET`)
- 環境変数やリクエストヘッダの一部
「おぉ、ちゃんと届いた!」この瞬間が、エンジニアにとって最も快感な瞬間の一つです。
—
6. さらに現場力を上げるための応用テクニック
基本設定が終わったあなたへ、現場で即座に役立つプロの技をいくつか授けます。
① ユーザーコンテキストの付与
「誰でエラーが起きているか」が分からないとデバッグできません。Expressのミドルウェアなどで、ログイン中のユーザー情報をRollbarに紐付けましょう。
app.use((req, res, next) => {
if (req.user) {
rollbar.configure({
payload: {
person: {
id: req.user.id,
username: req.user.username,
email: req.user.email,
}
}
});
}
next();
});
② 意図的なカスタムメッセージの送信
システムダウンのような致命的エラーだけでなく、「決済APIとの通信がタイムアウトした(けれどリトライで復旧した)」といった、ログに残しておきたい重要な警告もRollbarに送ることができます。
try {
// 外部API呼び出し
} catch (error) {
rollbar.warn(‘外部決済APIとの通信が不安定です’, { errorDetails: error.message });
}
`rollbar.error()` だけでなく、`rollbar.warning()` や `rollbar.info()` を使い分けることで、ノイズのない美しいダッシュボードが作れます。
—
おわりに
今回は、Node.js/Express環境でのRollbarの導入から実践的な設定までを解説しました。
監視やオブザーバビリティの世界の第一歩は、「エラーを隠さないこと」、そして「起きた事実を最速で正確にキャッチすること」です。Rollbarを正しくセットアップしておけば、「ユーザーに指摘される前にエラーに気づき、涼しい顔で修正パッチを当てる」という、最高にクールなバックエンドエンジニアになれます。
日々の開発作業が、今日から少しでも楽で、スリリングで楽しいものになりますように。
それでは、良きエラートラッキングライフを!