【個人開発の記録】書いた注意書きより、動くテストを信じることにした

破れた警告カードと、離れた場所で光る合格チェックバッジを、ロボットがつなげているイラスト AIツール

あなたも、AIへの注意書きが守られなかった経験はありませんか。私は、個人で作っているアプリで、それを体験しました。自分で「大事だ」と書いた注意書きが、その20行下で、実際とずれていたのです。なぜ防げなかったのか。そこから今、どう運用を変えたかを紹介します。AIを責める話ではなく、確認の手順の話です。

【体験】書いたはずの注意書きが、守られていませんでした

個人でアプリを作っています。最近は、AIにコードを書いてもらう機会が増えました。

早く形になるぶん、確認の手間も増える。そう感じることが多くなりました。

これまでも、AIが書いたコードの不具合には、何度か気づいてきました。今回、初めて気づいたのは、コードではなく文書のずれです。

ある日、こんな作業がありました。利用者向けの説明文を、画面に表示する機能です。

「何を保存し、何を保存しないか」を、利用者に伝える文章でした。個人情報を扱う以上、誤りがあってはいけない部分です。

AIに、そのコードを書いてもらいました。ファイルの冒頭には、こんな注意書きも一緒に残されていたのです。

いま実際に保存しているものだけを書く。将来の予定を書かない。
ここに書いてあることと実装がずれた瞬間、この注意書き全体が信用されなくなる。

読んだとき、「よく気が付いた注意書きだ」と感じました。自分でも大事だと思い、そのまま残すことにしました。

ところが、その注意書きから、わずか20行下で、実際とずれていたのです。書いてある内容の一部が、実装されていませんでした。

見つけたのは、私自身ではありません。AIに、そのコードのレビューを頼んだときでした。

自分で「大事だ」と思って書いた文が、すぐ近くで破られている。それに、自分では気づけなかった。これが、この記事のきっかけです。

指摘を受けたときは、正直、驚きました。同時に、「よく見つけてくれた」とも思いました。自分ひとりの目では、限界があると実感した瞬間です。

【原因】「書いてあるのに」防げなかった理由

なぜ、自分で書いた注意書きが、自分を止められなかったのか。順番に考えてみました。

答えは、案外単純でした。コメントは、実行されません。読むかどうかは、そのときの自分次第です。

読んでいれば気づけたかもしれません。でも、忙しいときほど、コメントは読み飛ばされます。

私自身、コードを見返すとき、コメントより先に処理を追ってしまう癖があるのです。注意書きは、その分だけ見落としやすいのだと思います。

止めてくれるのは、テストのような、実行されるものだけです。人の注意力には頼れません。

実は、この機能にはテストも書いていました。「保存する内容が正しいか」を確認するテストです。

ところが、そのテストは、形だけを見ていました。「注意書きに書いた各項目が、本当に保存されるか」。それは、誰も確認していなかったのです。

似たようなことが、別の機能でも起きていました。「保存した内容から、機密情報を隠す」というテストです。

このテストは、テスト用のデータに、機密情報を1つも含めていませんでした。そのため、隠す処理を丸ごと削除しても、テストは通る状態でした。

見ているつもりで、実は見ていない。同じ型のずれが、2箇所で起きていました。

1つ見つかると、つい「もう直った」と安心してしまいます。ただ、同じ型のずれは、他の機能にも潜んでいるかもしれません。1箇所直して終わり、にはしないよう気をつけています。

【独自検証】ずれていたのは、コードではなく文書でした

振り返ると、この画面の説明文を、4回書き直していました。

理由は、毎回同じでした。「書いてあることが、実際には起きていなかった」からです。

版 ずれていた内容
1回目 「やり取りの本文を保存する」と書いたが、実装していなかった
2回目 「添付ファイルの種別とサイズを保存する」と書いたが、実際は保存していなかった
3回目 「期間を過ぎたら自動で削除する」と書いたが、自動削除は未実装だった
4回目 「本文は同意した時点まで保存する」と書いたが、実装は違う範囲だった

見つかったのは、コードの不具合ではありません。ずれていたのは、いつも文書のほうでした。

AIは、文書を書くのがとても速いです。そのぶん、実装との差も、速く生まれてしまいます。そう感じています。

もう一つ、気づいたことがあります。「テストのテスト」という確認作業です。

わざとバグを戻し、テストが赤くなるかを確かめる作業です。今回のスライスだけでも、10回以上やっていました。

それでも、今回のずれは通り抜けました。テストのテストには、限界があったのです。

テストのテストで分かるのは、「そのテストが、壊れたコードを捕まえるか」だけです。

「そのテストが、正しいものを見ているか」までは、分かりません。狙いがずれていれば、何度確かめても素通りします。

【気づき】想定と違ったこと

私はもともと、「テストさえ書けば、ずれは防げる」と思っていました。ところが、実際はそうではなかったのです。

大事なのは、テストの数ではありませんでした。「何を確認するテストなのか」を、先にはっきりさせることだと気づきました。

数だけ増やしても、狙いがずれていれば、素通りしてしまいます。今回、身をもって分かりました。

注意書きを書くこと自体は、悪いことではありません。ただ、それだけで満足してはいけない。それが、今回の実感です。

似たようなことが、他の画面にもないか。今、あらためて見直しているところです。

【今の運用】注意書きを、動くテストに置き換える

この経験から、やり方を変えました。特別に新しいことは、していません。既存のやり方に、手を加えただけです。

場面 今やっていること
利用者向けの説明文を書くとき 1行ごとに、それを検証するテストを用意する。紐付けられない行は、書かない
既存のテストを見直すとき 「テストのテスト」の対象を、その機能だけでなく、関係するテスト全体に広げる
確認項目(チェックリスト)を作るとき 「必須」か「任意」かを、作る時点で決めておく

あとから基準を変えると、判定がゆるくなりがちです。だから、作る時点で決めます。

この表は、AIに読ませる作業ルールのファイルにも、そのまま反映しました。私の記憶だけに頼らないためです。

今も、新しい機能を作るたびに、この表に沿っているか見直しています。まだ完璧にはできていません。それでも、ずれに気づく速さは、明らかに変わりました。

まとめ:注意書きではなく、実行されるものに約束を任せる

「書けば伝わる」「書けば守られる」は、私の思い込みでした。

コメントや説明文は、自分を止めてくれません。止めてくれるのは、テストや型のような、実行されるものだけです。

あなたのプロジェクトにも、こんな注意書きはありませんか。「書いたはずなのに、実装が違う」というものです。

私も、まだ探している途中です。よければ、一緒に確認の手順を見直してみませんか。

完璧な注意書きを目指すより、少しずつでも、実行されるものに約束を移していく。今の私は、その考え方で開発を続けています。

X(@kandt0517)でも、AI活用やアプリ開発の気づきを発信しています。よければ、フォローして一緒に学んでいきましょう。

参考・引用元ソース

本記事は、個人開発の記録(自分用のメモ)にもとづいています。外部の情報源からの引用はありません。

コメント

タイトルとURLをコピーしました