ハーネスエンジニアリングについて実践・解説
生成AIを使った開発は、スピード感がある一方で、思った以上に手戻りが増えることがあります。
実際に生成AIで開発を行っていると、「便利なのに、なぜか同じようなミスが繰り返される」と感じることはないでしょうか。
私たちテイルウインド株式会社でも、Claude Codeのような生成AIエージェントを活用する中で、AI本体の性能だけでは解決しきれない課題を数多く見てきました。
そこで重要になるのが、AIを取り巻く仕組みを整えるという考え方です。
今回は、その実践的なアプローチとして注目されている「ハーネスエンジニアリング」について、開発視点で整理します。
ハーネスエンジニアリングは「AIを賢く使うための土台づくり」
ハーネスという言葉は、もともと馬を制御する道具を指します。
生成AIの文脈では、モデルそのものを強くするというより、周辺環境を整えて能力を引き出す考え方として使われます。
つまり、AIに任せる範囲を広げるほど、周辺のルールや検証、共通化の仕組みが重要になるということです。
OpenAI、Anthropic、その他の各社でも、少しずつ違う観点から議論されていますが、共通しているのは「AI単体ではなく、運用全体で品質を上げる」という発想です。
この考え方は、生成AIを業務に組み込む企業にとっても非常に重要です。
なぜなら、実務では「動くこと」だけでなく、「保守しやすいこと」「再現性があること」まで求められるからです。
生成AI開発で起きやすい課題
Claude Codeのようなエージェント型ツールは非常に便利ですが、使い込むほど課題も見えてきます。
代表的なのは、同じような関数や処理が複数箇所に生まれてしまうことです。
短期的には動いていても、後から修正しようとすると影響範囲が広がり、管理が難しくなります。
また、エージェントを切り替えると前の文脈が十分に引き継がれず、判断がぶれることもあります。
これはツールの欠陥というより、アーキテクチャ上の制約に近いものです。
そのため、プロンプト改善だけで解決しようとせず、仕組みとして補う必要があります。
私たちが現場で重視しているのは、AIの出力を後追いで直すのではなく、生成の段階から品質を支える設計にすることです。
これは、最終検品だけに頼らず、製造途中で品質を積み上げる考え方に近いです。
品質を安定させる3つの設計ポイント
今回の実践では、大きく3つのレポートを用意し、Claude Codeに読み込ませる形で検証を進めました。
この考え方は、生成AI開発のスターターキットとしても有効です。
1. 共通関数を先に用意する
まず重要なのは、よく使う処理をあらかじめ共通化しておくことです。
日付処理、バリデーション、ID生成、非同期処理、エラーハンドリングなどは、プロジェクトが大きくなるほど重複しやすい領域です。
そこで、`utils`、`helpers`、`library` といった分かりやすい場所に共通関数を置き、まずそこを参照する流れを作ります。
新しいコードを都度作るのではなく、既存の仕組みを再利用する方針にすると、保守性が大きく変わります。
さらに、重複コードの検知には、jscpdのようなツールも活用できます。
同じルールや処理が複数回現れたら、共通化を検討する。
このルールを先に決めておくことが、後のメンテナンスを楽にします。
2. ファイル編集のたびに検証を走らせる
次に大切なのが、事後チェックだけに頼らないことです。
Claude Codeにはフック機能があり、ファイル編集のたびに自動で検証を走らせることができます。
例えば、フォーマット、型チェック、テスト実行、危険コマンドの停止などを組み込めば、問題が広がる前に気づけます。
これは単なる便利機能ではなく、品質を運用で担保するための重要な仕組みです。
生成AIは、入力の仕方によって出力が変わります。
だからこそ、毎回の生成結果をその場で整えるのではなく、最初からブレにくい環境を作っておくことが有効です。
3. AIの苦手領域を前提に運用する
3つ目は、AIの特性を正しく理解することです。
Claude Codeのようなエージェントは優秀ですが、コンテキストには限界があり、セッションをまたいだ記憶も保持できません。
そのため、うまくいった手順や失敗したポイントを次の実行に引き継ぐ仕組みが必要です。
私たちはこれをフィードバックループとして整理しています。
成功した判断、失敗した判断、修正の履歴を残しておくことで、次のエージェントがより良い判断をしやすくなります。
単発の指示ではなく、継続的に学習できる運用に変えることが、実務では大きな差になります。
生成AI導入では「ルール化」が成果を分ける
今回の検証では、3つのレポートをもとにClaude Codeへ再設計を依頼しました。
その結果、共通関数の整備、フックによる自動検証、重複コードのチェック、ルールへの反映といった流れが整理されました。
ここで見えてきたのは、生成AIの活用は「何を作るか」だけでなく、「どう作らせるか」が重要だということです。
AIに自由に書かせるほど速く見えますが、実際には後工程での修正コストが増える場合があります。
一方で、環境設計を先に行えば、結果として開発全体の速度と安定性が上がります。
これは、生成AI導入を検討する企業にもそのまま当てはまります。
PoCで成果が出ても、本番運用で崩れてしまうケースは少なくありません。
だからこそ、運用ルール、共通部品、検証の流れまで含めて設計することが大切です。
まとめ
- ハーネス設計は、AI本体ではなく周辺の仕組みを整える考え方です
- 生成AI開発では、共通関数の整備と重複コード対策が重要です
- フック機能を使うと、編集のたびに品質チェックを自動化できます
- AIの記憶や文脈の限界は、フィードバックループで補う必要があります
- プロンプト改善だけでなく、運用設計まで含めると成果が安定します
生成AIは、単独で完結する道具ではありません。
周辺の仕組みをどう設計するかで、実務での価値が大きく変わります。
私たちも引き続き、現場で使える形に落とし込む知見を発信していきます。