AgentSkillsCN

debugging

兼顾前端与后端的调试指南(不依赖于任何框架)。涵盖调试工作流(复现→拆解→定位原因→修复→验证)、问题拆解方法、前端调试(渲染/状态/事件/通信)、后端调试(日志分析/请求追踪/数据流)、常见错误模式以及性能调试等关键内容。适用于排查疑难杂症、解决性能问题以及分析错误场景时使用。

SKILL.md
--- frontmatter
name: debugging
description: フロントエンド・バックエンド両対応のデバッグガイド(フレームワーク非依存)。デバッグワークフロー(再現→切り分け→原因特定→修正→検証)、問題の切り分け手法、フロントエンドデバッグ(レンダリング/状態/イベント/通信)、バックエンドデバッグ(ログ解析/リクエストトレース/データフロー)、よくあるエラーパターン、パフォーマンスデバッグをカバー。原因不明のバグ調査、パフォーマンス問題、エラー解析時に使用。

デバッグガイド

フロントエンド・バックエンド両対応のフレームワーク非依存なデバッグガイド。

デバッグワークフロー

code
1. 再現      → 問題を確実に再現する条件を特定
2. 切り分け  → 問題の発生箇所を絞り込む
3. 原因特定  → 根本原因を特定する
4. 修正      → 最小限の変更で修正する
5. 検証      → 修正の確認 + 回帰テスト作成

再現のコツ

code
- 最小再現ケースを作る(関係ない要素を排除)
- 再現条件を明確化: ブラウザ、OS、データ、タイミング
- 再現率が低い場合: ログ追加 → 再発を待つ
- 「自分の環境では再現しない」→ 環境差異をリストアップ

問題の切り分け

発生箇所の特定

code
ユーザーから見える問題
├→ 画面に表示されない / 表示がおかしい
│   └→ フロントエンド問題の可能性大
├→ データが保存されない / 取得できない
│   └→ バックエンド or DB 問題の可能性大
├→ 動作が遅い
│   └→ パフォーマンス問題 → 計測で特定
└→ 特定の条件でのみ発生
    └→ エッジケース → 条件の切り分け

レイヤー別切り分け

code
フロントエンド → ネットワーク → バックエンド → DB

確認手順:
1. ブラウザの開発者ツールでネットワークを確認
   → リクエストは送信されているか?
   → レスポンスは正しいか?
2. 正しいリクエストが送信されている場合
   → バックエンドのログを確認
3. バックエンドのレスポンスが正しい場合
   → フロントエンドの描画/状態管理を確認

フロントエンドデバッグ

レンダリング問題

code
症状: 表示されない、レイアウト崩れ、更新されない

確認ポイント:
  - コンポーネントは描画されているか(DOM を確認)
  - CSS が意図通りか(計算済みスタイルを確認)
  - 条件付きレンダリングの条件は正しいか
  - キー属性は適切か(リスト描画時)

状態管理問題

code
症状: データが反映されない、古い値が表示される

確認ポイント:
  - 状態の更新は行われているか
  - 不変性は保たれているか(ミュータブルな更新をしていないか)
  - 非同期更新のタイミングは正しいか
  - 状態のスコープは適切か(ローカル vs グローバル)

イベント問題

code
症状: クリックが反応しない、二重送信、意図しない動作

確認ポイント:
  - イベントハンドラは登録されているか
  - イベントの伝播(バブリング)が問題ではないか
  - デバウンス/スロットルは適切か
  - フォーム送信のデフォルト動作は制御されているか

通信問題

code
症状: API からデータが取得できない、エラーレスポンス

確認ポイント:
  - リクエスト URL・メソッド・ヘッダーは正しいか
  - CORS エラーが出ていないか
  - 認証トークンは送信されているか
  - レスポンスのパース処理は正しいか
  - エラーハンドリングは適切か

詳細: references/frontend-debugging.md

バックエンドデバッグ

ログ解析

code
手順:
1. エラーログからスタックトレースを確認
2. リクエスト ID でログを絞り込む
3. タイムスタンプで時系列を追う
4. エラー直前の正常ログを確認(何が変わったか)

注意:
  - ログレベルが適切か確認(DEBUG に切り替え)
  - 構造化ログを活用してフィルタリング
  - 大量のログは grep/検索で効率的に

リクエストトレース

code
確認ポイント:
  - リクエストは到達しているか(アクセスログ)
  - ミドルウェアの処理順序
  - 認証/認可チェックの結果
  - ルーティングは正しいか
  - レスポンスの構築過程

データフロー

code
確認ポイント:
  - 入力データのバリデーション結果
  - データ変換(DTO → Entity)は正しいか
  - DB クエリは意図通りか(実行 SQL を確認)
  - 外部 API のレスポンスは期待通りか
  - トランザクション境界は適切か

詳細: references/backend-debugging.md

よくあるエラーパターン

一般的なエラー

エラーよくある原因対処
null/undefined 参照データ未取得、非同期タイミングOptional chaining、ガード節
型エラーAPI レスポンスの型不一致型定義の確認、バリデーション
タイムアウト遅い外部 API、DB ロックタイムアウト設定、非同期化
メモリリーク解放忘れ、無限成長するキャッシュプロファイリング、クリーンアップ
競合状態並行処理の制御不足ロック、楽観的ロック、キュー

HTTP エラー別の原因

コードよくある原因
400リクエストボディの形式不正、バリデーションエラー
401トークン期限切れ、認証ヘッダー未送信
403権限不足、CORS の preflight 失敗
404パス間違い、リソース未作成、ルーティング設定ミス
422ビジネスロジック上のバリデーションエラー
500未処理例外、DB 接続失敗、外部 API 障害
502/503サーバーダウン、デプロイ中、リソース不足

詳細: references/common-errors.md

パフォーマンスデバッグ

フロントエンド

code
確認ポイント:
  - 初期表示時間(FCP, LCP)
  - 不要な再レンダリング
  - バンドルサイズ(大きなライブラリの読み込み)
  - 画像の最適化(サイズ、フォーマット、遅延読み込み)
  - メモリリーク(長時間使用での劣化)

バックエンド

code
確認ポイント:
  - レスポンス時間の遅いエンドポイント特定
  - N+1 クエリ問題
  - インデックス未設定のクエリ
  - 不要なデータの取得(SELECT *)
  - 外部 API 呼び出しの遅延
  - コネクションプールの枯渇

計測の原則

code
1. 推測するな、計測せよ
2. ボトルネックを特定してから最適化
3. 最適化前後で必ず計測・比較
4. ユーザー体感に影響する箇所を優先

デバッグのアンチパターン

code
❌ 推測だけで修正する(計測・確認なし)
❌ 一度に多くの変更を加える(どの変更が効いたか不明)
❌ 本番環境で直接デバッグする
❌ ログを追加せずに再現を試みる
❌ 症状を修正して根本原因を放置する
❌ デバッグコードをコミットする

レビューチェックリスト

  • 問題の根本原因が特定されている
  • 修正は最小限の変更に留まっている
  • 回帰テストが追加されている
  • デバッグ用のコード(console.log 等)が残っていない
  • 同様の問題が他の箇所にないか確認した
  • エラーハンドリングが改善されている

リファレンス