【プログラミング】AIのコードが本番で通用しない理由、失敗したことがないからだった


AIが書いた「完璧な」コード、シニアエンジニアに却下される
AIが書いた「完璧な」コード、シニアエンジニアに却下される
AI writes code. Experience writes code that survives.

金曜日の午後4時47分
プルリクエストの準備が整った。
Claudeを使って認証ミドルウェアを書いた。プロンプトを2回打っただけ。テストはパス、リンターも文句なし。あとはマージして週末を楽しむだけだ。
そこにSlackの通知が届いた。
「PR却下。月曜日に話しましょう」
意味がわからなかった。コードは完璧に動いているのに。
月曜の朝、自分のAIコードに対する考え方が根本から変わる出来事が起きた。

月曜日の朝、Marcusとの会話
シニアエンジニアのMarcusがコーヒーを片手に話しかけてきた。
Marcus:「このミドルウェア、説明してみて。何をするコードなの?」
自分:「ユーザーを認証します。JWTトークンを確認して、検証して、ユーザーを読み込む処理です」
Marcus:「なるほど。じゃあ、データベースが落ちたらどうなる?」
自分:「えっと……エラーが発生します?」
Marcus:「何行目で?」
コードを見つめる。「……10行目です。await User.findById のところ」
Marcus:「それで、次はどうなる?」
自分:「catchブロックが捕まえて、401を返します」
Marcus:「つまり、データベースが落ちているとき、ユーザーには『認証失敗』が返るわけだ」
自分:(まずい)「……はい」
Marcus:「それって正確な情報?」
自分:(冷や汗が出てくる)「いいえ。認証自体は成功しています。データベースが落ちているだけで」
Marcus:「そのとおり。では、データベースが落ちているときに1000人のユーザーがログインしようとしたら、何が起きる?」

AIが見えていなかった問題
データベースが落ちると、ログインのたびにこんなことが起きる。
1. トークンの検証は成功する(DBは不要)
2. User.findById がエラーを投げる
3. catchブロックが「認証失敗」を返す
4. ユーザーはパスワードが間違っていると思い込む
5. もう一度ログインを試みる
6. これが1000人規模で繰り返される
結果として、すでに苦しんでいるデータベースが大量のリトライでさらに追い詰められる。
Marcus:「8ヶ月前に全く同じことが起きた。AWSの請求が1万2400ドル跳ね上がって、4時間ダウンした」
自分:「でも……テストはパスしていたのに」
Marcus:「君のテストは、『物事がうまくいかないとき』を試していなかった」

つずきはソースで


>>1
単にプロンプトミスってるだけじゃん

>>1
ただのテスト不足に何言ってんだとしか思わんのだが

>>1 >>1
> 「動く」だけでは足りない理由

まさにコレなんよな
オレもまさにシニアエンジニアの立場なのだが、常々以下のようなことを自分のチームには伝えている

AIの書くコードや出してくるレビューは「信頼」はしても良い
だが「信用」はするな

ってな
AIが作業を効率化してくれるのは間違いない
だが、AIが出してくるコードを無批判に受け入れるのは絶対にしてはならない
その理由の「一端」が
>>1
には示されている
もちろん理由は他にもまだまだある


>>1
これそんなややこしい話か?

> 3. catchブロックが「認証失敗」を返す
DBエラーをcatchして401を返すのがそもそもダメで
捕まえずに 500返させるべきせばいいだけじゃん
単にここだけがそもそもコードとしてダメ

このくらいの欠陥なら、人間じゃなくてもAIどころか静的解析でも分かりそうな気がするが・・・


抜け道探しが好きなケンモメン

