AgentSkillsCN

debug

调试技能。当出现错误,或收到关于意外行为的报告时,本技能都能自动触发。它能帮助您系统性地定位问题根源,并提供有效的修复方案。

SKILL.md
--- frontmatter
name: debug
description: デバッグスキル。エラー発生時、予期しない動作の報告時に自動発動。体系的な原因特定と修正を支援。

デバッグスキル

問題を調査し、原因を特定して修正するスキル。

When to Use(自動発動条件)

以下の状況で自動発動:

  • エラーが発生した時
  • 予期しない動作が報告された時
  • 「デバッグ」「バグ」「エラー」「動かない」「おかしい」キーワード

デバッグワークフロー

Phase 1: 問題の理解

  1. エラーメッセージを確認

    • 完全なスタックトレースを取得
    • エラーの種類を特定(型エラー、ランタイムエラー、ネットワークエラー等)
  2. 再現手順を把握

    • いつ発生するか
    • どの操作で発生するか
    • 常に発生するか、時々か
  3. 期待される動作を確認

    • 本来どうなるべきか

Phase 2: 原因の調査

bash
# 1. 関連コードを検索
grep -r "エラーメッセージの一部" src/

# 2. 最近の変更を確認
git log --oneline -20
git diff HEAD~5

# 3. 該当ファイルの変更履歴
git log -p path/to/file.ts

Phase 3: 仮説の検証

  1. 最も可能性の高い原因から検証
  2. console.log / デバッガで確認
  3. 単体テストで動作確認
  4. 段階的に原因を絞り込み

Phase 4: 修正と検証

bash
# 最小限の修正で対応
# 型チェック実行
npm run typecheck

# 既存テストが通ることを確認
npm run test

Think ツール活用

問題の複雑さに応じて使い分け:

複雑さコマンド使用場面
簡単think明らかなバグ、タイポ
中程度think hardロジックエラー、状態管理の問題
複雑ultrathinkアーキテクチャに関わる問題、競合状態

Dayopt固有のデバッグパターン

tRPCエラー

typescript
// よくある原因
// 1. 認証エラー(protectedProcedureで未ログイン)
// 2. Zodバリデーションエラー(入力形式)
// 3. Supabaseエラー(DB制約違反)

// デバッグ方法
// サーバーログを確認
console.error('[tRPC Error]', error);

// クライアントでエラー詳細を確認
const { error } = api.myRouter.myEndpoint.useQuery();
console.log(error?.message, error?.data);

Zustand状態の問題

typescript
// DevToolsで状態を確認
// ブラウザのRedux DevToolsで "zustand" を選択

// ログで状態変化を追跡
const useMyStore = create<MyState>()(
  devtools(
    (set) => ({
      // ...
    }),
    { name: 'MyStore' },
  ),
);

カレンダードラッグの問題

typescript
// 参照: .claude/sessions/learned/drag-*.md
// よくある問題:
// 1. イベント伝播(stopPropagation漏れ)
// 2. 座標計算(getBoundingClientRect)
// 3. 状態の競合(useCalendarDragStore)

Supabaseエラー

typescript
// よくあるエラーコード
// PGRST116: 行が見つからない
// 23505: 一意制約違反
// 42501: 権限エラー(RLS)

// RLSポリシーの確認
// supabase/migrations/ 内のポリシーを確認

hydrationエラー

typescript
// よくある原因
// 1. サーバーとクライアントで異なる値(Date.now()等)
// 2. localStorage/sessionStorageの参照
// 3. window/documentの直接参照

// 対処法
// 1. useEffect内で副作用を実行
// 2. dynamic importでSSRを無効化
// 3. suppressHydrationWarning(最終手段)

学習パターンの活用

bash
# 過去の解決パターンを確認
ls .claude/sessions/learned/

# 関連パターンを読み込み
# - zustand-*.md: Zustand関連
# - trpc-*.md: tRPC関連
# - calendar-*.md: カレンダー関連
# - drag-*.md: ドラッグ関連
# - typescript-*.md: 型エラー

よくあるエラーと対処法

エラー原因対処
Type 'X' is not assignable to type 'Y'型の不一致型定義を確認、as / satisfies を検討
Cannot read properties of undefinednull/undefined参照Optional chainingを使用
Hydration failedSSR/CSR不一致useEffectに移動、dynamic import
TRPCClientErrorAPI呼び出し失敗サーバーログ確認、入力値確認
RLS violationSupabase権限ポリシー確認、userId確認

出力形式

markdown
## デバッグ結果

### 問題の概要

[問題の説明]

### 再現手順

1. [手順1]
2. [手順2]

### 原因

[根本原因の説明]

### 修正内容

- `path/to/file.ts:42` - [修正内容]

### 確認方法

[動作確認の手順]

### 学習パターン

[今回学んだパターン(/learn-patternで保存を検討)]

チェックリスト

デバッグ前:

  • エラーメッセージを完全に把握したか
  • 再現手順を確認したか

デバッグ中:

  • 最も可能性の高い原因から検証しているか
  • 変更は最小限か

デバッグ後:

  • npm run typecheck が通るか
  • npm run test が通るか
  • 同様の問題が再発しない対策を考えたか

関連スキル

  • /learn-pattern - 解決パターンの保存
  • /test - 回帰テストの作成
  • /fix-types - 型エラー修正(コマンド)