こんにちは!プロダクトの品質を守る日々のメンテナンス、本当にお疲れ様です。
「またこのエラーか……。っていうか、ここ、テスト書いてなかったんだっけ?」
障害対応のたびにコードの奥底を覗き込み、テストの抜け漏れに絶望した経験はありませんか?
世の中にはたくさんの監視ツールがありますが、エラーが起きている「その場所」と、テストがどれだけ網羅されている「その事実」を脳内でリンクさせるのは、意外と骨が折れる作業です。
今回は、SentryとCodecovを組み合わせて、「テストが不足している場所ほど、よくエラーが起きる」という残酷な現実を美しく可視化する裏技を伝授します。
これをマスターすれば、感覚や勘に頼らず、「次にどのテストを書くべきか」の優先順位が手に取るようにわかるようになりますよ。毎日の泥臭い品質改善が、ぐっとスマートになります。一緒に見ていきましょう!
—
1. SentryとCodecov連携の役割:なぜこの組み合わせが最強なのか?
まず、それぞれのツールが何をしてくれるのか、役割を整理しておきましょう。
- Sentry: アプリケーションで起きたエラーをリアルタイムでキャッチし、「どのファイルの何行目でバグったか」を教えてくれるプロフェッショナル。
- Codecov: 「プロジェクト全体のコードのうち、何パーセントがテストされているか(カバレッジ)」を計測・可視化してくれるプロフェッショナル。
この2つを連携させると、Sentryのエラー詳細画面上で、「あ、このエラーが発生している関数、テストカバレッジが0%だわ」ということが一目でわかるようになります。
「バグが多いのにテストがない箇所」は、まさにプロダクトのアキレス腱(脆弱ポイント)です。ここを可視化することで、限られた開発リソースを「本当にテストが必要な場所」に集中させることができるようになります。
—
2. 基礎セットアップ:両者を繋ぐブリッジを作る
それでは、実際に手を動かしていきましょう。今回はモダンなWebアプリケーション(Node.js / TypeScript環境を想定)をベースに解説します。
ステップ1: Sentry側での準備
まずはSentryのプロジェクトで、コミットSHA(Gitのバージョン)を追跡できるように設定します。Sentryは「どのバージョンのコードでエラーが起きたか」を知る必要があるからです。
1. Sentryのダッシュボードから、Organization(組織)の Auth Tokens を発行します(スコープは `project:read`, `org:read` などを付与)。
2. CI/CDパイプライン(GitHub Actionsなど)で、Sentry CLIを使ってリリースを通知できるようにします。
ステップ2: Codecov側での準備
1. [Codecov](https://about.codecov.io/)にGitHubアカウントでログインし、対象のリポジトリを有効化します。
2. リポジトリの設定から Codecov Upload Token を取得し、GitHubの Repository Secrets に `CODECOV_TOKEN` として登録します。
—
3. 実践!GitHub Actionsで「エラーとカバレッジ」を統合するキーストーン
ここが一番重要な魔法のステップです。GitHub Actionsのワークフローの中で、テストを実行し、カバレッジレポートをCodecovにアップロードしつつ、Sentryにリリース情報を通知します。
以下の設定ファイルを `.github/workflows/ci.yml` として配置してください。
name: CI & Quality Pipeline
on:
push:
branches: [ “main” ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
# 1. リポジトリのコードをチェックアウト
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0 # SentryやCodecovがGit履歴を正確に追うために必須!
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ’20’
cache: ‘npm’
- name: Install dependencies
run: npm ci
# 2. テストを実行し、LCOV形式のカバレッジレポートを出力
- name: Run Tests with Coverage
run: npm test — –coverage –coverageReporters=lcov
# 3. Codecovへカバレッジを送信
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
# 4. Sentryに「このリリースがデプロイされたこと」を通知
- name: Create Sentry Release
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ‘your-org-slug’
SENTRY_PROJECT: ‘your-project-slug’
run: |
# Sentry CLIのインストール
curl -sL https://sentry.io/get-cli/ | bash
# 新規リリースの作成とコミットの紐付け
VERSION=$(sentry-cli releases propose-version)
sentry-cli releases new -p $VERSION
sentry-cli releases set-commits –auto $VERSION
sentry-cli releases finalize $VERSION
—
4. 精度高い動作確認:エラーを起こしてダッシュボードを覗いてみよう
セットアップが完了したら、正しく連携できているか「HelloWorld」的な動作確認をしてみましょう。
1. わざとテストのないバグ関数を作る
適当なファイル(例: `utils.ts`)に、テストを一切書かずに例外を投げるコードを書きます。
export function dangerousFunction() {
// テストが書かれていない、かつnull参照エラーが起きる例
const data: any = null;
return data.foo.bar;
}
2. エラーをSentryに送るコードを走らせる
アプリケーションからこの関数を呼び出し、Sentryにエラーイベントを飛ばします。
3. Sentryの画面を確認する
Sentryのエラー詳細ページを開いてみてください。
Codecovとのインテグレーションが正しく機能していれば、該当行のコードスニペットの横に、「Coverage: 0%」という美しい(そして恐ろしい)バッジが表示されます!
—
5. この裏技がもたらす開発の未来
この連携を導入すると、チームの会話が劇的に変わります。
- Before: 「なんか最近このへんのエラー多いよね。誰か暇なときテスト書いといて」
- After: 「Sentryの今週のエラーランキング上位3つのうち、2つがCodecovのカバレッジ0%地帯にある。スプリントの最初にこの2つのテストを書くタスクを積もう」
「勘」や「なんとなくの不安」でテストを書く時代は終わりです。データに基づき、最もクリティカルな脆弱性をピンポイントで潰していく。このアプローチを導入すれば、プロダクトの堅牢性がみるみる上がっていくのを実感できるはずです。
「これをマスターすれば、毎日の作業が劇的に楽になりますよ」。
ぜひ次の開発サイクルから取り入れて、モリモリと品質をコントロールする快感を味わってみてくださいね!