はじめに
うーむ、久しぶりにこんな技術ネタでブログを書くことになった。最近のAIコーディングブームに乗っかって、いろいろ試してみたんだが、結果的に時間を大量に無駄にしてしまった話をしたいと思う。
そして、その過程で発見した「プロジェクト完成度の法則」について語ってみたい。これは、AIコーディングに限らず、すべての開発プロジェクトに当てはまる重要な法則だと思う。
まあ、アクセス数も増えてきているし、こういう実体験ベースの話も需要があるんじゃないかと思うんだよね。
プロジェクト完成度の法則を実証する体験
この法則を実感したのは、以下のような体験からだった。
パターン1:0%スタート(失敗例)
「ブログシステム作って」とAIに頼む
↓
いかにもそれっぽいコードが出力される
↓
実際に動かそうとするとエラーの嵐
↓
修正に修正を重ねるが、新しい問題が次々発生
↓
結果:何日も格闘して結局使い物にならない
パターン2:100%完成プロジェクトの活用(成功例)
既に動いているオープンソースプロジェクトをベースにする
↓
AIに「この機能を追加して」と依頼
↓
既存の構造に沿った修正案が提示される
↓
結果:短時間で安定した機能追加が実現
この違いは何か?土台の有無なんだよね。
なぜAIは「雪の家」しか作れないのか
AIコーディングの本質的な問題は、パクりコードの寄せ集めだということ。GitHubにあるコードや、Stack Overflowの回答、チュートリアルサイトのサンプルコード...そういうのを適当につなぎ合わせてるだけ。
だから、全体としての整合性がない。
例えば:
- フロントエンドはReact(の古いバージョン)
- バックエンドはFlask(セキュリティガバガバ)
- データベースはSQLite(本番環境に不適)
それぞれは動くかもしれないけど、組み合わせた時の整合性なんて考えてない。
しかも、AIって「高機能にしよう」とする傾向があるから、こっちは「簡単なブログシステム」って言ったのに、勝手にユーザー認証機能、コメント機能、管理画面、メール通知機能...なんでもかんでも付けてくる。
結果、複雑すぎて自分でも理解できない「雪の家」の完成。
イメージで言えば「子供のお遊び」レベル。試験的なものとか、とりあえず見かけ上動いているデモとか、そういうレベルなら全然イイんだけどね。本格的な開発には使えない。
ワンショットコードの現実
結論から言うと、AIがワンショットで出してくるコードで、そのまま動くものなんてほぼない。たまに動くとしても、それは本当に簡単なものか、運が良かっただけ。
「Hello World」レベルなら動くかもしれないけど、実用的なアプリケーションを作ろうと思ったら、結局は自分で書き直すことになる。それなら最初から自分で書いた方が早いんじゃないか?って思うよね。
発見:プロジェクト完成度の法則
数ヶ月間のAIコーディング格闘を通じて、重要な法則を発見した。これを「プロジェクト完成度の法則」と呼んでいる。
【プロジェクト完成度の法則】
- 100%完成しているプロジェクト → そのまま完成度高いレベルで使える
- 0%から始めるプロジェクト → AIでの成功率は0%
この法則は、家の建築に例えるとよく分かる。
雪で作った家は気温で溶ける。泥の家も雨で崩れる。でも、鉄筋コンクリートの家は台風が来ても大丈夫。AIが生成するコードは、見た目は立派だけど、構造的には「雪の家」「泥の家」レベルなんだよね。
つまり、屋台骨ができるまでは自力でやらないとダメ。やっぱり家と一緒だよねえ。
ゴミコードリポジトリの完成
気がついたら、自分のGitHubリポジトリには、「何か分からん状態で大量ゴミぶら下げて動いているプロジェクト」が量産されていた。本当に情けなくなるよ...
コミットログを見ると、「AI生成コード追加」「修正1」「修正2」「また修正」「やっぱり書き直し」みたいな感じで、まともな開発の軌跡が全然ない。
プロジェクト完成度の法則に基づく正しい開発戦略
この法則を理解してから、開発戦略を根本的に見直した。
鉄筋コンクリートの家を建てる手順
STEP1:自力で屋台骨を構築(0%→30%)
- プロジェクト構造の設計
- 基本的なアーキテクチャ
- コア機能の実装
- セキュリティ設計
STEP2:機能別スニペット集で補強(30%→80%)
- データベース接続のスニペット
- ユーザー認証のスニペット
- APIエンドポイントのテンプレート
- フロントエンドのコンポーネント
STEP3:AIに細部の作業を依頼(80%→100%)
- テストコードの自動生成
- ドキュメント作成
- コードレビュー
- バグの原因調査
完成度別:AIとの適切な付き合い方
0%-30%(構築期):AIに依存してはダメ
- 全体設計は自分で考える
- コア機能は自分で実装
- セキュリティは自分で設計
30%-80%(成長期):選択的にAIを活用
- 動作が確認できる小さな機能単位で利用
- 既存コードとの整合性を常にチェック
- 必ず自分でテストしてから組み込む
80%-100%(仕上げ期):AIに丸投げOK
- 動かない原因調査とか、そういう難解な作業
- テスト自動化
- ドキュメント整備
- メンドクサイものはAIに丸投げがベター
プロジェクト完成度の法則が教えてくれること
この法則から分かるのは、ある程度プログラム経験者なら理解できる重要な真実:
結局、最初からAI提案のものは「どっかのパクりコードの寄せ集め」に過ぎない。ワンショットで出されたコードは、ほぼ動かないと考えた方がいい。たまたまラッキーなものや、難易度の低いものは可能だが、それは例外。
気がついたら、自分のGitHubリポジトリには「何か分からん状態で大量ゴミぶら下げて動いているプロジェクト」が量産されていた。本当に情けなくなるな...
でも、この経験も無駄じゃなかった。プロジェクト完成度の法則を発見できたからね。
これからのプログラミング学習
これから何年かこの業界にいると思うけど、やっぱり基本的なプログラミング能力は必要だと思う。AIがコード書いてくれても、それを読んで理解できなかったら意味がない。
特に、ある程度のプログラム経験者なら、AIが生成したコードの問題点は分かってくると思う。逆に、初心者がいきなりAI使ってコード書こうとすると、もっと大変なことになりそう。
「AIがあるから勉強しなくていい」じゃなくて、「AIを使いこなすために基本を学ぼう」って考え方の方が建設的だよね。
まとめ:プロジェクト完成度の法則を活用しよう
【プロジェクト完成度の法則】
- 100%完成 → 完成度高いレベル
- 0%スタート → 成功率0%
この法則を理解して、適切にAIを活用すれば、開発効率は格段に向上する。雪の家じゃなく、鉄筋コンクリートの家を建てよう。
屋台骨は自力で。細部はAIと協力で。面倒な作業はAIに丸投げで。
この使い分けができれば、AIコーディングも怖くない。また面白いネタがあったら書いてみるつもりです。