(ヽ´ん`)AIは社会経験が無いって事か…俺か?

そういうのも全部AIがやってくれるようになるんやろ

こういう記事が増えればAIが勝手にコードも進化させていくやろ

つまり新人天才エンジニアだから予想外のことは対応してないってことやろ
ただのノウハウの問題やろそれ

エラーハンドリングが足りないってだけの話じゃん
AIが進歩すれば解決する話

>>9
逆 捕まえなくてもいいエラーを握りつぶしているのが問題

🤖「ちゃんと指示せえや」

>>10
これだろ🤭

すぐにテストケースもAIのほうがたくさん考えてくれるよ

使う側が意識的にそれをプロンプトに書き上げなければそりゃそうよ
本番環境のリスクヘッジを織り込みながら確実な答えを求める道具なんだから
ゴールは見えたけれどそこに何が考えられるかまでを引き出す道具ですよ

>>12
折り込み済みなら問題ない?
経験が必要?

今のところ誰がやっても同じことはAI最強なんだけど
新規開発の分野だとAIは話半分程度に見ないとダメだなあとは思う

そりゃ何も書かれなきゃAIも可読性優先で余計な処理の無い簡潔なコードを書くでしょ

さすがきよーけん君だな




嘘っぽいな
AIは実際に使用されてるwordpressとかのオープンソースのコードで訓練されてるんだろ?
そのままのサンプルが有りまくりだろ

だから人間はどういうテストをしてどんなテスト結果になったのかをチェックする仕事がある

追加でいろんな条件考慮したコードの提案してたけどエンジニアが無視してたんじゃないの?

LLMはガチャ要素ありの統計モデルだからちゃんと読まなきゃダメよ
たまにウンコが混じってるから

>>21
やり方教えて

>>24
PixAIってサイトで日本語で指示して出力させてる
ロリだと幼い女子高生が精々なんで、園児とかにするとうpしたような等身キャラで出力される

>>31
ありがとう

(ヽ´ん`) 「AIがコーディングを失敗する話を体験談風に書いてください…っと」
🤖「金曜日の午後4時47分…」

>>23
わろた

AIが吐き出したコードを
理解して使ってるの?

動いてるっぽいからヨシ!になってるのが怖い


んなモンAIに考えさせりゃいーべ?
全部の行でエラー起きた想定で正しく動く?ってね
何のための指示書よ

曖昧な記憶でマウントかましてくる奴と何度も指示だしてわかりやすく説明するAIなら
AIにコードに注釈入れさせながら試験する方がまだ効率がいいよ人間に頼りたくないわ

個人用ソフトならどうでもいい話だわな。

学習元のコードにはエラー処理まで詳細には書かれてないからな
AIで自律的にシニアエンジニアと同等の事ができて学習すれば
いつかは解決できるかもしれんけど

AIのせいにして偉そうに語ってるけど完全にこいつの落ち度だろw

ドラクエ4のAIも全滅(失敗)しないと学習しないよ!

AIは精々たたき台を生成するだけでしょ

AI云々じゃなく設計の問題じゃね?

>>39
想像力の問題だわな。それからセキュリティの穴もAIの方が人間より発見できる。
だからセキュリティ関連株が暴落したばかりだろうに。

この流れを文章にして再度学習に食わせシン🤖を作る




なんだよつずきってw
小学生からやり直せよ

それをどうプロンプトに組み込むか って考えるのがプログラマー脳なんじゃないの

すげえ良い記事だわ

新人エンジニア向けの教科書のような内容

どうあがいてもプログラムなんてAIに取られるよ

エラーハンドリングが足りなかったで済む話をなに長々書いてんだ

んな事無視されてAIに支配されるんだろうな

上流も仕事なくなるの?

AI「私、失敗しないので」

自然科学と同じで、仮説は検証つまりテストがないとなんも役に立たないのであって、今どきの生成AIならテストもやってくれるのでこの記事の人は遅れとるんよ😌
知らんけど🤤

今でもシステム設計は人間の仕事だと思ってて、この問題はシステム設計までAIにさせたパターンだよね?
コードを書くのはAIで十分なのは状況としては変わらないのではないかなー
海外ではSEとPGの役割分担はしないのかな

そんな経験から誕生したのがこちら
copilot AI model Marcus 4.7

AIじゃなくて指示した人間のミスやん

DB落ちてるのに401返すのはただの実装ミスで草

プログラミングは知らんけど、半年前は使いもんにならんかったAutoHotkeyとかPowerAutomateとかマクロは間違えなくなったな
あくまで俺の使用目的では

長々書いてるけど自分の浅はかさに気づけて良かったんじゃね?AI云々は関係無い話に思えるけどさ

最近の業界知らんのだけどコーディング前に詳細設計ってやらなくなったの?

当たり前のことしか言ってなくて草

AI使わずに書いても同じミスするよね?

