Agentic Signal

Search

Updated 2026年8月15日 14 分で読めます

AIにコードを任せるほど、ドキュメントが重要になる — ハーネスエンジニアリングと自作ツールの設計

ハーネスエンジニアリングの実践ガイド

AIにコードを書かせるのは、もう当たり前になりました。

しかし、こんな違和感はないでしょうか。「AIは優秀なのに、毎朝記憶を失って出社してくる新人」のようだ、と。

この「賢いのに毎回忘れる」問題に有効なのが、ハーネスエンジニアリングという考え方です。本記事では、それを実践するために自作したドキュメント整備ツールを題材に、設計の理由と、実プロジェクトで動かして得られた知見を整理します。

対象は、Webアプリでもデスクトップアプリでも、AIエージェントに開発を任せるケース全般です。

AIが速すぎて、人間のレビューが追いつかない

「コードを書く」から「環境を整える」へ

近年、明確になってきた事実があります。

AIの作業スピードが、人間が確認できる速度を超えたということです。

エージェントは数分で数百行を書きます。一方、人間のレビュー速度は変わりません。ここに構造的なギャップが生じています。

このギャップを埋める考え方が「ハーネスエンジニアリング」です。

基本となるのは、次の等式です。

エージェント = モデル + ハーネス

モデルは、ChatGPT や Claude のような「頭脳」を指します。

ハーネスは、モデル以外のすべてです。

  • どんな指示(システムプロンプト=AIへの最初の命令文)を与えるか

  • どんな道具(ツール)を使わせるか

  • どこまで許可し、どこで止めるか(制約)

  • 結果をどうフィードバックするか

生のモデル単体では、エージェントになりません。

その周囲を固める”環境”がハーネスであり、それを設計するのがハーネスエンジニアリングです。

重要なのは、エンジニアの役割が 「自分でコードを書く」から「AIが確実に仕事を終えられる環境を整える」へ移った点です。

最大の課題は「記憶の喪失」

長時間動作するエージェントには、注意すべき性質があります。

作業メモリ(コンテキスト)が残り少なくなると、処理を雑に切り上げる傾向です。検証をスキップし、とりあえず動くものを出す。試験終了間際に解答欄を埋める状況に似ています。

さらに、セッションをまたぐと記憶はリセットされます。

つまりエージェントは、毎回ゼロから「このコードベースは何か」を探索し直すことになります。

ここに、明確な無駄があります。同じ探索を毎回繰り返しているのです。

なぜ「ドキュメント整備」を自動化したのか

リポジトリに書かれていないことは、存在しない

ハーネスエンジニアリングには複数の原則がありますが、特に効果が大きいのが次の一つです。

リポジトリに書かれていることが、すべて。

(この原則は “Repo as System of Record” と呼ばれます)

Slack の議論も、頭の中の設計意図も、エージェントには見えません。

したがって 「このプロジェクトはどういう構造で、どんなルールで動くか」をリポジトリ内に記述しておく必要があります。これにより、毎回の探索なしに、ドキュメントを読むだけで作業へ入れます。

ただし、分厚いマニュアルは逆効果

では、すべてを一つの巨大なドキュメントに書けばよいかというと、それは誤りです。

長文の中央に置かれた情報は、AIに十分活用されません(「Lost in the Middle」として知られる研究があります)。

分厚い指示ファイルは、次の三つの問題を抱えます。

  • コンテキストを圧迫する

  • 更新されず陳腐化する

  • 遵守されたか検証できない

ここで有効なのが 段階的開示(地図であって、マニュアルではない) という設計です。

  • 入口ファイルは”地図”にする(目安50〜200行)。プロジェクト概要、主要コマンド、そして「詳細はこのファイル」という1行リンクのみを置く

  • 詳細は別ファイルへ分離する。必要時にのみ開く

頻繁に使う情報は手元に、稀に使う情報は格納し、不要な情報は捨てる。

情報設計における”整理”そのものです。

自動化ツールとして実装した

この「リポジトリを正にする」「段階的開示で整理する」を毎回手作業で行うのは非効率です。

そこで専用のツールを実装しました。Claude Code(AIコーディング環境)の「skill」という拡張機構を用いており、名称は harness-docs です。これは Claude Code を使える環境であれば自作可能で、特別な依存はありません。

主な機能は次のとおりです。

  • 対象コードベースを解析し、入口ファイル + 詳細ドキュメント(docs/) の体系を生成する

  • 既存ドキュメントがあれば、実コードとの差分(ドリフト)を検出して更新する

  • 全体を「段階的開示」の構造へ整える

