FCoTがAIの応答をどう変えるかを並べて比較。各サンプルでは、同じ判断をFCoTなし/ありで検証した結果を示す。
- JWT vs セッション認証 — 「セッションベース認証はJWTより安全」
- TypeScript
any— 「TypeScriptでanyは絶対使うべきではない」 - モノリス vs マイクロサービス — 「マイクロサービスよりモノリスから始めるべき」
- グローバルステート — 「グローバルステートは悪であり、常に避けるべき」
- ユニットテスト優先 — 「ユニットテストは常にインテグレーションテストの前に書くべき」
- リモートワーク — 「リモートワークはオフィスワークより生産性が高い」
- 文法 vs 会話 — 「英語学習はまず文法より会話から始めるべき」
- AIがエンジニアを置き換える — 「AIはいずれほとんどのソフトウェアエンジニアを置き換える」
- 大学教育 — 「大学教育はソフトウェアエンジニアにとって不要になりつつある」
- パスワードハッシュ — 「パスワードは平文ではなくハッシュ化して保存すべき」
- SQLインジェクション — 「SQLインジェクションはパラメタライズドクエリで防げる」
- コードレビュー — 「コードレビューは有益であり、すべてのチームが行うべき」
FCoTは常に結論を変えるわけではない。判断が健全な場合は、それを確認しつつ、注意すべきエッジケースを明らかにする。
FCoTが限定的またはゼロの価値しか追加しなかった例 — 手法の境界の正直な評価のために含む。
- リモートワーク — Controlが既にnuanced; FCoTの改善余地が限定的
- 大学教育 — Controlがwell-balanced; 狭い追加発見
- Composition over Inheritance — Already-qualifiedな主張(「多くの場合」)で反駁の余地が少ない
- Premature Optimization — Controlが既にfull Knuth quoteで反論済み
有効性は、Control 応答と比較して FCoT が判断を有意義に改善または検証したかを測定する。
| 評価 | スコア | 基準 |
|---|---|---|
| ⭕️ | 1.0 | FCoT が Control が見落としたまたは過小評価した実質的な反論を浮上させ、かつ結論(confirm/revise/change)がそれらの論拠に十分裏付けられている |
| 🔺 | 0.5 | FCoT が追加の反論を出したが、Control が既に重要な論点のほとんどをカバーしていた — 限定的な追加価値 |
| ❌ | 0.0 | FCoT が Control を超える有用な反論を出せなかった、または過剰・無関係な出力を生成した、または健全な判断を過剰修正した |
⭕️ が要求しないもの:
- 結論の方向が pre-defined 予測と一致すること(それは期待一致度、別のメトリクス)
- 特定の数の反論が生存すること
- 判断が修正されること(根拠付きの確認も ⭕️)
| 例 | 評価タイプ | FCoT 結果 | 有効性 | 根拠 |
|---|---|---|---|---|
| 文法 vs 会話 | 事後 | 変更 (4/4) | ⭕️ | 追従的なControlを全面的に覆した。化石化、学習者タイプ、Krashenの誤用を発見 |
| JWT vs セッション認証 | 事後 | 修正 (4/4) | ⭕️ | 偽の対称フレーミングを修正。構造的失効ギャップと非対称攻撃面を特定 |
| モノリス vs マイクロサービス | 事後 | 確認 (0/6) | ⭕️ | 6反論を検証して健全性を確認。追従ではなく根拠付きの確認 |
| パスワードハッシュ | 事後 | 狭い修正 (2/4) | ⭕️ | 核心原則を確認しつつ、PBKDF2の欠落と不正確なSHA否定で精度を向上 |
| リモートワーク | 事後 | 軽微な修正 (1/6) | 🔺 | async-first組織の区別を発見。ただしControlがすでに十分で追加価値は限定的 |
| TypeScript any | 事後 | 修正 (4/4) | ⭕️ | migration、metaprogramming、test mocks、サードパーティ型の4つの正当な例外を発見 |
| AIがエンジニアを置き換える | 事前定義 | 大幅修正 (4/4) | ⭕️ | 原理的上限の不在、需要弾力性の不確実性、経済的インセンティブ — 楽観的フレーミングを大幅修正 |
| SQLインジェクション | 事前定義 | 修正 (3/3) | ⭕️ | Controlの「Correct.」に対し、動的識別子、不完全な適用、2次インジェクションを発見 |
| グローバルステート | 事前定義 | 修正 (2/5) | ⭕️ | すでに批判的なControlに対し、初期化順序バグと並列テストコストでさらに精度向上 |
| ユニットテスト優先 | 事前定義 | 確認 (1/5条件付き) | ⭕️ | TDD・test pyramidを含む5反論を検証して健全性を確認 |
| コードレビュー | 事前定義 | 修正 (2/5) | ⭕️ | 追従的な「Agreed」に対し、コンテキスト感度と実行品質依存性を発見 |
| 大学教育 | 事前定義 | ほぼ健全 (1/5) | 🔺 | オンラインリソースのギャップ縮小を発見。ただしControlがすでに十分で追加価値は限定的 |
| Composition over Inheritance | 事前定義 | 確認 (0/5) | 🔺 | Already-qualifiedな主張(「多くの場合」); Controlがnuanced; FCoTは改善なく確認 |
| Testing Business-Critical | 事前定義 | 修正 (3/4) | ⭕️ | 「all」の不正確さ、事後的ラベリング、期待値トレードオフ — Controlの genuine なギャップを発見 |
| Premature Optimization | 事前定義 | 健全(要修飾) (1/4 + 1?) | 🔺 | Controlが既にfull quoteで反論; FCoTは軽微な修飾とinconclusiveを追加 |
有効性: 12 / 15(80.0%) — FCoTが判断を有意義に改善または検証したか? ⭕️ = 1、🔺 = 0.5、❌ = 0。
事前定義サブセット: 8 / 9(88.9%) | 事後サブセット: 5.5 / 6(91.7%)
期待一致度: 8.5 / 15(56.7%) — FCoTの結論方向が事前定義または事後の予測と一致したか?(各exampleファイルに個別の期待評価あり。)
- N=15、定性的、単一モデル(Claude Sonnet 4.6)。統計的検定なし、再現性の検証なし。
- サンプリングバイアス。 判断文はランダムではなく、デモンストレーション価値で選択。
- 事前定義 vs 事後評価。 15件中9件が事前定義された期待結果を使用(AIがエンジニアを置き換える、SQLインジェクション、グローバルステート、ユニットテスト優先、コードレビュー、大学教育、Composition over Inheritance、Testing Business-Critical、Premature Optimization)。残り6件はFCoTの出力を観察した後に「期待」結果を設定。サンプルは主にプロセスの挙動をデモンストレーションするものであり、効果の測定ではない。
- コンテキスト分離プロトコル。 各サンプルは
/tmpから別々のCLIプロセスで実行し、プロジェクトコンテキストの汚染を回避。Controlは--disable-slash-commands(FCoTスキルなし)で生成、FCoTは同一セッションを resume して/fcotで生成。~/.claude/CLAUDE.mdとワークスペースのCLAUDE.mdは実行中無効化。詳細は実行プロトコルを参照。 - コンテキスト汚染(過去のラウンド)。 過去のサンプリング(ここには含まない)で2つの汚染形態を発見: (1)
CLAUDE.mdの反追従指示が通常より反論的なControl応答を生成、(2) ControlとFCoTを同一コンテキストで実行すると一貫性バイアスが発生(FCoTが自らの先行出力との整合性を維持)。現在のプロトコルは両方に対処。詳細は APPROACH.ja.md を参照。 - モデル間比較なし。 すべてのサンプルが同一モデル。FCoTの効果が異なるモデルファミリーでも成立するかは未検証。
各サンプルは以下の2ステップCLIプロセスで生成:
# 前提条件: すべてのCLAUDE.mdファイルを無効化
mv ~/.claude/CLAUDE.md ~/.claude/CLAUDE.md.disabled
mv /path/to/workspace/.claude/CLAUDE.md /path/to/workspace/.claude/CLAUDE.md.disabled
# Step 1: Control(/tmp から実行してプロジェクトコンテキストを回避、スキル無効)
cd /tmp && claude -p '"<statement>"' \
--model claude-sonnet-4-6 \
--disable-slash-commands \
--output-format json > <slug>.control.json
SESSION_ID=$(python3 -c "import json; print(json.load(open('<slug>.control.json'))['session_id'])")
# Step 2: FCoT(同じセッションを resume、スキル有効)
cd /tmp && claude -p "/fcot" \
--model claude-sonnet-4-6 \
--resume "$SESSION_ID" \
--output-format text > <slug>.fcot.md
# 全実行後にCLAUDE.mdファイルを復元
mv ~/.claude/CLAUDE.md.disabled ~/.claude/CLAUDE.md
mv /path/to/workspace/.claude/CLAUDE.md.disabled /path/to/workspace/.claude/CLAUDE.mdこのプロトコルが保証すること:
- プロジェクトコンテキスト汚染なし —
/tmp作業ディレクトリによりプロジェクトファイルの読み込みを防止 - CLAUDE.mdバイアスなし — 反追従指示やその他の行動指示を無効化
- ステートメント間の相互汚染なし — 各ステートメントが独自のCLIプロセスで実行
- ステートメント内のコンテキスト継続 — FCoTは同一セッションを resume するため、自身のControl応答を参照可能
- スキル分離 — ControlステップはFCoTスキルにアクセス不可、FCoTステップはアクセス可能