14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude CodeのスキルでNew Relic CLIとBacklog MCPを組み合わせ、エラー調査と進捗管理を自動化した話

14
Last updated at Posted at 2026-06-30

はじめに

こんにちは!KIYOラーニング で AirCourse の開発をしている森下です。
今回は、Claude Code のスキルで New Relic CLI と Backlog MCP を組み合わせ、エラー調査と進捗管理を自動化した話をご紹介します。

今回は、普段から使い慣れている New Relic CLI を利用しました。MCP を利用する方法も考えられますが、本記事では CLI ベースの構成で紹介します。

普段のエラー監視では「これバグ?」「もう起票した?」「対応中?」「直したのにまた出てる(再発)?」を1件ずつ確認していて、これが地味に大変でした。そこで、調査レポートの作成と進捗ダッシュボードの更新をまとめて行うスキルを自作しました。この記事では、その中身・仕組み・作り方までを一通り解説します。

Claude Code の「スキル(Skill)」は、AI に業務の手順を覚えさせて再利用できる仕組みです。今回はこれで一連のエラー対応を自動化しました。

【目次】

良かったら最後まで見てください!

こんな人におすすめ

  • New Relic でエラー監視はしているが、対応状況(対応中/完了/再発)の管理が大変な方
  • New Relic と Backlog のように、監視ツールと課題管理ツールの突き合わせを手作業でやっている方
  • Claude Code のスキルで自分の業務を自動化してみたい方

このスキルが作る2つの成果物

ac-error-triage を実行すると、次の2つが自動で作られます。

  1. モニタリング調査レポート(Markdown) … その時点のエラーを appName ごとにトリアージした調査レポート
  2. 進捗ダッシュボード(HTML) … エラーが Backlog で対応済みか・再発していないかを一覧で確認できる進捗ダッシュボード

スキルでできること

  • 対象アプリ・対象期間を対話で確認(期間は「昨日10:00〜現在 / 直近1週間 / 直近2週間 / 直近1カ月」から選択)
  • 5つの観点(PHP例外・JSエラー・4xx・5xx・DB負荷)を appName ごとに横断集計
  • 先週比などで急増(🚨)を検知
  • 外部要因やクライアント環境起因など、想定内のノイズと実バグ候補を仕分け
  • 実バグ候補が Backlog に起票済みかを検索し、状態・リリース予定日・進捗段階を確認
  • 継続的なエラー管理のための台帳更新
  • 状態(対応中/完了/再発/リリース待ち/未起票/沈静化)を判定して HTML ダッシュボードを再生成

なぜ作ったか(背景)

Web サービスを運用していると、New Relic にはいろんなエラーが流れてきます。私たちのチームの運用フローはこうです。

[New Relic でエラー確認] → [ソースコード調査で原因確認] → [バグなら Backlog にチケット起票] → [対応して直す]

シンプルなのですが、エラー1件1件に対して毎回こんな確認を手作業で繰り返すことになり、これが地味に面倒です。

  1. そもそもこれはバグなのか?(外部要因や想定内のアクセスによるノイズではないか)
  2. バグだとして、もう Backlog に起票済みか?
  3. 起票済みなら、今は対応中か、もう完了か?
  4. 完了なら、再発なのでは?
  5. それとも件数が少ないし様子見でいいやつ?

しかも、この確認をアプリ(appName)ごと・エラーの種類ごとに繰り返す必要があり、正直しんどいです。
さらに New Relic と Backlog という2つの別々の画面を行き来して突き合わせる手間もかかります。

この「1件ずつの確認」と「2画面の突き合わせ」を毎回手作業でやるのをやめたい。それが ac-error-triage を作った理由です。

前提ツール

それぞれ多機能なツールですが、ここではこの記事での役割に絞って紹介します。各ツールが本来できることはもっと広いので、詳細は公式ドキュメントを参照してください。

ツール この記事での役割
New Relic アプリのエラーやパフォーマンスを監視するサービス。本記事では「今どんなエラーが出ているか」の情報源として使います。
New Relic CLI New Relic をコマンドラインから操作する公式ツール。本記事では NRQL でエラーを集計・取得する用途だけに使っています。(ダッシュボード操作やデプロイ記録など、他にもできることは多数あります)
Backlog 課題管理ツール。本記事では「そのエラーが起票済みか・対応中か完了か」の情報源として使います。
MCP AI が外部ツールとつながるための共通規格。本記事では Claude が Backlog を読むための接続に使っています。
Claude Code ターミナルで動く AI アシスタント。本記事では一連の調査を実行する役割で使います。
スキル(Skill) Claude Code に手順を覚えさせる仕組み。今回は「調査&進捗管理」の手順を覚えさせるのに利用しています。

New Relic からデータを取り出すときは、NRQL という SQL に似た言語を使います(例:「過去1週間のエラーを集計して」)。スキルが裏で組み立ててくれるので、使う側が書く必要はありません。

成果物① モニタリング調査レポート

appName ごとに「5つの観点(PHP例外・JSエラー・4xx・5xx・DB負荷)+先週比」のサマリーを出し、そのあとに実バグ候補を1件ずつ掘り下げ、最後にノイズ集計と推奨アクションを並べます。実際にサンプル用に出力されたレポートから一部を抜粋します。

総評(冒頭に全体所感)

全体的に許容範囲で、新規の重大事象なし。前週に目立っていた事象はいずれも大幅に減少。新規の急増🚨は一部アプリの 4xx のみで、主因は想定内のアクセス制御によるもの。ユーザーへの実害は限定的。

以下のサマリーは記事用に内容を抽象化したサンプルです。実際の数値や原因とは無関係です。

アプリ別サマリー(抜粋)

「先週比」は前週の同じ期間との比較です(1.0 を超えると増加、🚨 は目立った急増)。

■ app-name-01(アプリA)
- PHP例外 : 9件(先週比 2.25倍)— 軽微な警告が中心で低頻度
- JSエラー : 78,462件(先週比 1.07倍)— ほぼ横ばい。大半はクライアント環境起因の可能性が高いもの
- 4xx     : 13,243件(先週比 1.53倍 🚨 急増)— 主因は想定内のアクセス制御によるもの
- 5xx     : 12件(先週比 1.09倍)— 一部操作で散発する軽微なもの
- DB負荷  : 問題なし

■ app-name-02(アプリB)
- PHP例外 : 20件(先週比 0.09倍)— 前週から大幅に減少
- 5xx     : 23件(先週比 0.10倍)— 前週から大幅に減少
- DB負荷  : ⚠ 一部の処理が重め(応答に時間がかかるものがある)

実バグ候補(1件ずつ掘り下げ・抜粋)

4. 管理画面の一部で軽微な警告(app-name-03 / 12件)
- バグらしさ : 中(画面は動く(HTTP200)が、警告が出続けてログのノイズ源になっている)
- 発生箇所  : 管理ツールの一部画面
- 概要     : 外部連携先の仕様変更で参照していたデータの一部が取得できなくなり、
             画面側がそれを参照し続けているため警告が出ている
- Backlog  : 既に起票済み(PROJ-XXXX・処理中/リリース前のレビュー段階)。
             新規対応は不要で、状態のフォローだけでよい

このように「件数」「先週比」「発生箇所」「見立て」「Backlog の起票有無と状態」までを1件ずつ揃えてくれるので、人間は「で、どうする?」の判断に集中できます。

成果物② 進捗ダッシュボード

レポートが「その時点の調査結果をまとめた文書」なら、ダッシュボードは「エラーの現在の状態を一覧で把握するための画面」です。完成イメージは次のとおりで、状態ごとに色分けされ、絞り込みや並べ替えもできます。

以下の進捗ダッシュボードは記事用に作成したサンプルです。実際の数値や原因とは無関係です。

screencapture-file-wsl-localhost-Ubuntu-home-mmorishita-claude-plugins-qiita-demo-dashboard-html-2026-06-24-16_25_46.png

  • 状態の色バッジ(🔴 再発/🟠 リリース待ち/🟡 対応中/⚪ 未起票/🟢 完了/⚫ 沈静化)で状態が分かる
  • 状態・アプリでの絞り込みと、列のソートができる
  • 各エラーの Backlog チケット・初検知/最終検知・件数(合計+検知日ごとの内訳)を1行で表示

再発や対応中など「今どれを見るべきか」をすぐ拾えるようにしてあります。

このスキルの一番のポイント:対応状況の可視化と再発検知

この記事で一番伝えたいのはここです。New Relic は「今エラーが出ている」ことは分かりますが、それが未対応なのか・対応中なのか・もう直したのかまでは教えてくれません。このスキルは検知したエラーを Backlog のチケットと突き合わせ、各エラーの「今の状況」を一覧で把握できるようにします。状況が分かって初めて「次に何をすべきか」を判断できるようになります。

そして状況が分かると、一歩進んで「直したはずなのにまた出ている=再発」も見分けられます。ここで大事なのは「完了=直った」と単純に決めつけないことです。たとえば Backlog のチケットが「完了」でも、まだ本番にリリースされていないことがあります。その場合はエラーが出続けるのが当たり前で、再発ではありません。そこで二段構えで判定しています。

  • 「本番に反映済みか」を、Backlog のリリース予定日(無ければマイルストーンの段階。例:本番リリース承認本番モニタリング中)で判定
  • そのうえで「本番反映後もまだ出ているか」を New Relic の発生状況で確認

判定表はこうです。

