【入門編】Sentryの「Ownership Rules(CODEOWNERS連携)」でエラー通知を自動ルーティングする実務テクニック – 運用監視・オブザーバビリティ活用バイブル

こんにちは!チームの拡大とともに「誰の担当かわからないエラー通知」がSlackに流れ続け、誰もメンションに反応しなくなっていく……そんなカオスな状況に頭を抱えていませんか?

「また俺のエラーかよ」「いや、これ隣のチームの領域じゃん」——。
そんな不毛な押し付け合いを終わらせ、「エラーが起きた瞬間、コードを書いた本人のSlackに直接・正確に通知を飛ばす」ための究極の仕組みが、Sentryの Ownership Rules(CODEOWNERS連携) です。

今回は、初心者の方でも今日から迷わず導入できるように、ツールの役割から実際のセットアップ、そして実務で即座に使える高度なルーティング設定まで、優しく丁寧に解説していきます。これをマスターすれば、あなたのチームの障害対応スピードは劇的に変わり、毎日のアラートチェックが驚くほど楽になりますよ!

—

1. なぜ「Ownership Rules」が必要なのか?(ツールの役割)

Sentryは単なるエラーログ収集ツールではありません。モダンな開発において、Sentryは「アプリケーションの健康状態を、責任を持つべき開発者にダイレクトに繋ぐルーター」であるべきです。

開発チーム拡大の罠

小さなチームの間は、「全員が全コードを把握している」状態なので、Sentryの共通チャンネルにエラーが流れても「あ、これ俺直すわ」と阿吽の呼吸で解決できました。
しかし、チームが5人から20人、50人と拡大し、モノリスからマイクロサービス、あるいは巨大なモノレポ(Monorepo)へ移行するとどうなるでしょう?

  • 共通チャンネルに1日数百件のエラーが流れる。
  • 「決済モジュール」のエラーなのか、「認証機能」のエラーなのか、タイトルを見ないと分からない。
  • 結局、誰もメンションされないエラーは放置され、ユーザーからの問い合わせで発覚する。

CODEOWNERSとの融合による解決

ここで登場するのが、GitHubなどのバージョン管理システムが持つ `CODEOWNERS` ファイルとSentryの連携機能です。
「このディレクトリのコードを書いた人はこの人(またはチーム)」というコードの所有権定義を、そのままSentryのエラー通知のルーティングルールとして流用するのです。これにより、人間が手動でアサインルールを設定・メンテする手間から完全に解放されます。

—

2. GitHubのCODEOWNERSとSentryを連携させる手順

それでは、実際に手を動かして連携の設定をしていきましょう。
ステップは大きく分けて3つです。

Step 1: SentryとGitHubの連携(Integrations)

まず、SentryのプロジェクトとGitHubリポジトリを連携させます。
1. Sentryのダッシュボード右上の「Settings」 > 「Integrations」を開く。
2. 「GitHub」を見つけて「Install」または「Configure」をクリック。
3. 対象の組織(Organization)やリポジトリへのアクセスを許可します。

Step 2: リポジトリ側に `CODEOWNERS` ファイルを配置する

GitHubの仕様に基づき、リポジトリの `.github/` ディレクトリ(またはルート)に `CODEOWNERS` ファイルを作成します。これがそのままSentryのルーティングの基礎データになります。

.github/CODEOWNERS
担当者やチームのGitHubハンドルを指定します

リポジトリ全体はコアインフラチームが担当

  • @neko-infra-team

認証・ユーザー管理周りはセキュリティチーム
/src/features/auth/ @security-lead @auth-devs

決済・課金周りはフィナンシャルチーム
/src/features/billing/ @finance-backend-team

Step 3: Sentry側でOwnership Rulesを有効化する

