[!NOTE]
【この記事の要約(TL;DR)】
- AIの「先祖返り(退行現象)」の正体: AIエージェントが既存コードを参照する際、ワークスペース内に古い実装が残っていると、最新ルールではなく検索で手近にヒットした過去コードを参考にしてしまう場合があります。
- プロンプト指示の限界: 「最新ルールを守って」と指示するだけでは、参照対象や作業手順が曖昧なまま残り、意図しない実装やすり抜けを完全には防げません。
- 構造による対策: ①仕様書の先行参照(判断基準の固定)、②旧コードのアーカイブ隔離(参照対象の限定)、③HTML/CSSテンプレートの単一源泉化(実装構造の限定)によって、誤参照と意図しない実装の余地を減らします。
1. 「最新ルールで作って」と指示したのに、なぜAIは旧デザインを出力したのか?
AIエージェントとペアプログラミングや自動化システムの構築を進めていると、ある日突然、奇妙な現象に直面することがあります。
「新しく決めた最新デザインやルールがあるのに、なぜか数週間前の古いレイアウトやコードで出力されてしまう」
まさに今回、私自身の制作現場(ショート動画の自動レンダリング自動化)でこのトラブルが発生しました。
私たちは動画制作において、「下部にテロップと話者ワイプを一体化した最新スピーチバナー」という厳格なデザインルールを策定していました。しかし、新しく動画の生成を指示したところ、AIが出力してきたのは、以前使っていた「ワイプとテロップが上下にバラバラに配置された旧世代のデザイン」だったのです。
「あれ? ワイプとテロップの位置関係のルールを忘れてしまったの?」
そう指摘して初めて、AIは「過去のスクリプトを真似てしまいました」と気づきました。
なぜ、仕様書が存在しているにもかかわらず、AIはこのような「先祖返り(退行現象)」を起こしてしまうのでしょうか?
2. トラブルの根本原因:AIの参照メカニズムと「読み込み順序の逆転」
原因を冷徹に分析した結果、問題はAIの能力不足ではなく、「情報の読み込み順序と参照フローの構造的欠陥」にありました。
① 手近な類似コードを優先して真似てしまう検索挙動
自律型AIエージェントは、コードを書く際に「過去の類似実装」をフォルダ内から検索して参考にしようとします。
このとき、作業フォルダ(scripts/ など)の中に過去に作った古いスクリプトが大量に残っていると、AIはファイル検索で上位にヒットした古いコードをそのままテンプレートとして流用してしまいます。
② 仕様書(正本)の照合ステップのスキップ
本来あるべき手順は以下の通りです:
- Step 1: まず仕様書(
SKILL.mdや設計書)を開いて最新ルールを確認する - Step 2: ルールに適合した正本ファイルだけを参照する
- Step 3: コードを生成する
しかし、AIが自律的にタスクを完了させようとする過程で、「Step 1(仕様書確認)をすっ飛ばして、手近な過去コードをコピーして書き換える」という順序の逆転が起きてしまいます。
その結果、過去の古いHTML/CSS構造がそのまま新ファイルに複製され、最新ルールが置き去りになるという事故が発生しました。
3. 「プロンプトで注意する」だけではミスをゼロにできない
ここで重要なのは、「AIに『これからは注意してね』『最新ルールを必ず守って』と言葉で指示しても、根本的な解決にはならない」という冷徹な事実です。
プロンプトに禁止事項を書くことは有効なアプローチですが、それだけでミスをゼロにできるとは限りません。指示が正しくても、参照対象が曖昧だったり、旧コードが検索対象に残っていたりすれば、意図しない実装が入り込む余地が残ります。
だからこそ、「守るべきルールを書く(プロンプト)」だけでなく、「間違った参照先を選びにくい環境を作る(構造設計)」ことが重要になります。
4. AIの先祖返りを防ぐ「3つの防壁」
今回、私たちはこのトラブルを受け、以下の3重のガードレールを構築しました。
| 防壁 | 守る対象 | 役割 | 具体的な実装 |
|---|---|---|---|
| ① 仕様書先行参照 | 判断基準 | 何を正解とするかを固定する | 憲法(AGENTS.md)で作業着手前のSKILL.md参照を義務化 |
| ② 旧コードの隔離 | 参照対象 | 何を参考にしてよいかを絞る | 古いスクリプトを archive/ へ一括隔離 |
| ③ テンプレート単一源泉化 | 実装構造 | どこを変更してよいかを限定する | HTML/CSSを共通テンプレート(SSOT)として固定 |
防壁1:憲法(AGENTS.md)に「仕様書の先行参照」を義務付け
エージェントの最上位ルール(憲法)に、「スクリプト作成時は、既存コードの検索・コピーを先行させてはならない。必ず作業着手前に該当領域の仕様書(SKILL.md)を開き、最新仕様を確認すること」と明記しました。
作業の初動で仕様書を必ずコンテキストにロードさせ、判断基準を固定する仕組みです。
防壁2:過去コードの隔離(archive/ への退避)
scripts/ 直下に散らばっていた過去の旧仕様スクリプトを、すべて archive/ フォルダへ一括移動しました。
AIがフォルダ内を検索しても「最新の正本マスター」しか視界に入らない環境を作ることで、誤参照の余地を排除しました。
[!TIP]
「アーカイブ隔離」と「削除」の違い
旧コードをアーカイブへ移すことは、履歴を消すことではありません。過去の実装を参照する必要がある場合に備えて安全に保存しつつ、「通常の制作フローでは正本だけを扱う」という役割分担を行う設計です。
防壁3:HTML/CSSの単一源泉化(共通テンプレート化)
スクリプトごとに毎回AIがHTMLやCSSをゼロから記述するのを廃止しました。
正本のHTML骨格を templates/speech_banner_template.html として1箇所に固定し、スクリプト側は「テキストと画像パスを流し込むだけ」の仕様に変更しました。
AIが毎回レイアウトやCSSを再設計する余地を減らし、変更すべき場所を正本テンプレートに集約するアプローチです。
5. まとめ:AIを使いこなすとは「誤解が起きない環境を設計すること」
AIエージェントの運用でトラブルが起きたとき、「AIの頭が悪い」「プロンプトが甘かった」と片付けるのは簡単です。
しかし、本質的な解決策は「AIが誤った情報にアクセスしにくいフォルダ構造を作ること」や「正解のテンプレートを1箇所に固定すること」にあります。
- 指示の言葉を増やすのではなく、視界に入るノイズ(旧ファイル)を減らす
- AIの自律性に任せる部分(コンテンツ流し込み)と、構造で縛る部分(HTML/CSS骨格)を明確に分ける
「境界線と構造の設計」こそが、AIエージェントを安定して使い続け、再現性の高い成果を出すための本質的な運用術です。