「反映OK」と報告された画面は、目次も検索も壊れていた。AIに実測なしで報告させないために自作したスキル
「HTMLに入っている」は「動く」ではない。grep で数えて「反映OK」と書いた日、画面の目次は開かなかった。
車の整備記録を載せたサイトに、全ページ共通のボトムメニューと目次を付ける作業をAIに任せたら、「反映OKです」と報告が返ってきました。確認したのは、HTMLの中にそのメニューの部品の名前が入っているかどうか。数えたら入っていたので、OK、と。
それで画面を開いたら、目次は押しても開かない。他のページに移ると、メニューそのものが無い。検索は空振りでした。2026年9月21日の話です。
こちらの返事は、「基本的なことなので、当たり前のチェックをしてください」でした。この記事は、その「当たり前のチェック」をAIに必ずやらせるために作った、自作のスキルの話です。
1何が起きていたのか
壊れていたのは、車の整備記録を載せている個人のサイトでした。ページは全部で23。原因は3つ重なっていました。
1つ目は、画面を動かすJavaScriptが ercabUI is not defined というエラーで止まっていたこと。共通のJSをまとめ直したときに、手でコピーしてあった側が、その定義を持っていなかったんです。使っているのに、定義が無い。
2つ目は、ボトムメニューが23ページのうち1ページにしか付いていなかったこと。3つ目は、検索の索引ファイルが無かったこと。
それでも「入っている」と見えたのは、確認の仕方が grep -c でHTMLに部品の名前があるかを数えるだけだったからです。JSが動いているかは、grepでは絶対に見えません。
ここがポイント
「ビルドが通った」は「画面に出ている」ではない。「grepで見つかった」は「ユーザーの目に見えている」ではない。
同じ日は、これが4回目でした。横向きに倒れた写真を公開した、進み具合を読み違えた、キャプションを書き間違えた、そしてJSエラーの見落とし。全部、AIが成果物を自分の目で見ずに「できました」と言った回です。
2自作スキルは、29分後に最初の追記をした
作ったのは翌9月22日の朝です。スキルの履歴を見ると、最初の版は6時59分、117行・6,167バイト。ここには3つの決まりだけが書いてありました。
その29分後の7時28分に、もう一度書き足しています。作ってすぐに「実際に使うとこの落とし穴がある」と気づいたからでした。
いまは160行・12,412バイトで、決まりは4つに増えています。
verify-before-report の4つの決まり
| 決まり | やること | 元になった失敗 |
|---|---|---|
| 1. 見ているものが、ユーザーの見ているものか | 配信しているサーバーの起動時刻と、直したコミットの時刻を比べる。起動のほうが古ければ、相手は古い版を見ている | 「コードは正しいです」と答えたが、相手の画面には古いビルドが出ていた(9月22日) |
| ◎2. 押して、出て、動くところまで見る | ◎JSエラー0件、要素が見える、押したら変わる、他のページも同じ、の順に確かめる | ◎grepで「入っている」だけ見て、目次が死んでいたのに「反映OK」(9月21日) |
| 3. 数字で言う | 「ちゃんと並んでいます」ではなく「絵5枚・登録5体」と書く | 形容詞で言うと、確かめたかどうかが外から分からない |
| 4. 報告の前に別の角度で見直す | 作った・直したものを、別のAIに3つの角度で読ませる。作業が大きいほど人数を増やす | テストが全部通ったあとに、約16件の穴が見つかった |
3一番効いたのは「その指標は、失敗したとき何を返すか」
決まりの中で、自分でいちばん役に立ったと思っているのは、実は小さい一行です。確かめるための数字を選ぶとき、先に「失敗したときに、この数字は何を返すか」を調べる、というもの。
サムネイルを確かめるために使った hasCustomThumbnail という項目は、灰色の仮の画像のままでも true を返しました。配信側のmd5を比べる方法も、手で成功させたときと同じ値でした。成功と失敗が区別できない数字は、確かめたことにならない。当たり前ですが、スキルの冒頭に書いてあるとおり、サムネイルでは9月21日に4回続けて「入れました」と誤報告もしています。
4作ったあとに足した、実地の落とし穴
スキルの下のほうには、実際に踏んだものが「既知のエラー」として並んでいます。いくつか挙げます。
- CIが success でも、配信は成功とは限らない。
railway up --detachのように起動するだけのコマンドは、ビルドが落ちても success と出す /api/healthが見ているのは、本当に今のサーバーか。パスごとに別のサーバーへ振り分けている構成では、手前のサーバーの値を返していて、半日誤診したことがある- zsh の
for f in $FILESは、空白で分割されない。バックアップが0件のまま「元に戻った(指紋一致)」と出た。失敗して読めなかった者どうしの値が、一致してしまったので
どれも、AIがもっともらしい理由をつけて「大丈夫です」と言っていた場面です。
5大きさで、見直しの回数を変えた
4つ目の決まりは、9月27日に足しました。「完璧を求めています。時間は関係ないです」と伝えたあとです。ところが10月6日に「使用量がすぐ減るので改善したい」という話になり、作業を小・中・大の3段に分けています。
設定1つや文言の直しは、見直し役ゼロ。自分で実物を測るだけ。複数ファイルの機能追加は1人。画面を作る・人に渡すものは、3人と監督まで。測ることそのものを省く段はありません。
6正直、まだ分からないこと
このスキルを入れてから、誤報告が何件減ったかは、数えていません。失敗の台帳は、指摘された回数しか書いていないので、減ったのか、指摘されなくなっただけなのか、区別がつかないんです。
それと、スキルは説明文1行で呼ばれるかどうかが決まります。「できました」と書く直前にいつも呼ばれているのかは、まだ確かめられていません。
公開されているスキルではないので、紹介カードは付けていません。作り方の核は、記事の表の4行だけで足ります。自分のAIに最初に伝えるなら、「grepで見つかった、は、見えている、ではない」の一文からどうぞ。
次は、公開されているスキルの本体を読んで、実際に動かして書いた回の続きです。これまでの記事はAIに入れる便利なSkillsに、ほかの開発の話はブログにあります。「こういうときAIが嘘をつく」という経験があれば、お問い合わせから教えてください。
この記事を書いた人
NextCode(沖縄県宜野湾市)は、iOSアプリ・ホームページ/LP・NFCデジタル名刺・AI業務自動化を作っている開発スタジオです。ここで書いているのは、実際に作って公開したものと、その過程で詰まったことだけです。
お問い合わせフォームは24時間受け付けています。