본문으로 건너뛰기
cccskills
무료GitHub에 공개

bugfix-protocol

体系的な 6 段階デバッグプロトコル。クイックチェック、孤立テスト、20分ルール、バグレポートテンプレートを備えた構造化アプローチ。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md10.9 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

<img src="../banner.png" width="100%" alt="bugfix-protocol banner">

日本語 — bugfix-protocol の公式日本語版。

Bugfix Protocol: 体系的な 6 段階デバッグ

症状の分析から検証まで — バグに対する構造化されたアプローチ。 目的のない手探りの修正を防ぎ、持続可能な修正を保証します。


概要と目的

フェーズ名称目的最大時間
1クイックチェック明白な原因を排除2分
2診断根本原因を特定10分
3孤立テストバグを再現可能にする5分
4修正最小限の修正10分
5検証修正の検証 + 副作用の確認5分
6ドキュメント化知識を保存2分

20分ルール: 20分経っても進展がない場合は、アプローチを変更するか助けを求めてください。


フェーズ 1: クイックチェック (2分)

深掘りする前に — 最も一般的な原因を確認します:

チェックリスト

  • 文法エラー? エラーメッセージを注意深く読み、行を確認
  • インポートエラー? モジュールはインストールされているか?名前は正しいか?循環インポートはないか?
  • タイポ? 変数名/関数名は正しいか?
  • 型エラー? int の代わりに string?オブジェクトが期待される場所に None?
  • キャッシュの古化? __pycache__ を削除して再起動
  • 環境の違い? 正しい venv が有効化されているか?正しい Python バージョンか?
  • エンコーディング? UTF-8 vs. cp1252 (Windows クラシック)

クイックアクション

# キャッシュのクリア
find . -name "__pycache__" -type d -exec rm -rf {} + 2>&1
find . -name "*.pyc" -delete 2>&1

# インポートの確認
python -c "import modulename"

# 構文の確認
python -m py_compile file.py

フェーズ 2: 診断 (10分)

戦略: Outside-In (外から内へ)

  1. エラーメッセージの分析 — スタックトレース (traceback) を下から上へ読む
  2. 最近の変更の確認 — git diff, git log --oneline -10
  3. 診断ツールの利用 — プロジェクト固有の診断ツールを使用

診断ツール (例)

プロジェクトに応じて、専用の診断スクリプトが役立つ場合があります:

ツール目的
import_diagnose.pyインポート問題の分析
method_analyzer.pyメソッドシグネチャの確認
env_checker.py内部環境変数/パスの検証

注: プロジェクト固有の診断ツールを作成するか、既存のものを使用してください。 重要なのは体系的なアプローチであり、特定のツールではありません。

デバッグ手法

# 1. Print デバッグ (シンプルだが効果的)
print(f"DEBUG: variable={variable!r}, type={type(variable)}")

# 2. ブレークポイント (対話型)
breakpoint()  # Python 3.7+

# 3. 拡張トレースバック
import traceback
traceback.print_exc()

# 4. Print の代わりにロギングを使用
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug(f"State: {state!r}")

フェーズ 3: 孤立テスト (5分)

最小再現例 (MRE)

目標: 最小限のコードでバグを再現する。

# test_bug.py — 最小再現テスト
"""
Bug: [簡潔な説明]
Expected: [期待される動作]
Actual: [実際の動作]
"""

# 最小限のセットアップ
# ... 必須要素のみ

# バグトリガー
# ... バグを引き起こす正確なコード

# 期待される結果
# assert result == expected, f"Got {result}"

孤立化戦略

  1. 新しいファイル: 独立したファイルでバグを再現
  2. 依存関係の削除: バグが消えるまで、一つずつ削除
  3. 二分探索: コードブロックを半分にし、どちらの半分にバグが含まれているか確認
  4. Git bisect: git bisect start, git bisect bad, git bisect good <commit>

フェーズ 4: 修正 (10分)

原則

  1. 最小限: 変更は可能な限り少なく
  2. 理解: 決して盲目的に修正しない — なぜ壊れているのかを理解する
  3. 単一のタスク: 1 コミットにつき 1 つの修正。複数の問題を一度に修正しない
  4. 后方互換性: 既存の機能を壊さない

修正パターン

# 悪い例: 症状のみの処理
try:
    result = broken_function()
except:  # すべてを無視
    result = default_value

# 良い例: 根本原因の修正
def broken_function():
    if input_data is None:  # 実際の原因: None チェックの欠落
        return default_value
    return process(input_data)

一般的な修正カテゴリ

カテゴリ典型的な修正
None/Nullガード節: if x is None: return default
インデックスエラー境界チェック: if i < len(lst)
型エラー明示的な変換: str(x), int(x)
インポートエラーパスの修正、パッケージのインストール
エンコーディングUTF-8 を明示的に指定: encoding='utf-8'
競合状態ロック/ミューテックス、または順序の変更
状態バグ初期化の確認、リセットの追加

フェーズ 5: 検証 (5分)

