AIとの開発

AIの早合点を止めながら、本番障害を直す

私は開発をAIと組んでやっています。外注ゼロ、社員ゼロで、クライアントの本番環境を触る仕事をしています。

この体制で一番難しいのは、コードを書かせることではありません。AIが「分かったつもり」で断定するのを止めることです。

止められなかったとき、間違った修正が本番に入ります。止められれば、人間ひとりより速い。その分岐点がどこにあるかを書きます。


何が起きるか

AIは、調べていないことを調べたように書きます。悪意ではなく、文章として自然に埋めてしまう。

実際に起きた例を挙げます。

例1: 「該当のカラムは全件空です」

ある集計で「このデータは全件が空だ」と報告されました。実際は半数以上に値が入っていました。

原因は、SQLのSELECT句にそのカラムを入れていなかったことです。取得していないので、参照すると undefined になる。それを「空」と数えていました。

JavaScriptは存在しないプロパティを参照しても落ちません。だから「取得していない」と「値が空」が区別できない。

例2: 「実測で誤検出ゼロです」

ある検査ロジックについて「1,368件で誤検出ゼロ」と報告されました。数字は正しい。しかし検査が成立する対象が2件しかありませんでした。

「1,368件中0件」は「2件中0件」と同じ意味だったのに、前者として報告されていました。分母を確かめていなかった。

例3: 「審査に落ちました」

案件の記録に「異議申し立て提出済み → 回答待ち」とだけ書いてありました。それを読んで「審査に落ちた」と書きました。記録にない結論を補完していた。

実際は、クライアントが事業自体を取りやめたという別の顛末でした。


共通しているもの

3つとも、推測を事実として書いています。 そして3つとも、指摘されるまで気づいていません。

パターンは決まっています。

  • 一部を見て全体を語る(SELECTした範囲=全体だと思う)
  • 分母を確かめない(率だけ見て母数を見ない)
  • 記録の空白を埋める(「回答待ち」→「落ちた」)

人間もやります。違うのは、AIはそれを流暢な断定文で出すことです。自信のなさが文面に出ないので、読む側が疑いにくい。


止め方

1. 「確認済み」と「推測」を分けさせる

出力の中で、実際にツールで確認したことと、そう思うことを分けて書かせます。

確認済み(コマンドと結果を示せるもの):
  - wp_ptogo_multi_products に14行、うち9行が active
    → wp db query の結果

推測(未確認):
  - product_status を inactive にすれば一覧から消えるはず
    → コードを読んでいない

こう書かせると、推測の量が可視化されます。 推測ばかりなら、まだ実装に入る段階ではありません。

2. 「見つからない」を「存在しない」と言わせない

grep して出てこなかったから存在しない、は成立しません。検索語が違う、対象ディレクトリが違う、除外設定に引っかかっている、いずれもあります。

「ローカルには見つからなかった」と「存在しない」は別のことです。後者を言うなら、GitHub、サーバー、アーカイブまで当たってからにする。

3. 数字には必ず分母を付けさせる

「誤検出ゼロ」ではなく「評価できた2件のうち0件」。

「98%が未消化」ではなく「1,417件中1,400件が未消化」。

分母を書かせるだけで、無意味な数字が自分で消えます。 分母がゼロなら、その指標は成立していません。

4. 完了報告の前に、確認の経路を全部挙げさせる

「直りました」の前に、「症状が起きうる経路」を列挙させます。画面、API、非同期ジョブ、cron、データ投入。1経路の成功を全体の成功にしない。

実例として、ある修正を「本番反映を確認しました」と報告した直後に、キャッシュ層を見ていなかったことが分かったことがあります。

5. 別のAIにレビューさせる

これが最も効きます。同じモデルに聞き直しても、同じ思考なので同じ見落としをします。別系統のモデルに、こちらの結論を見せずに独立して判断させる。

実際、ある検証ロジックについて、私が「完成した」と判断したものを別モデルにレビューさせたところ、5ラウンドにわたって欠陥が出続けました。 うち2件は、私が「誤検出を減らそう」として自分で作り込んだ退行でした。

  • 1回目: 正しい文を誤検出する
  • 2回目: それを直そうとして、検査そのものを無効化していた
  • 3回目: 直したつもりが、別の入力形式で破綻していた

誤りを消そうとして、検出能力を壊す。 これは一人では気づけませんでした。


止められなかった場合のコスト

止め損ねると、誤った前提の上に作業が積み上がります。

先の「全件空です」の例では、その誤ったデータを使ってA/B比較まで実施していました。数字1つの誤りが、それを使った検証結果を全部無効にしました。

やり直しのコストより、誤った結論を信じたまま次の判断をするリスクのほうが大きい。


それでもAIと組む理由

ここまで書くと使わないほうがいいように見えますが、逆です。

止め方さえ決まっていれば、圧倒的に速い。 1日で、3つのサイトの表記誤りを実測で見つけて直し、リポジトリに混入していた秘密鍵を全履歴から除去し、本番DBの状態を数え、放置されていたサイトを作り直す——これを一人でやるのは無理です。

重要なのは、AIに判断させないことではなく、判断の根拠を必ず示させることです。根拠が示せないなら、それは判断ではなく推測です。

そして人間の側は、「速く出てきた答え」を、速いという理由で信じないこと。


チェックリスト

実務で使っているものを置いておきます。

AIの出力を受け取ったとき

  • 断定している箇所に、確認の根拠(コマンド・出力)があるか
  • 数字に分母があるか
  • 「見つからない」を「存在しない」と書いていないか
  • 記録にないことを補完していないか

修正を本番に入れる前

  • 症状が起きうる経路を全部挙げたか
  • 全経路で確認したか、していない経路を明示したか
  • 元に戻す手順があるか
  • 別系統のレビューを通したか

完了報告の前

  • 「たぶん」「はず」で書いている箇所がないか
  • 未確認の項目を未確認と書いたか

まとめ

AIと組んだ開発で守るべきは、速度ではなく根拠の追跡可能性です。

出てきた答えが正しいかは、答えを見ても分かりません。どうやってその答えに至ったかを見れば分かります。

「速いから」「自信があるから」は、確認を省略する理由になりません。


AIを使った開発体制に関心のある方へ

Web戦略30年、現在は1人+AIで自社プロダクトとクライアントワークを回しています。実装のご相談、体制についてのご相談どちらも承っています。

販売実績58件・評価5.0・出品者ランク プラチナ(2026-09時点)