🔧

ハーネス(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ハーネスはモデルの行動を追跡。

反復 — 結果を見て再実行。テスト失敗→コード修正→再実行。エージェント失敗→別のアプローチを試行。

動作フロー

1

ラッピング — 対象を修正せず外部から包んで制御(eBPFでアプリを、プロンプトでモデルを包む)

2

隔離 — 外部依存を遮断、制御された環境で実行(DBモック、サンドボックス)

3

観察 — 対象の入出力を記録・分析(テスト結果、モデル行動追跡)

4

反復 — 結果を見て再実行(テスト失敗→修正→再実行、エージェント失敗→リトライ)

メリット

  • ハーネス設計を改善するだけでモデル交換なしに性能が大幅向上
  • Cursor、Claude Code、Devin等AIコーディングツールのコア差別化要素がハーネス
  • 2026年現在AI業界ではModel EngineeringよりHarness Engineeringがより重要な技術

デメリット

  • ハーネスが複雑なほどデバッグと保守が困難に
  • モデル更新時にハーネスとの互換性問題が発生する可能性

ユースケース

テストハーネス — JUnit、RSpec、pytestのようなテストフレームワーク。KeployのようにeBPFでトラフィックを録画しテストを自動生成するツールも含む AIハーネス — Claude Code、SWE-agent、Devin等。モデルをファイルシステム、git、テスト実行、エラー分析に接続するシステム gstack — 一つのClaudeモデルを23の役割別専門家に分離するハーネス。プロンプトオーケストレーションの実践事例