Sentryがリポジトリの `CODEOWNERS` を読み込めるように設定します。
1. Sentryのプロジェクト設定から 「Issues」 > 「Ownership」 を開きます。
2. 「Rules」タブにおいて、ルールソースとして 「Code Owners」 を選択します。
3. 連携したGitHubのリポジトリと、参照するブランチ(例: `main`)を指定します。

たったこれだけで、Sentryはコードの変更と所有者の紐付けを自動的に理解し始めます!

—

3. モジュールごとに担当エンジニアへ直接Slack通知を飛ばす高度な設定法

「CODEOWNERS連携はできたけれど、Slackの通知が相変わらず全体チャンネルに飛んでしまう……」
ここからが本番です。SlackインテグレーションとOwnership Rulesを組み合わせ、「担当者のDM、またはチーム専用チャンネルへダイレクトに飛ばす」高度な設定を行っていきましょう。

SlackとSentryのユーザーマッピング

まず大前提として、Sentryのユーザーアカウントと、Slackのアカウントが正しく紐付いている必要があります。

  • Sentryの「Settings」 > 「Members」から、各メンバーが自身のSlackアカウントと連携していることを確認してもらいましょう。これをしておかないと、せっかくアサインされてもSlackでメンション(`@username`)が飛びません。

Ownership Rulesの高度な記述法

Sentryの「Ownership」画面では、GitHubのCODEOWNERSをインポートするだけでなく、Sentry独自のルール(Ownership Rules)を直接記述することも可能です。これにより、よりきめ細やかなルーティングが可能になります。

実際に現場で最も重宝する、実用的な設定例を見てみましょう。

— 1. 深刻なインフラ・DBエラーは専用アラートチャンネルへ —
パスやエラーメッセージに含まれるキーワードでルーティングを上書き
url:/api/v1/checkout/ error:TimeoutException -> #alert-critical @infra-team

— 2. フロントエンド(React)のクラッシュはUIチームへ —
ファイルパスを指して直接アサイン
path:src/components/ui/ -> @taro-frontend #channel-frontend-alerts

— 3. バックエンドのドメインロジックエラーはコードオーナー(CODEOWNERS自動連携)に委譲 —
CODEOWNERSファイルに定義された所有者をそのまま適用するキーワード
(これが最もメンテナンスコストが低い黄金律です)
codeowners:@github

— 4. 上記のいずれにもヒットしないフォールバック(デフォルト) —
迷子になったエラーは、開発部全体のトリアージ用チャンネルへ

  • -> #dev-triage-room

この設定ファイルをSentryのダッシュボード上のエディタに貼り付けて保存するだけで、エラーの宛先ルーティングが見事に機能し始めます。

—

先輩エンジニアからの実務アドバイス:運用を軌道に乗せるコツ

この仕組みを導入した直後によくある「落とし穴」と、その対策をシェアしておきますね。

1. 最初は必ず「緩めのフォールバック」から始める
いきなり厳密にルーティングしようとすると、設定ミスで「どこにも通知されないエラー」が生まれてしまいます。最初は最後の行に ` -> #all-errors` のようなキャッチオール(受け皿)を残し、徐々にルールを洗練させていきましょう。
2. CODEOWNERSは組織変更に合わせて更新する
チーム替えやメンバーの異動があった際、GitHubの `CODEOWNERS` が古いまま放置されると、前任者に夜中アラートが飛び続けるという悲劇が起きます。「チームのメンバー変更=CODEOWNERSのPRを出す」をチームのルールとして定着させましょう。

まとめ

いかがでしたか?
SentryのOwnership RulesとCODEOWNERS連携をマスターすれば、「誰がこのエラーを見るべきか」というチーム内の無駄なコミュニケーションコストがゼロになり、開発者は「自分が書いたコードの品質」に集中できるようになります。

これを設定したその日から、あなたのSlackの通知は「ノイズの海」から「信頼できるシグナル」へと生まれ変わります。ぜひ、次のスプリントの合間に試してみてくださいね。あなたの運用ライフが快適になることを、心から応援しています!

タイトルとURLをコピーしました