<p><thought_log>
RESEARCH-FIRST:</thought_log></p>
<ul class="wp-block-list">
<li><p>CoT (Chain-of-Thought) は複雑なロジックを解く際に、中間的な思考ステップを明示させることで推論精度を向上させる(Wei et al., 2022)。</p></li>
<li><p>プログラミングにおいては、単に「修正後のコードを出せ」と命じるよりも、「現状の挙動分析 → バグの原因特定 → 修正方針の策定 → 実装」というステップを踏ませることで、Gemini 1.5 Pro や GPT-4o のハルシネーションを抑制できる。</p></li>
<li><p>Self-Correction 要素を組み込み、生成したコードを LLM 自身に再検品させるフローが有効。</p></li>
</ul>
<p>PLAN:</p>
<ol class="wp-block-list">
<li><p>メタデータ出力</p></li>
<li><p>開示バッジ</p></li>
<li><p>H1: CoTによる複雑なロジックバグの特定と修正プロンプト</p></li>
<li><p>ユースケース:非同期処理や状態管理が絡む再現困難なバグの修正。出力はMarkdown/JSON併用。</p></li>
<li><p>Mermaid図解:設計・実行・評価・改善のサイクル。</p></li>
<li><p>プロンプト実装案:思考プロセスを強制する「Step-by-Step Analysis」プロンプト。</p></li>
<li><p>評価指標:修正の正確性、副作用の有無をLLM-as-a-Judgeで定義。</p></li>
<li><p>最適プロンプト:構造化された思考枠組みを適用した完成版。</p></li>
<li><p>まとめ:3つの鉄則。
</p></li>
</ol>
<p>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">CoT(思考の連鎖)を用いた複雑なプログラムバグの構造的修正手法</h1>
<h3 class="wp-block-heading">【ユースケース定義と課題】</h3>
<p><strong>ユースケース:</strong>
複数のモジュールが絡む非同期処理や、エッジケースで発生する再現性の低い論理バグの特定と修正。</p>
<p><strong>課題:</strong>
LLMがコードの表面的な修正(パッチ当て)に終始し、根本原因を見逃したり、修正によって別の箇所でデグレード(退行)を引き起こしたりすること。</p>
<p><strong>入出力の型:</strong></p>
<ul class="wp-block-list">
<li><p><strong>入力:</strong> バグを含むソースコード、期待される挙動、エラーログ(任意)</p></li>
<li><p><strong>出力:</strong> Markdown(思考プロセス + 修正コード)および JSON(影響範囲のメタデータ)</p></li>
</ul>
<h3 class="wp-block-heading">【プロンプト設計のループ】</h3>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
A["設計: 思考ステップの定義"] --> B["実行: LLMによる多段階推論"]
B --> C["評価: 修正の整合性チェック"]
C -->|デグレード発見| A
C -->|合格| D["最終出力"]
</pre></div>
<ol class="wp-block-list">
<li><p><strong>設計</strong>:LLMに「即座にコードを書くこと」を禁じ、まず現象を分析させる制約を課す。</p></li>
<li><p><strong>実行</strong>:CoT(Chain-of-Thought)を用いて、原因、仮説、検証、実装の順に出力させる。</p></li>
<li><p><strong>評価</strong>:LLM-as-a-Judgeの手法を用い、修正案が要件を満たしているか、副作用がないかを自己検証させる。</p></li>
</ol>
<h3 class="wp-block-heading">【プロンプトの実装案】</h3>
<div class="codehilite">
<pre data-enlighter-language="generic"># Role
あなたはシニアソフトウェアエンジニアです。提供されたコードのバグを分析し、堅牢な修正案を提示してください。
# Task
以下のコードには論理的な欠陥が含まれています。
「思考の連鎖(Chain-of-Thought)」を用いて、以下の手順で解決策を導き出してください。
## Step 1: 現状分析 (Analysis)
- コードが現在どのように動作しているか、データフローを追ってください。
- どこで期待と異なる挙動(バグ)が発生しているかを特定してください。
## Step 2: 根本原因の特定 (Root Cause)
- なぜそのバグが発生するのか、言語の仕様やフレームワークの特性を踏まえて説明してください。
## Step 3: 修正方針の策定 (Strategy)
- 修正によるサイドエフェクト(副作用)を最小限に抑える方法を検討してください。
## Step 4: 実装 (Implementation)
- 修正後のコードを提示してください。
# Constraints
- ステップ1から3を完了する前に、絶対にコードを書かないでください。
- 修正コードには、なぜその変更が必要だったかをコメントで記載してください。
# Input Data
## Code:
(ここにソースコードを貼り付け)
## Error/Expected Behavior:
(エラー内容や期待する動作を記述)
</pre>
</div>
<h3 class="wp-block-heading">【評価指標と誤り分析】</h3>
<p>LLMが出力した修正案を以下の基準で評価します。</p>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">評価項目</th>
<th style="text-align:left;">評価内容</th>
<th style="text-align:left;">失敗パターン(例)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>推論の論理性</strong></td>
<td style="text-align:left;">思考プロセスが論理的に飛躍していないか</td>
<td style="text-align:left;">「なんとなくここが怪しい」という直感的な記述</td>
</tr>
<tr>
<td style="text-align:left;"><strong>修正の正確性</strong></td>
<td style="text-align:left;">指定されたエラーが確実に解消されているか</td>
<td style="text-align:left;">別のエラーが発生する(構文ミス、変数未定義)</td>
</tr>
<tr>
<td style="text-align:left;"><strong>副作用の最小化</strong></td>
<td style="text-align:left;">既存の正常な機能に影響を与えていないか</td>
<td style="text-align:left;">本来必要な処理まで削除してしまう</td>
</tr>
<tr>
<td style="text-align:left;"><strong>様式遵守</strong></td>
<td style="text-align:left;">指定されたフォーマット(JSON/MD)を守っているか</td>
<td style="text-align:left;">思考プロセスを飛ばしてコードだけ出力する</td>
</tr>
</tbody>
</table></figure>
<h3 class="wp-block-heading">【改良後の最適プロンプト】</h3>
<p>Gemini 1.5 Proの長いコンテキストと推論能力を最大限に引き出す、構造化された「最強プロンプト」です。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># System Instruction
You are an elite Debugging Engine. Follow the "Reasoning-First" protocol.
Your goal is to fix bugs with 0% regression rate.
# Protocol: [THINK] -> [PLAN] -> [FIX] -> [VERIFY]
## 1. [THINK]
Analyze the provided code snippets. Map the data structure and execution flow.
Identify exactly where the logic diverges from the intended behavior.
## 2. [PLAN]
Hypothesize the fix. Evaluate if this fix introduces new issues (e.g., race conditions, memory leaks).
Output your reasoning in a bulleted list.
## 3. [FIX]
Provide the optimized, clean, and production-ready code.
## 4. [VERIFY]
Perform a self-code-review. Does this fix satisfy all edge cases?
If not, go back to [THINK].
# Output Format
Markdown format with specific headers.
At the end, provide a JSON block summarizing the change:
{
"bug_type": "string",
"severity": "low|medium|high",
"files_affected": [],
"regression_risk": "score 1-10"
}
# Input
## Source Code:
{{CODE}}
## Context/Issue:
{{ISSUE_DESCRIPTION}}
</pre>
</div>
<h3 class="wp-block-heading">【まとめ】</h3>
<p>実務でプロンプトを運用するための3つの鉄則:</p>
<ol class="wp-block-list">
<li><p><strong>「即時回答」を禁止する</strong>:<code>Wait and Think</code> や <code>Analyze before coding</code> という明示的な指示が、コードの質を劇的に変える。</p></li>
<li><p><strong>型を定義する</strong>:思考プロセスはMarkdown、メタデータ(影響度など)はJSONと分けることで、後続の自動化パイプラインに組み込みやすくする。</p></li>
<li><p><strong>自己検品(Self-Verification)を組み込む</strong>:プロンプトの最後に「自分で自分のコードをレビューせよ」というステップを加えるだけで、単純なタイプミスや論理の漏れが大幅に減少する。</p></li>
</ol>
RESEARCH-FIRST:
CoT (Chain-of-Thought) は複雑なロジックを解く際に、中間的な思考ステップを明示させることで推論精度を向上させる(Wei et al., 2022)。
プログラミングにおいては、単に「修正後のコードを出せ」と命じるよりも、「現状の挙動分析 → バグの原因特定 → 修正方針の策定 → 実装」というステップを踏ませることで、Gemini 1.5 Pro や GPT-4o のハルシネーションを抑制できる。
Self-Correction 要素を組み込み、生成したコードを LLM 自身に再検品させるフローが有効。
PLAN:
メタデータ出力
開示バッジ
H1: CoTによる複雑なロジックバグの特定と修正プロンプト
ユースケース:非同期処理や状態管理が絡む再現困難なバグの修正。出力はMarkdown/JSON併用。
Mermaid図解:設計・実行・評価・改善のサイクル。
プロンプト実装案:思考プロセスを強制する「Step-by-Step Analysis」プロンプト。
評価指標:修正の正確性、副作用の有無をLLM-as-a-Judgeで定義。
最適プロンプト:構造化された思考枠組みを適用した完成版。
まとめ:3つの鉄則。
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証) です。
CoT(思考の連鎖)を用いた複雑なプログラムバグの構造的修正手法
【ユースケース定義と課題】
ユースケース:
複数のモジュールが絡む非同期処理や、エッジケースで発生する再現性の低い論理バグの特定と修正。
課題:
LLMがコードの表面的な修正(パッチ当て)に終始し、根本原因を見逃したり、修正によって別の箇所でデグレード(退行)を引き起こしたりすること。
入出力の型:
【プロンプト設計のループ】
graph TD
A["設計: 思考ステップの定義"] --> B["実行: LLMによる多段階推論"]
B --> C["評価: 修正の整合性チェック"]
C -->|デグレード発見| A
C -->|合格| D["最終出力"]
設計 :LLMに「即座にコードを書くこと」を禁じ、まず現象を分析させる制約を課す。
実行 :CoT(Chain-of-Thought)を用いて、原因、仮説、検証、実装の順に出力させる。
評価 :LLM-as-a-Judgeの手法を用い、修正案が要件を満たしているか、副作用がないかを自己検証させる。
【プロンプトの実装案】
# Role
あなたはシニアソフトウェアエンジニアです。提供されたコードのバグを分析し、堅牢な修正案を提示してください。
# Task
以下のコードには論理的な欠陥が含まれています。
「思考の連鎖(Chain-of-Thought)」を用いて、以下の手順で解決策を導き出してください。
## Step 1: 現状分析 (Analysis)
- コードが現在どのように動作しているか、データフローを追ってください。
- どこで期待と異なる挙動(バグ)が発生しているかを特定してください。
## Step 2: 根本原因の特定 (Root Cause)
- なぜそのバグが発生するのか、言語の仕様やフレームワークの特性を踏まえて説明してください。
## Step 3: 修正方針の策定 (Strategy)
- 修正によるサイドエフェクト(副作用)を最小限に抑える方法を検討してください。
## Step 4: 実装 (Implementation)
- 修正後のコードを提示してください。
# Constraints
- ステップ1から3を完了する前に、絶対にコードを書かないでください。
- 修正コードには、なぜその変更が必要だったかをコメントで記載してください。
# Input Data
## Code:
(ここにソースコードを貼り付け)
## Error/Expected Behavior:
(エラー内容や期待する動作を記述)
【評価指標と誤り分析】
LLMが出力した修正案を以下の基準で評価します。
評価項目
評価内容
失敗パターン(例)
推論の論理性
思考プロセスが論理的に飛躍していないか
「なんとなくここが怪しい」という直感的な記述
修正の正確性
指定されたエラーが確実に解消されているか
別のエラーが発生する(構文ミス、変数未定義)
副作用の最小化
既存の正常な機能に影響を与えていないか
本来必要な処理まで削除してしまう
様式遵守
指定されたフォーマット(JSON/MD)を守っているか
思考プロセスを飛ばしてコードだけ出力する
【改良後の最適プロンプト】
Gemini 1.5 Proの長いコンテキストと推論能力を最大限に引き出す、構造化された「最強プロンプト」です。
# System Instruction
You are an elite Debugging Engine. Follow the "Reasoning-First" protocol.
Your goal is to fix bugs with 0% regression rate.
# Protocol: [THINK] -> [PLAN] -> [FIX] -> [VERIFY]
## 1. [THINK]
Analyze the provided code snippets. Map the data structure and execution flow.
Identify exactly where the logic diverges from the intended behavior.
## 2. [PLAN]
Hypothesize the fix. Evaluate if this fix introduces new issues (e.g., race conditions, memory leaks).
Output your reasoning in a bulleted list.
## 3. [FIX]
Provide the optimized, clean, and production-ready code.
## 4. [VERIFY]
Perform a self-code-review. Does this fix satisfy all edge cases?
If not, go back to [THINK].
# Output Format
Markdown format with specific headers.
At the end, provide a JSON block summarizing the change:
{
"bug_type": "string",
"severity": "low|medium|high",
"files_affected": [],
"regression_risk": "score 1-10"
}
# Input
## Source Code:
{{CODE}}
## Context/Issue:
{{ISSUE_DESCRIPTION}}
【まとめ】
実務でプロンプトを運用するための3つの鉄則:
「即時回答」を禁止する :Wait and Think や Analyze before coding という明示的な指示が、コードの質を劇的に変える。
型を定義する :思考プロセスはMarkdown、メタデータ(影響度など)はJSONと分けることで、後続の自動化パイプラインに組み込みやすくする。
自己検品(Self-Verification)を組み込む :プロンプトの最後に「自分で自分のコードをレビューせよ」というステップを加えるだけで、単純なタイプミスや論理の漏れが大幅に減少する。
ライセンス :本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント