ハーネス(Harness)とは何か
テスト実行環境からAIエージェントまで、対象を包んで制御するシステム
Harnessという言葉は元々「馬具」を意味する — 馬(対象)を制御するために包む装置。ソフトウェアでも同じ意味で使う。
Test Harness — 元祖
Test HarnessはSUT(System Under Test)を包んで実行する環境だ。テストランナー、モックデータ、ログ収集、結果評価をまとめたもの。
JUnit、RSpec、pytest全てTest Harnessだ。テストコード自体ではなく、テストを実行して結果を収集する「環境」がハーネス。
KeployのようなツールもTest Harnessだ。eBPFでカーネルレベルでアプリのネットワークトラフィックを録画し、録画からテストを自動生成する。アプリコードを修正せずアプリを「包んで」テスト環境を作る。
AIハーネス — 拡張
AI/LLM文脈ではモデルを実際の作業に接続するシステム全体を指す。ファイル読み込み、コード修正、テスト実行、エラー分析、リトライまで含むパイプライン。
核心的な洞察は「対象(モデル/アプリ)の性能よりハーネス設計が重要」ということだ。同じCodexでも単純なハーネス(prompt→コード→終了)と良いハーネス(repo探索→patch→テスト→エラー分析→再修正ループ)ではSWE-benchスコアが大きく異なる。
ハーネスの共通パターン
分野が違ってもハーネスの構造は似ている。
ラッピング — 対象を直接修正せず外部から包んで制御する。KeployはeBPFでアプリを包み、Claude Codeはプロンプトとツールでモデルを包む。
隔離 — 外部依存を遮断し制御された環境で実行。Test HarnessはDBをモック化、AIハーネスはサンドボックスでコード実行。
観察 — 対象の入出力を記録・分析。Test Harnessはテスト結果を、AIハーネスはモデルの行動を追跡。
反復 — 結果を見て再実行。テスト失敗→コード修正→再実行。エージェント失敗→別のアプローチを試行。
動作フロー
ラッピング — 対象を修正せず外部から包んで制御(eBPFでアプリを、プロンプトでモデルを包む)
隔離 — 外部依存を遮断、制御された環境で実行(DBモック、サンドボックス)
観察 — 対象の入出力を記録・分析(テスト結果、モデル行動追跡)
反復 — 結果を見て再実行(テスト失敗→修正→再実行、エージェント失敗→リトライ)
メリット
- ✓ ハーネス設計を改善するだけでモデル交換なしに性能が大幅向上
- ✓ Cursor、Claude Code、Devin等AIコーディングツールのコア差別化要素がハーネス
- ✓ 2026年現在AI業界ではModel EngineeringよりHarness Engineeringがより重要な技術
デメリット
- ✗ ハーネスが複雑なほどデバッグと保守が困難に
- ✗ モデル更新時にハーネスとの互換性問題が発生する可能性