今出ている? チケット 本番反映 → 状態
出ている 完了 済み 🔴 再発(修正後も再び発生)
出ている 完了 まだ 🟠 リリース待ち(出て当然。再発ではない)
出ている 処理中/未対応 🟡 対応中
出ている 無し ⚪ 未起票
出ていない 完了 済み 🟢 完了
出ていない(しばらく) 無し ⚫ 沈静化

「完了にしたはずのエラーが、本番に出てからもまだ発生している」を 🔴 で目立たせることで、「直したと思っていたバグの再発」を逃さずに済みます。

仕組み:New Relic と Backlog をどうつないでいるか

New Relic は「今出ているエラー」、Backlog は「その対応状況」と、見たい情報が2つのツールに分かれています。この2つを突き合わせるのが、このスキルの肝でした。

  1. New Relic CLI で「今どんなエラーが出ているか」を取得(NRQL で集計・トリアージ)
  2. Backlog MCP で「そのエラーは対応済みか」を取得(チケットの状態・リリース予定日・マイルストーン)
  3. ローカル台帳(registry.json で「昨日のあのエラー」と「今日のこのエラー」を同じものだと同定し続ける
① New Relic CLI で集計・トリアージ
        ↓
② Backlog MCP でチケットの状態・リリース予定日を取得
        ↓
③ 台帳(registry.json)と突き合わせて同一エラーを同定・更新
        ↓
④ 状態(対応中/完了/再発/リリース待ち…)を判定
        ↓
⑤ Markdownレポート + HTML進捗ダッシュボードを出力

台帳があることで、調査が「その場限り」ではなく「時系列で追い続けられる」ようになり、再発検知が可能になります。

作り方とセットアップ

スキル本体は skill-creator で作成

このスキルは、Anthropic 公式の skill-creator を使って作りました。スキルの雛形作り・テスト・改善のループを助けてくれるスキルです。

ref: anthropics/skill-creator

skill-creator 自体の使い方は本記事では深入りしません。別記事や公式ドキュメントを参照してください。ここでは「これを使うとスキル作りが一気に楽になる」とだけ紹介します。

設定手順①:New Relic CLI(コマンドで導入)

New Relic CLI をインストールし、プロファイル(API キー・アカウントID)を登録します。

# インストール(公式:OS ごとのパッケージマネージャ)
# macOS
brew install newrelic-cli
# Linux
sudo snap install newrelic-cli
# Windows
scoop bucket add newrelic-cli https://github.com/newrelic/newrelic-cli.git
scoop install newrelic-cli

# プロファイル登録(API キー・リージョンは必須。値は自分のものに置き換え)
newrelic profile add \
  --profile   aircourse \
  --region    us \
  --apiKey    <YOUR_USER_API_KEY> \
  --accountId <YOUR_ACCOUNT_ID>

# 動作確認(1時間のトランザクション件数)
newrelic nrql query --accountId <YOUR_ACCOUNT_ID> \
  --query "SELECT count(*) FROM Transaction SINCE 1 hour ago"

インストール手順は公式チュートリアルが最新です。プロファイルは API キーとリージョン(us または eu)が必須です。

設定手順②:Backlog MCP(.mcp.json に貼るだけ)

プロジェクト直下の .mcp.json に次を追記するだけです。
※今回はDocker で行ってます。

{
  "mcpServers": {
    "backlog": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "BACKLOG_DOMAIN=<your-space>.backlog.com",
        "-e", "BACKLOG_API_KEY=<YOUR_BACKLOG_API_KEY>",
        "ghcr.io/nulab/backlog-mcp-server"
      ],
      "env": {}
    }
  }
}

BACKLOG_DOMAIN は自分のスペース(例:xxxx.backlog.com)、BACKLOG_API_KEY は Backlog の「個人設定 → API」で発行したキーに置き換えてください。

API キーは秘密情報です。.mcp.json を Git にコミットする運用なら、キーは環境変数や .gitignore 対象ファイルに分離するのが安全です。

ファイル構成

スキルは1つのディレクトリにまとまっています。

ac-error-triage/
├── .claude-plugin/
│   └── plugin.json              # プラグインのメタ情報
├── README.md
└── skills/
    └── ac-error-triage/
        ├── SKILL.md             # スキル本体(手順書)
        ├── references/
        │   ├── nrql-catalog.md      # 観点別の NRQL クエリ集
        │   ├── known-noise.md       # 既知ノイズの参考リスト
        │   └── registry-schema.md   # 台帳スキーマ・状態ステートマシン
        └── scripts/
            ├── nrql.sh              # New Relic CLI 呼び出しヘルパー
            └── render_dashboard.py  # registry.json → dashboard.html

