ルールを決めた8日後に、自分でそれを破った——AIへの指示を4つのレイヤーに分けた
このサイトは、コードを書く作業の大半をAIに頼んで作っています。8月11日、そのAIに読ませている規約に1行足しました。「.js と .css にキャッシュ用のクエリを付けない」。ブラウザに古いファイルを掴ませないための小細工なのですが、この2種類は配信の設定でそもそも毎回確認が入るようになっていて、付けるだけ無駄だったからです。既存のぶんも全部消しました。
8月19日、AIにオリ図鑑の画像へ版数を付ける作業を頼んでいて、そのついでに style.css?v=2 と game.js?v=2 が復活していました。8日後です。規約は、AIに読ませているファイルのほうにちゃんと書いてありました。
紛らわしいルールほど、書いただけでは効かない
このサイトでは、画像とスクリプトでキャッシュの扱いが逆になっています。画像は「一度取ったらずっと使い回してよい」という設定で配信しているので、差し替えたらURLに版数を付けないと永久に古いままです。逆にスクリプトとスタイルは毎回確認が入るので、版数は要りません。
つまり「画像には必須、js/cssには禁止」。この向きを間違えると、直したのに反映されないか、毎回よけいな通信が走るかのどちらかになります。8月19日の作業は画像に版数を付けるのが目的でした。手が滑るとしたら、まさにここです。
規約ファイルには書いてありました。ただ、そのファイルは11,000行あるメモ群の一部で、AIが画像を差し替えるたびに開くものではありません。書いてある場所と、読まれる場所が違いました。
入口は短く絞る
そこで、置き場所を4つに分けました。1つめは入口です。AIが作業を始めるたびに必ず読む短いファイルを1つ用意して、118行に収めました(この記事を書いた2026年8月19日時点。以下の数字も同じ)。中身は踏むと事故ることだけ。さっきのキャッシュの向き、公開してはいけないディレクトリの構造、本文の無いページに広告タグを置かない、といった項目が並んでいます。全部、過去に実際にやらかしたものです。
ここに「なぜそうなっているか」を書きたくなるのを我慢しました。理由は正典のほうにいくらでも書いてあります。入口が長くなると読まれなくなるので、案内と地雷だけにとどめています。読む相手がAIでも、人に渡す資料と同じ考えかたですね。
行数に根拠があるわけではありません。ただ、書きながら「これは入口に要るか?」と一度ずつ止まると、だいたいの項目は正典側へ送り返すことになりました。残ったのが118行だった、というだけです。足したくなったときは、代わりに何を落とすかを先に決めるようにしています。
作業の種類で出てくるレイヤーをつくる
2つめは、頼まれた作業の種類をAIが見て、自分で引っぱり出してくる手順書です。いまは4本あります。
素材の追加・差し替え キャッシュの向きを間違えると事故 バランス数値の変更 本体とシミュレータの二箇所にある 制作ノートを書く 公開ペースに審査上の制約がある ゲームを追加する 掲載箇所が多く、漏れる
共通しているのは、4本とも過去に事故った作業だということです。思いつきで手順書を増やしたものは1つもありません。
たとえばバランス数値のぶんは、こういう事故から生まれました。カードゲームの敵編成が、ゲーム本体では「硬いのが2体+弱いのが3体」なのに、勝率を測るシミュレータのほうは「同じ強さが5体」の古い設定のまま残っていたんです。両方を揃え直したら、上手いプレイの勝率が51.8%から49.1%に下がりました。2.7ポイントぶん甘い数字を見ながら、難易度を判断していたことになります。
AIが数値を触るときだけこの手順が出てきて、「本体とシミュレータの両方を直せ」と書いてある。それだけのものですが、それだけで足ります。
自分で呼ぶレイヤーと、並列で走らせるレイヤー
3つめは、私が自分で打って、AIに始めさせるコマンドです。点検を全部通す、シミュレータを回す、ブランチを切ってコミットしてPRを作る。この3つを用意しています。手順書との違いは、勝手に始まってほしくないこと。とくに最後のものは、PRを作るところで必ず止まるようにしてあります。マージするかどうかはAIに任せず、自分で決めたいので。
4つめが、並列で走らせる監査役です。AIを1ファイルに1体ずつ当てて、ドキュメントと実装のズレを洗わせます。ただしこちらは読む専門で、書き換えはさせていません。その話は別に書きました。
どこに置くかの決めかた
迷ったときの基準は、いまのところこの2つです。
- AIに同じ説明を2回したら、手順として書き出す。3回目は書いたものを読ませる。2回目までは口で言ったほうが早い
- 頻度が低くても、間違えたときに本番が壊れるなら入口に置く。キャッシュの向きがこれ。1年に数回しか触らないのに、間違えると全員に影響する
逆に、置かなかったものもあります。コンフリクトの直しかた、AdSenseの定期点検、リリース作業の一括手順。どれも「あったら便利そう」で止まっていて、まだ2回同じ説明をしていません。増やすのは簡単なので、増やさない理由のほうを持っておくようにしています。
忘れるのは相手ではない
ここまで書いておいて何ですが、この4つのレイヤーはAIのために作ったものではありませんでした。
8月19日に規約を破ったのは私です。手を動かしたのはAIですが、頼んだ私は画像に版数を付けることだけを見ていて、隣にある禁止のほうが頭から抜けていました。出てきた差分も、そのまま通しました。同じ紛らわしさは、半年後の自分にも同じように効きます。手順書を読み返すと、そのほとんどが「昔の自分が引っかかった場所」の一覧になっていて、少し気まずいです!
ルールは、書いた場所ではなく読まれる場所に置く。当たり前のことなのに、11,000行を書き溜めた後でようやく実感しました。
後日談: 入口は減って、正典は倍になった
この記事は8月19日に書いて、1か月ほど寝かせてから出しています。そのあいだに数字が動いたので、出す直前に数え直しました。
入口は118行から116行になりました。足す前に何を落とすか決める、という決めごとは守れています。正典のほうは11,000行から22,000行を超えて、1か月で倍です。手順書は4本から6本に増えました。足した2本は「作品紹介ページに開発の裏話を書いてしまう」「日本語が英語の直訳調になる」で、どちらも実際にやらかしてから作ったものです。事故った作業からしか生まれていない、は変わっていません。
いちばん増えたのは自分で打つコマンドで、3本から10本になりました。issueを先に立てる、制作ノートを1本出す、といった「勝手に始まってほしくない」ものと、アプリ版を端末で確かめる、Zennの記事を書く、といった手順が長すぎて名前で呼びたくなったものの2種類です。監査役は当時から2種類あって、記事に書いたドキュメント1ファイルずつのもののほかに、ゲーム1本ずつに当てるものがあります。こちらは増えていません。
シミュレータの勝率は、いま回し直すと49.0%でした(4,000回)。本文の49.1%と同じ設定で、ぶれの範囲です。