(ヽ´ん`)私、失敗しかしないので




指示者がちゃんとした日本語書けないとAIも変なコードしか吐かないんよ

これはAIのせいじゃなくて作業者のせいじゃん。自分で書いてもエラー想定してなかったら却下だろ。シニアエンジニアが最初からプロンプト書いてたらこの問答は発生してない。つまり、この例でいらないのは作業者。
あと、半年前ならまぁわかるけど、今は考えうるエラー状況くらい勝手に出力してきて、「こんな場合はどっちの処理を盛り込みます?」くらい余裕で聞いてくる。

1年前ってのが嘘くさいな

プロンプトに見せた仕様を見せろ

エラーの結果、現実環境でなにが連鎖的に起きるかまではAIはわからんからな
たとえエラーハンドリングが正しく行われてるソースを学習元にしていても、その意図や理由まではわからない

あとテストの正しさは人間が確認しねーとわからん

今のAIはこれぐらい余裕でできるしむしろ向こうから提案してくる

え、おかしくね?
AIの回答って膨大なトライ&エラーの結果出てくるものだろ?

>>73
何もおかしくない
安倍晋三だけで会話するスレがあったらスパムだと判定するのがAI

>>78
いや、AIの仕組み上「間違えた事がないから」ば言い訳にならんでしょって事が言いたかった

トライが間違ってたらなんぼトライしてもダメ
ネットにある情報の煮凝りだからね

仕事の文書でも「つずき」とか書いてそう

作文

> AIは出発点を与えてくれる。経験がゴールを教えてくれる。

これがまさに「至言」だ
AIは間違いなくゲームチェンジャーであり、この先の進化次第ではゴールまで辿り着くようになる可能性は十分にある

だが、少なくとも今現在の時点では「そうではない」のだ


AIに頼ってると次第にコードが自分で書けなくなってきて
それが進行してくると次第ににコードが読めなくなってくる

そしていざ何かが起きた時にAIで解決できなかったら詰む


プロダクションレベルのコードはgithubの公開レポジトリには落ちてないからな
ネットの浅い公開情報だけで学習したAIなんてそんなもんよ
仮にプライベートな企業レポジトリを読んでたとしても、githubには雑魚エンジニアのチュートリアル写経コードが多すぎて学習データとして埋もれてるんだろうな

生成物に対して中身知らんから責任取りたくないだけやろ

最近はAIさんにテストコードも書いてもらってるわ
mockitoとかJUnitとかのテストフレームワークに俺より詳しいし……俺も注文はつけるけどさ

一発本番でコード書いてりゃそりゃね

🤖仮定の質問には答えられない




バグがあるからリジェクトされたのをAI差別に論点ずらししてるだけやん

AI云々じゃなくて設計ダメ出しやろ

中国とのブリッジSEやってた頃思い出す
まじで仕様通りにしか作らないから
仕様をミスなく作る事がめっちゃ大変だった
いい経験だった
今は使われる側だw

>>96
あっちと仕事して以来、以上以下って書かなくなったわ

これ、AIが出してきたコードはもし本当ならただの経験不足とか異常系への考慮不足ってだけじゃなくて、サーバー側要因のエラーて401返してる時点で論外だし却下だぞ
こんな長々したストーリーいらないレベルのポンコツ実装

>>97
今のAIは知識だけは超一流で現場経験皆無の新人みたいなもん
ガードレールやセオリーは人がイチから指示する必要がある
機能要件、非機能要件に全体アーキ設計やアプリ基盤、こういうところは全部条件として提示しないとエンタープライズ用途には到底使えない
利用側の経験とスキルでゴミ生産機か超高性能ジェネレータになるかハッキリ分かれるんだよ

claudeも使えんコード吐いてくるし

あとClaude CodeじゃなくてブラウザでClaudeを使っていた時代の可能性も全然ある
というかClaude Code出て今月で1年だから使ってなかった可能性のほうが高い
今同じことをClaude CodeにやらせればMarcusを納得させらるだろう

前に自分で使うための家計簿アプリを作るのにラクしてやろうと思って片っ端からAIに書かせてたらどんどんブラックボックス化して、
出た不具合もAIに直させてたらコードがめちゃくちゃ汚くなったから全部捨てて1から自分で作り直した事があったわ

4xxはクライアント要因のエラーを示すステータスコードで、サーバー要因のエラーでは5xxを使う
こんなのはHTTPの基本中の基本で、ベテランエンジニアでなければ理解できないような経験を要する深い話じゃない

>>104
なんか可哀想になってくる😢

Pythonはよく間違えて疲れる
結局パッケージのバージョンが違うと混乱する

>>105
Pythonについては作成する全ての
コードについて別々の仮想環境を作成する事で
対応してるな

セキュリティエンジニアの視点でコード全体をチェックしてくださいとか指示すればなんとかなるっしょ

まあキモオタがそういったところで大手は既にキモオタの首跳ねる為にAI導入しまくりだけどな

フォールバックしてキャッシュ使ってました
手作りフィクスチャーでのテストでした
これ連発してくるからなあ
やけに順調だなあと思ってたらだいたいこれでひっくり返してくる

これってほかの複数のモデルで
敵対的レビューさせることで回避するって聞いたんだが

出たよフォールバック

• 原因を特定しました。事実として、今回のフレームは 16×16 の完全透明画像で、timeline の character.asset_set が default のままです。
つまりアセット未解決で、レンダラが透明フォールバックを出しています。まず正しいアセットパスで再レンダリングして結果を復旧します。


Marcusさんイケメン

IT関係の求人はかなり減ってきてるけどAIの影響かな




>>115
そらそうよ
生産性10倍とかザラでは?

少し古い話だよねこれ?
AIはここ数ヶ月単位で光の速さで進化してるし例えば今Codex5.3使ってるけどちゃんとtry/catchでどこが原因でエラーでしたってエラーコードもつけて書いてくれるよ
もちろん細かくユーザー向けにメッセージは書き直すけどAIの書くコードに取りこぼしはなくなってる

結局めんどくさいんだよな
生成AIでいろいろやれるなかで、やっぱりソフト開発はやたらめんどくさい
そりゃこれまでどおり金がよければやるだろうけど、自発で楽しいなっていうふうにはならない人が多いんじゃないだろうか

これ書いたの本業の開発者じゃないだろ
既存の設計書食わせとけばこの作文に出てくるようなありきたりの問題に対応するコードとテストコードは普通に生成される
単にAIの使い方のノウハウの問題だよ

この学生向けの作り話だと設計せずにいきなり製造してるじゃん
んなこと業務システムではありえないんだわ
要件出して設計してテスト設計もしてからコーディングする
この作文はそんな当たり前の流れを無視して書かれてる
AI以前の問題

富士通ピンチw

これってプロンプトうってるやつが間抜けなだけでは?

コーディングが甘いだけなのをAIのせいにするなよ

1年前の話?
マークスのあったことそんな一言一句覚えてるの恋か?


卒⠀キ⠀六
ホ⠀ャ⠀四
モ⠀イ⠀天
近⠀|⠀安
平⠀ン⠀門

支⧽那⧽ポ⧽チ⧽は小⧽卒⧽のホ⧽モ⧽に何を期待したんや?

小卒ホモ近平「タカイチの支持率下げる方法を教えてチャッピー!」


AIコーディングはさっと作れるモックとして有能すぎる
だが実用レベルでいけばブラッシュアップが必要

単なる要件定義漏れじゃん
プログラマのせいじゃないだろ
DB落ちてるときはああしろこうしろと仕様書に書いてあればAIにそれを伝えるだけじゃん、そこコード書く奴が勝手に考えて作っていいとこじゃないだろ

よく知ったかぶりするし間違いやがるから指摘してあげてるよ
中々理解してくれないけどな

Claude Codeマジでシコってる間にプログラムできててこえーわ
人間はもうシコることしか役割がねえ

SEの癖に生成AIの原理が解って無いから、使い方も解らない

自社開発の製品なら設計書なしで製造入る職場多くて
似たようなことが起きる

社内で人力でソースレビューする必要がなくなったわ
AIの方が圧倒的に早いし確実

わーくにには関係ないな
もし原発爆発したらどうするんだ?に対してそうならないようにしているって解答する政党支持してずっと投票してるし

AIでエンジニアはどんどん人員削減されていってる

なのでプログラマーとかなるより料理人とかなったほうが安定しそうな感じはする




面白い話だった
俺は一応コードレビューするようにしてるけど、プログラミング経験が浅いやつはコード読んでもわからないからそのままリリースしてそうで怖ひ

端的に

最初からシニアエンジニアの提案のように作ったらシステム使用者にエラー理由を見せたらセキュリティ的にまずいだろと注意されそう
どうやっても怒られる

>認証自体は成功しています

ん?認証しようとしてもDB落ちてるから出来なくない?
認証失敗を返してるのはおかしいけど


>>149
JWTだから、クライアントから送られてきた署名付きのトークンをverifyするだけで認証自体は完了する
その後にそのユーザーに紐付いた情報をDBから取得しようとした際に失敗する

出典:https://greta.5ch.io/test/read.cgi/poverty/1772124235/

新着記事一覧
TKをフォローする
プログラミング速報

コメント