結果として、エージェントは毎回の探索なしに、整備された地図を読むだけで作業へ入れます。

AIにAIをレビューさせる

ここからが、実装上もっとも重要だった設計判断です。

生成物を、生成した本人に採点させない

ドキュメントを自動生成すると、「内容は正しいか」という検証問題が生じます。

人間が全件チェックするなら、自動化の意味が失われます。

そこで採用したのが、「生成する役」と「審査する役」を別のエージェントに分離する設計です。

(画像生成の GAN における「生成器と識別器を分ける」発想を参考にしています)

  • ドキュメントを生成するエージェントと、レビューするエージェントを別人格にする

  • 同一エージェントによる自己採点は、評価が甘くなる

人間でも、自分の書いた文章の誤りは見落としやすいものです。エージェントも同様です。

そのため harness-docs では、生成後に 独立した審査エージェントが実コードと照合してレビューします。

照合は具体的で、ドキュメント内に記述されたファイルパスやコマンドが、実コードに存在するかを逐一確認します。

適用結果:審査エージェントが差分を検出した

このツールを、実際の個人開発プロジェクト(macOS向けデスクトップアプリ)へ適用しました。

結果は明確でした。

審査エージェントが、過去の更新で見逃されていた誤りを複数検出しました。

  • ドキュメント記載のコンポーネント名が、実コードには既に存在しない(旧名のまま放置)

  • 「ウィンドウは2つ」との記述に対し、実際は5つに増加していた

  • 同一説明の2ファイル重複、上限値の古い記述 など——いずれも実物と照合しなければ検出できない差分

これらは、生成者自身であれば「概ね正しい」と見過ごしていた類の誤りです。

検出結果を数値で示します。

副次的効果:ツール自体の不具合も判明した

さらに、自作ツールを自身に適用した結果、ツール側の不具合が2件判明しました

  • 言語判定処理がメイン設定ファイルのみを参照し、サブディレクトリ内の別言語を検出できていなかった

  • ドキュメントの孤立検出が、ディレクトリ単位のリンクを考慮していなかった

これは「ドッグフーディング(自作ツールの自己適用)」が持つ典型的な効果です。

実運用しなければ、設計の欠陥は表面化しません。 机上で完成したつもりでも、現場で初めて判明する欠陥が存在します。

ハーネスは「補償層」である — モデルの成長で不要になる

最後に、もっとも本質的な設計思想を述べます。

ハーネスエンジニアリングを検討する中で、示唆的な視点があります。

ハーネスは、モデルの欠点を補う”補償層”である。モデルが成長すれば、補償層は不要になる。

例えば「AIは記憶を失う」という欠点があるため、ドキュメントで記憶を外部化します。

しかし将来、モデルがより長い記憶を保持できるようになれば、その補償は不要になり得ます。

ここから導かれる結論が重要です。

競争優位は「ハーネスの厚さ」ではなく、「何を補っているかを理解し、追加・削除を判断できること」にあります。

  • ハーネスが複雑なほど、モデルの弱点に依存している

  • モデルが進化したとき、その複雑さは負債に転じる

  • 削除できることは、何を補っていたかを理解していた証左

harness-docs も、「AIが毎回コードを探索し直す」という現在のモデルの弱点を補う層にすぎません。

数年後には不要になる可能性もあります。それで問題ありません。

何を補っているかを理解していれば、いつでも削除できるからです。

まとめ

要点を整理します。

  • ハーネスエンジニアリング = AIが確実に仕事を終えられる”環境”を設計すること。コードを書くより、環境を整える

  • リポジトリを正とし、段階的開示で整理する = エージェントに探索を繰り返させない。これを自動化したのが harness-docs

  • AIにAIをレビューさせ、補償層は”理解した上で”増減させる = 現時点でもっとも効果的な設計思想

そして核心は——何を補っているかを理解していれば、モデルが成長したときに迷わず削除できること。これがハーネスエンジニアリングにおける最重要の姿勢です。

導入の第一歩

「AIにコードを任せ始めたが、毎回同じ説明を繰り返している」と感じる場合、最初の一歩は単純です。

プロジェクトのルートに、薄い”地図”を1枚配置します。

例えば AGENTS.md(または CLAUDE.md)というファイルを作成し、次のように記述します。

# このプロジェクトについて
- 何をするアプリか: (一行で)
- 動かし方: npm run dev
- テスト: npm test
- 詳しい構成は → docs/ を参照

これだけで、AIエージェントの挙動は変わります。

分厚いマニュアルは不要です。まず地図から始めます。


Back to top