チェックリスト

  • バグが修正された: 元の問題が発生しなくなった
  • MRE がパスする: 孤立テストが最後まで実行される
  • 回帰なし: 既存のテストが引き続きパスする
  • エッジケース: 空の入力、None、大容量データがテストされている
  • プロジェクトツール: プロジェクトのツールディレクトリで関連するテスト/検証ツールを確認

テストコマンド

# ユニットテスト
python -m pytest tests/ -v

# 影響を受けるテストのみ
python -m pytest tests/test_module.py -v -k "test_name"

# 型チェック
python -m mypy file.py

# リント
python -m flake8 file.py

フェーズ 6: ドキュメント化 (2分)

バグレポートテンプレート

## Bug Report: [簡潔なタイトル]

**Date:** YYYY-MM-DD
**Severity:** critical / high / medium / low
**Component:** [モジュール/ファイル]

### Symptom
[ユーザーが見る現象 / エラーメッセージ]

### Root Cause
[技術的な根本原因]

### Fix
[変更内容 + 理由]

### Affected Files
- `file1.py` — [変更点]
- `file2.py` — [変更点]

### Prevention
[今後、この種のバグを防ぐにはどうすればよいか?]

コミットメッセージフォーマット

fix: [修正の簡潔な説明]

Cause: [一言で言えば根本原因]
Fix: [変更された内容]
Test: [検証方法]

PyQt6 / GUI デバッグ — よくある落とし穴

このセクションは PyQt6/PySide6 を使用したデスクトップ GUI プロジェクトに関連します。

PyQt6 の 5 大トラップ

トラップ問題解決策
Signal-Slot 切断シグナルが接続されているがハンドラーが実行されないハンドラー内で print、シグネチャの確認
スレッドセーフワーカースレッドからの GUI 更新QMetaObject.invokeMethod またはシグナルを使用
レイアウトの崩れウィジェットが非表示/配置ミスwidget.show()、レイアウト階層の確認
イベントループのブロックGUI がフリーズする長時間の操作を QThread に移動
ガベージコレクションウィジェットが突然消失する参照を self.widget として保持

PyQt6 デバッグヘルパー

# ウィジェット階層のダンプ
def dump_widget_tree(widget, indent=0):
    print(" " * indent + f"{widget.__class__.__name__}: {widget.objectName()}")
    for child in widget.findChildren(QWidget):
        if child.parent() == widget:
            dump_widget_tree(child, indent + 2)

# シグナルのデバッグ
from PyQt6.QtCore import QObject
original_connect = QObject.connect
def debug_connect(self, *args, **kwargs):
    print(f"CONNECT: {self.__class__.__name__} -> {args}")
    return original_connect(self, *args, **kwargs)

クイックリファレンス

バグ発見?
     |
     v
[フェーズ 1: クイックチェック]  ── 明白? -> 修正
     |
     v
[フェーズ 2: 診断]  ────────────── 原因明確? -> フェーズ 4
     |
     v
[フェーズ 3: 孤立テスト]  ──────── 再現可能? -> フェーズ 4
     |                                  |
     |                             再現不可?
     |                                  |
     |                             ログを追加し、
     |                             再発を待つ
     v
[フェーズ 4: 修正]  ─────────────── 最小限 + 理解済み
     |
     v
[フェーズ 5: 検証]  ────────────── テスト成功? -> フェーズ 6
     |                                  |
     |                             テスト失敗? -> フェーズ 4 へ戻る
     v
[フェーズ 6: ドキュメント化]  ──── バグレポート + コミット

20分ルール

20分経過しても行き詰まっている場合:

  1. アプローチの変更 — 別のデバッグ手法を試す
  2. ラバーダック・デバッグ — 問題を声に出して説明する(または書き出す)
  3. 休憩を取る — 5分間離れ、新鮮な視点で戻る
  4. 助けを求める — 同僚、Stack Overflow、ドキュメントに相談
  5. リセット — git stash で完全に出直す

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Akademisches Studien- und Fristenmanagement mit Quellenprüfung, Datenschutz und realistischer Handlungsplanung.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

ellmos-ai/skills82026년 10월 19일 업데이트

Aktives Lernen, Erarbeitung von Fachinhalten und strukturierte Erstellung von Synthesen.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

ellmos-ai/skills82026년 10월 19일 업데이트

Prüfungsvorbereitung, Selbsttests, Probeklausuren und systematische Fehleranalyse.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

ellmos-ai/skills82026년 10월 19일 업데이트

Acceptance & Commitment Therapy (ACT) nach Steven Hayes: Hexaflex-Modell mit den sechs Kernprozessen psychischer Flexibilität.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

ellmos-ai/skills82026년 10월 19일 업데이트

Terapia de Aceptación y Compromiso (ACT) según Steven Hayes: modelo Hexaflex con los seis procesos nucleares de la flexibilidad psicológica.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

ellmos-ai/skills82026년 10월 19일 업데이트

スティーブン・ヘイズによるアクセプタンス&コミットメント・セラピー(ACT):心理的柔軟性の6つのコアプロセスを備えたヘキサフレックス・モデル。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

ellmos-ai/skills82026년 10월 19일 업데이트

ellmos-ai의 스킬 모두 보기

이 스킬의 문제 신고