ポイントは、

  • SKILL.md に「何を・どの順で調べ、どう判定するか」を書く(手順書)
  • 細かい知識は references/ に分離(NRQLの定型、ノイズの見分け方、台帳の状態遷移ルール)
  • 機械的な処理は scripts/ に切り出す(HTML 生成は Python に任せ、判断は Claude が担う)

という役割分担です。判断は AI に、定型処理はスクリプトに任せる、というのが作ってみて分かったポイントでした。

SKILL.md の中身(抜粋)

スキルの“手順書”である SKILL.md は、先頭に「いつ・何のために使うか」を書く frontmatter があり、本文にワークフローを番号付きで並べるだけです。実物を一部抜粋します(社内固有の値は伏せています)。

---
name: ac-error-triage
description: |
  New Relic CLI で対象アプリ・対象期間のエラーを横断的に調査する。
  PHP例外・JSエラー・4xx/5xxレート・DB負荷 を appName 別に集計し、前日比/先週比で異常を検知。
  ノイズと実バグを仕分け、実バグ候補は Backlog に起票済みかを確認する。
  集計結果やノイズ集計表をまとめた「調査レポート(Markdown)」を出力し、
  さらに実行をまたいだ台帳で状態(対応中/完了/再発)を管理して「進捗ダッシュボード(HTML)」を更新する。
when_to_use: |
  「New Relicのエラーを調べて」「このエラーは対応中?」「完了したのに再発してない?」
  「進捗ダッシュボードを更新して」など、調査・トリアージ・進捗管理を頼まれたら使う。
allowed-tools: Bash(newrelic:*), Bash(python3:*), …, mcp__backlog__get_issues, mcp__backlog__get_issue
---

本文のワークフローはチェックリスト形式。Claude はこの順に進めます。

- [ ] ステップ1:期間 → 対象アプリ(appName)を対話で確定
- [ ] ステップ2:アプリ別に5観点を集計(PHP例外/JSエラー/4xx/5xx/DB負荷)
- [ ] ステップ3:前日比・先週比を算出し急増を検知
- [ ] ステップ4:ノイズ/想定内を仕分け、実バグ候補を深掘り
- [ ] ステップ5:Backlog で既起票確認+台帳の既存チケットの状態を取得
- [ ] ステップ6:調査レポートを出力して保存
- [ ] ステップ7:追跡台帳 registry.json をマージ更新(状態・再発を導出)
- [ ] ステップ8:進捗ダッシュボード dashboard.html を再生成

このように「やることを日本語の手順で書く」だけでスキルになります。細かい判断基準(NRQL の定型、ノイズの見分け方、状態遷移ルール)は references/ に逃がし、SKILL.md 本体は読みやすさを保つようにしています。

使い方

スキルとして登録してあるので、Claude Code でスラッシュコマンドを打つだけです。

/ac-error-triage

起動すると、まず調査期間(昨日10:00〜現在/直近1週間/直近2週間/直近1カ月)、次に対象アプリ(appName)を順に聞かれるので、選ぶだけです。あとは調査 → Backlog 突き合わせ → 台帳更新 → レポートと進捗ダッシュボード生成まで進めてくれます。最後にブラウザで開けるリンクも出ます。

もちろん、最初から条件を添えて自然文で頼んでもOKです(その場合は対話の確認が省略されます)。

/ac-error-triage aircourse-app-name-01 の直近1週間のエラーを調べて、進捗ダッシュボードも更新して

まとめ

  • New Relic と Backlog を連携し、「現在発生しているエラー」と「対応状況」を突き合わせられるようにした
  • 本番リリース後も同じエラーが発生しているかを検知し、再発しているものを 🔴 で可視化した
  • Claude Code のスキルで、調査・突き合わせ・調査レポート/進捗ダッシュボード生成までをまとめて自動化した

これまで1件ずつ手作業で行っていたエラー調査と対応状況の確認を、短時間で完了できるようになりました。

本記事が、New Relic や Backlog、Claude Code のスキルを使って、自分のチーム向けのエラー管理フローを作る際の参考になればうれしいです。

最後に

最後まで読んでくださり、ありがとうございました。
少しでもお力になれれば幸いです。
よろしければ、いいね・ストックの方もお願いします。

KIYOラーニング株式会社について

当社のビジョンは『世界一「学びやすく、分かりやすく、続けやすい」学習手段を提供する』ことです。革新的な教育サービスを作り成長させていく事で、オンライン教育分野でナンバーワンの存在となり、世界に展開していくことを目指しています。

プロダクト

  • スタディング:「学びやすく・わかりやすく・続けやすい」オンライン資格対策講座
  • スタディングキャリア:資格取得者の仕事探しやキャリア形成を支援する転職サービス
  • AirCourse:受け放題の動画研修がついたeラーニングシステム(LMS)

KIYOラーニング株式会社では一緒に働く仲間を募集しています

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?