AIでのコード作成を三年間経験して、ついに一つのことを学んだ

Dev.to / 2026/3/13

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisTools & Practical Usage

要点

  • AI生成のコードは見栄えが良いが、テストや本番環境で失敗することがあり、紙の上の完全性と実際の挙動のギャップを示している(例: <code>undefined is not a function</code>)。
  • 本記事は、AIが初心者開発者の学習の階段をプロンプト提示へ置換し、デバッグやシステムのメンタルモデルを構築する機会を減らすと主張している。
  • Drift to Determinism(DriDe)を提案している。新しい問題をAIで解決したら決定論的な手順をツール化し、次に同様の問題に直面した際にツールを先に使い、トークンベースの失敗を最小化してループさせる。
  • 実務的な教訓として、AIを活用して新しい問題を解決した後はツール優先・決定論的なアプローチを採用し、時間とともに「AIをプロセスから排除する」ことを目指す。

あるいは、完璧なコードを見直して突然午前3時に目が覚めた理由

夜遅い時間。画面が光っている。

AIが生成したコードの一部をじっと見つめた。

そのコードは美しかった。構造は整然としており、命名は優雅で、コメントは詳しかった。採点教師の目には、完璧なエッセイのようだった。

それからテストを走らせた。

undefined is not a function

第1章: 完璧の幻

AIは、満点を取る新卒者のようにコードを書く――理論上は完璧だが、実践ではゼロだ。

それはすべてのデザインパターンを暗唱できるが、なぜそれらを使うのかを理解していない。各行の構文は知っているが、深夜3時の本番環境でその行が何をするのか全く見当がつかない。

  • 'Save Lease Agreement' は 'Rescue the Lease' に翻訳された(誰がリースをさらったのか?)
  • テンプレート文字列の変数が失われ、undefined となった
  • 重要な財務リマインダーが完全に省略された

AIはタイピングを節約した。だが思考を節約できなかった。

その一文はラムダスクールの授業料10回分に相当する。

第2章: 消えたはしご

ダニエル・ンワネリはより直接的に述べた。ジュニア開発者は絶滅したわけではない――彼らはAPIの下に閉じ込められている。

ジュニア向けの古い学習パス:

ユニットテストを書く → システムが壊れる原因を理解する → バグを修正する → デバッグの直感を磨く → レベルアップ

今は:

AIはユニットテストを書く → AIがバグを修正する → ジュニア開発者... 見ている?

その梯子は削除された。

結果として、片方の端にはAIを使う10倍の超ベテラン開発者がいる。もう一方には、プロンプトは出せるがデバッグはできない人々がいる。真ん中が消え去った。

両端がまだ立っている橋のように、中間部だけ崩落した。

第3章: DriDe — Drift to Determinism

GrahamTheDevは興味深い概念を提案した。Drift to Determinism (DriDe)

核心哲学:

  1. 新しい問題を解くためにAIを使う(トークンを消費する)
  2. 分析する: コードで決定論的に解決できる手順はどれか?
  3. その手順をツールへ固める
  4. 次に同様の問題に直面したときは、まずツールを使い、AIを呼ぶ
  5. プロセスからAIを排除できるまでループする

彼の金言:

LLM が出力するすべてのトークンは、故障のポイントである。

考えてみてほしい。もしワークフローが10,000のステップを持つ場合、たとえ99.999%の精度のLLMでも、最終結果はわずか90%正しいだけだ。

ビジネスでは、90%の精度は訴訟と倒産を意味する。

第4章: 新しいスキルツリー

では、2026年に開発者が必要とするスキルは何だろうか?

旧スキルツリー(廃止予定):

  • ✅ コードを書く
  • ✅ コードをデバッグする
  • ✅ アーキテクチャを設計する

新しいスキルツリー(必須):

  • AIコードを監査する(コードを書くより重要)
  • AIの幻覚を認識する(それは自信はあるが間違っている)
  • システムを全体として理解する(AIは局所的にしか見えない)
  • 検証 > 生成

面接の質問が変わった:

Old: ReactでTodoアプリを作成する(AIが30秒で生成する)

New: 500行のAI生成ペイメントゲートウェイコードです。テストは通る。しかしログには取引の3%が失われている。30分で問題を見つけてください。

第5章: A Practical Suggestion

最近、AIツールの組み合わせを探求していて、興味深いパターンを発見した:

AIに最初にテストを書かせ、それからコードを書かせる。

これはTDDではなく、TDD 2.0 — Test-Driven AI Development(テスト駆動AI開発)です。

Steps:

  1. 欲しい機能を説明する
  2. AIにまずテストケースを書かせる(エッジケースを含む)
  3. テストケースをレビューする — ここでAIの理解のギャップが最も露呈する
  4. AIにテストをパスするコードを書かせる
  5. あなたがコードをレビューする

Why does this work?

テストはAIが要件を理解したことの「翻訳」です。テストが間違っていれば、コードは間違いになります。さらに、テストはコードよりもレビューが容易です。

Epilogue: The Truth at 3 AM

冒頭の話に戻る。

あの undefined is not a function エラーの原因は?

AIは非同期関数を同期的な関数呼び出しとして扱った。

3秒の修正。

しかしこのエラーを発見するのに30分かかった。

AIはコードを書く時間を節約したが、レビューコストを桁違いに増やした。

これは何かを思い出させる。

AIを恐れるべきではない。しかし、私たちが構築するシステムの複雑さを尊重すべきだ。

AIはコ・パイロットだ。あなたがキャプテンだ。

飛行機が乱気流に見舞われたとき、コパイロットは緊急会議には出席しない。

あなたがやる。

About the Author

AI開発ツールに興味があるなら、実用的なリソースとツールのレビューを miaoquai.com で共有しています。

広告ではありません — 本当に役に立つと感じたので共有しています。