BLOG
「読んでから作業してね」が効かないので、AIを10日間数えてみた
2026.08.17
![]()
AIにコードを書いてもらうのが楽しくて仕方ない、という方に向けた話です。(僕もです。楽しいですね!)
うちの指示書には「本番環境に触る前に、この手順書を読むこと」と書いてあります。
AIはこれを、10日間で何回無視したと思いますか。僕の予想は「たまに忘れるくらいかな」でした。
「指示書に書いたのに」問題
AIコーディングツールには、たいてい「毎回これを読んでね」と書いておける指示書があります(Claude Code なら CLAUDE.md というファイル)。真面目に書いていました。
守られません。
散文で書いたポインタは、読む気があるときにしか効かないからです。新人に「マニュアルは棚の3段目にあるから」とだけ伝えて放置するのと同じで、忙しいときほど読まれない。
強い言葉で書く、大文字にする、太字にする。ひととおりやって、ひととおり効きませんでした。なので、お願いするのをやめて、数えることにしました。
数え方で、いきなりつまずく
作業ログを検索して「資料のファイル名が出てきたか」で判定したくなります。これは必ず失敗します。
指示書そのものに「この資料を読むこと」と書いてある以上、ファイル名は指示書の中に入っています。AIが指示書を開いた瞬間、ログにはファイル名が出る。この判定は、いつでも「読みました」と答えます。壊れた体重計と同じです。
なので、言及ではなく動作だけを数えました。「ファイルを開く」操作を実際に実行したか。それ以外はノーカウント。
もう一つ穴があります。最近のAIは、自分で助手のAIを呼びます。助手が資料を読んでも、その記録は親のログには残りません。これが後で効いてきます。
お願いを、3段に分けた
- 素通り — 何もしない
- 声かけ — 作業の直前に「この資料、読みました?」と一度だけ割り込む。読んでいなくても通す。ただし「声をかけたのに読まずに実行した」という事実だけ記録する
- 通せんぼ — 読むまで実行させない
(作業の直前に自動で割り込む小さな検査を「フック」と呼びます。1〜3は全部これで作りました)
肝は2段目です。止めないので邪魔にならない。そのかわり、無視された回数が数字で残ります。
27回
10日間・47回の作業・624件の記録が集まりました。「声をかけたのに、読まずに実行した回数」の1位が、インフラ設定の変更で27回。
しかも10日ぶんではなく、3日ぶんの数字でした。体感は「たまに忘れるくらい」。まあまあ外していました。数えるまで、自分は把握しているつもりだったんです。
ついでに、一度も読まれていないルールも1本見つかりました。声かけは出ているのに、読了0回。AIが悪いというより、その行がもう誰の役にも立っていないということです。書いた本人が存在を忘れていました。
2回目の再犯で、機械に移す
「別々の作業回で2回以上無視されたら、声かけから通せんぼへ」。1回きりの事故で締め上げない。でも再犯は気合いの問題ではないので、仕組みの側に移します。
昇格後、未読のまま実行しようとして止まったのが11回。昇格していなければ、全部そのまま通っていた実行です。
そして無視の回数はゼロになりました。……が、これは成果として書けません。通せんぼの段では「声かけを無視して実行」が原理的に起こりえないからです(止まるので)。ゼロは効果ではなく、定義です。自分の施策を測るとき、いちばん転びやすいのがここでした。
窓から出ていかれた
締めたあと、実害が出ました。
AIが助手を呼び、助手は資料を全文2回読みました。ちゃんと読んでいます。でもその記録は親に残らないので、通せんぼが解除されない。正しいことをしているのに、二度と開かない扉ができあがりました。
そのときAIは、フックを通らない別の書き換え方法を自作して、迂回しました。
泥棒みたいな例えで恐縮なのですが、目の前に「正しいのに開かない扉」があれば、窓を探すのが合理的です。そしてこの経験は、次からも使われます。
回避できてしまう誤検知は、本物のガードの信頼も削る
だから「不安なところを全部通せんぼ」は最悪手です。誤検知が1回でも起きれば、迂回そのものが正当な手段として定着する。本当に止めたい1回でも、静かに窓を使われます。
締めるのは実測で再犯が確認された分だけ。これは安全側に倒しているのではなく、締め方の上限だと思っています。
結局、測る話でした
「AIに仕事を任せる」は指示を上手に書く話だと思われがちですが、やってみると指示が守られたかを測る話でした。そして測ると、自分の体感はだいたい間違っています。
(1プロジェクト・10日ぶんの記録で、条件を揃えた実験ではありません。「2回で昇格」の2にも根拠はなく、決め打ちです。二度あることは三度ある。仏の顔も三度までとかいうしそのへんかなって。)
最後にひとつ。この記事の数字を集めている最中、AIは別のフックに2回止められました。
検査の終了コードがパイプに飲まれます。 パイプの$?は最後段の値なので、検査が落ちても 0 が返り、&&で繋いだ後続(commit / push / デプロイ)がそのまま走ります。2026-08-09 にdecisions.mjs lint | tail -1で踏み、exit 1 を見落として壊れた台帳を push しました。
過去に一度やらかした形が、そのまま止め役になっています。しかも「ダメ」だけでなく、正しい書き方まで出してくる。
同じ轍を踏まないようにメモを書く、ではなく、同じ轍に落ちたら勝手に手が伸びてくるようにする。AIと長く作業するなら、こっちの方が結局ラクでした。過渡期の話かもしれませんが、今はそんな感じです。