ハーネスドリフトとは何か:AIの設定とコードのずれを検出・防止する方法
設定とコードがずれていく現象
このサイトを構築する過程で、「設定ファイルに書いてあることと、コードの実態が合わなくなっている」という状況が繰り返し発生しました。
この現象を「ハーネスドリフト」と呼んでいます。ドリフト(drift)は漂流を意味する言葉で、ここでは「設定ファイルとコードが時間とともに少しずつずれていく状態」を指します。
具体的にどういう状態か
実際に発生したドリフトの例を紹介します。
ルールとコードのずれ
CLAUDE.mdには「src/components/ディレクトリは直接変更しない」と書いてありました。しかし実際には、あるコンポーネントをリファクタリングした際にそのルールを更新し忘れ、しばらくの間ルールの記載内容とコードの実態が一致していない状態が続きました。
スキルファイルと実装のずれ
ブログ執筆スキルのファイルには「frontmatterにXXXフィールドを追加する」と書いてありましたが、サイトのコードが変わってそのフィールドは不要になっていました。スキルファイルの記述が古いまま残っていたため、AIはそのフィールドを引き続き追加し続けました。
パスの変更とファイル参照のずれ
ファイルを別のディレクトリに移動した際、CLAUDE.mdに書いてあった参照パスを更新し忘れ、AIが古いパスを使い続けました。
なぜドリフトが起きるか
ドリフトが発生する主な理由は、コードを変更したときに設定ファイルの更新を忘れるからです。
コードの変更は目的が明確なので実行されます。しかし設定ファイルの更新は「付随作業」であるため、後回しになったり忘れられたりします。
また、AIを使った開発では、AIが自発的にコードを変更することがあります。AIはコードを変更する際に、関連する設定ファイルを同時に更新しないことがあります。これがドリフトの一因です。
防止策:変更と更新をセットにするルール
最初に取り入れた防止策は、「コードを変更するときは、関連する設定ファイルも一緒に更新する」というルールをCLAUDE.mdに明記することでした。
AIへの指示として「ファイル構造やディレクトリを変更する場合は、CLAUDE.mdの該当箇所も同時に更新すること」と記載しています。これにより、AIが変更作業を行う際に設定ファイルの更新も意識するようになりました。
ただし、このルールだけでは完全には防げません。ルールを書いても守られないことがある、というのはAIを使う上での現実的な制約です。
防止策:自動検出(harness:check)
ルールによる防止と並行して、npm run harness:check でドリフトを自動検出しています。検査項目の設計とスクリプトを作った過程はAIとバリデーションスクリプトを作るに分け、この記事では「ルールと実装のずれを早期に見つける」という役割だけを扱います。
完全に防ぐことは難しい
現時点では、ドリフトを完全に防ぐ方法はないと考えています。コードが変わり続ける限り、設定ファイルとのずれが生じるリスクは残ります。
現実的な対処は「気づくまでの時間を短くすること」です。変更のたびにチェックスクリプトを実行する習慣を作ることで、ドリフトが積み重なる前に検出できます。
まとめ
ハーネスドリフトは、設定ファイルとコードの実態が時間とともにずれていく現象です。原因は主に「コード変更時に設定ファイルの更新を忘れること」です。防止策として「変更と設定更新をセットにするルール」と「自動検出スクリプト」の両方を組み合わせることで、ドリフトが長期間気づかれないまま積み重なる状況を避けやすくなります。