難解なバグは『状態の観測』から始める ― LLMデバッグで再現ログとテストを使う

プロンプト・LLM活用

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。OpenAIの現在のモデルガイダンスを確認し、旧版の「詳細な処理説明を出力させる」構成を、再現ログ・状態観測・最小修正・実テスト中心に見直しました。

検証ステータス:📘 OpenAI公式情報確認済み/特定言語・特定リポジトリでの横断評価は未実施

難しいロジックバグほど、コードを眺めるだけでは原因が見えません。入力によって状態がどう変化したか、どの時点で期待値から外れたかを観測する必要があります。

LLMを使う場合も、「何が起きたか」をログやテストで与える方が、抽象的な「バグを直して」より再現性が高くなります。

入力はコードだけでは足りない

対象コード: [必要な最小範囲]
再現入力: user_id=42, retry=2
期待結果: status="completed"
実際結果: status="pending"
再現率: 100%
関連ログ: [該当箇所だけ]

再現情報があると、モデルは一般論ではなく具体的な差分へ集中できます。

状態を表にする

時点 入力 状態 期待
開始 retry=0 pending pending
1回目 retry=1 processing processing
2回目 retry=2 pending completed

このような観測値を渡すと、「どこから違うか」を絞りやすくなります。

修正依頼では変更範囲を制限する

制約:
- public APIは変更しない
- 依存ライブラリを追加しない
- 問題に無関係なリファクタリングをしない
- 変更理由を3行以内で説明する
- 修正を確認するテストを追加する

実行できるなら実際にテストする

モデルの説明だけで「直った」と判断しません。テスト環境があるなら、修正後に対象テストを実行します。

pytest tests/test_retry_state.py -q

テスト環境がない場合は、未実施と明示し、最低限のテストケース案を残します。

ログを増やすときは観測目的を決める

大量のdebugログを追加すると、かえって原因が見えにくくなります。次のような「分岐点」を優先します。

  • 状態を書き換える直前と直後
  • 外部APIの戻り値
  • 再試行回数
  • 例外が握りつぶされる箇所
  • キャッシュやDBから読み直した値

修正後は元の再現ケースをもう一度使う

flowchart LR
    A[再現ケース] --> B[状態を観測]
    B --> C[原因候補を絞る]
    C --> D[最小修正]
    D --> E[同じケースで再テスト]
    E --> F[回帰テスト]

レビューで見るポイント

  • 再現ケースが本当に直ったか
  • 別の状態遷移を壊していないか
  • 例外を隠しただけになっていないか
  • 修正が必要以上に広がっていないか
  • 追加テストが期待動作を確認しているか

まとめ

難解なバグでは、説明の巧さより観測可能な事実が重要です。再現入力、状態、ログ、期待値、テストをそろえ、最小差分で修正し、同じケースで再確認します。

LLMは原因候補や修正案の作成に使い、最終確認は実行結果へ戻す。この流れにすると、モデルが変わってもデバッグ工程を維持しやすくなります。

公式情報・一次情報

この記事の更新履歴

  • 2026-09-13 追加:再現ログ、状態表、観測ポイント、実テスト、回帰確認を追加。
  • 2026-09-13 変更:長い説明を要求する方式から、状態観測と実行結果を中心とするデバッグフローへ変更。
  • 2026-09-13 削除:style_prompt、本文H1、旧モデル固有の記述、未検証の精度向上表現を削除。

文書情報

記事タイトル
難解なバグは『状態の観測』から始める ― LLMデバッグで再現ログとテストを使う
作成日
更新日
Source URL
https://papanda925.com/?p=6038

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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