ChatGPTやGeminiなどのAIにプログラムを書いてもらう際、「最初は順調だったのに、途中からバグだらけで収拾がつかなくなった…」という経験はありませんか?
AIは非常に優秀なプログラマーですが、同時に「指示待ち」で「視野が狭く」、「時々サボる」という癖のある部下でもあります。彼らを使いこなすには、ただ漫然と命令するのではなく、AIの思考回路を理解した上での「操縦テクニック」が必須です。
今回は、私が実際にAIと何度も格闘し、試行錯誤の末に見つけ出した「AIプログラミングを成功させる5つの鉄則」を紹介します。
「叩き台」を作らせて、少しずつ育てる
いきなり「〇〇機能と××機能がついた、エラー処理も完璧な完成品」を作ってもらおうとしてはいけません。
まずは必要最小限の機能だけで動く「最初のプログラム(叩き台)」を作ってもらい、それが動くことを確認してから、一つずつ機能を追加していく「積み上げ方式」が最も確実でオススメです。
これはソフトウェア開発における「MVP(実用最小限の製品)開発」や「アジャイル開発」の考え方に近いですが、対AIにおいては「コンテキストウィンドウ(記憶容量)と出力限界」の観点から非常に合理的です。
AIは一度に考慮できる情報量や、一度に出力できるコードの行数に物理的な限界があります。最初から複雑な要件を詰め込みすぎると、論理的な整合性が取れなくなったり、コードの生成が途中で切れたりするリスクが跳ね上がります。
「まずは動く土台」を作り、そこに装飾を足していく手順は、AIのメモリ負荷を下げ、論理破綻を防ぐための最良の防衛策なのです。
「全コード出力」は絶対禁止! 修正箇所だけを聞き出す
AIは気を利かせて(あるいは何も考えずに)「修正コードを含めた全コード」を出力しようとしますが、これは絶対にやらせてはいけません。
長いコードを出力させると、勝手に既存の機能を省略したり、設定していた重要な数値をデフォルトに戻したりすることが多々あります。これは開発において致命傷になります。
必ず「修正コードと、修正する位置(行数や関数名)だけを教えて」と伝え、外科手術のように患部だけを書き換えるようにしましょう。
これはAI特有の「サボり癖」や「幻覚(ハルシネーション)」への対策です。
LLM(大規模言語モデル)は、長いテキストを出力する際に計算リソースを大量に消費します。そのため、長文生成の後半になると「整合性を保つこと」よりも「生成を終わらせること」にバイアスがかかりやすくなります。
その結果、「// …既存のコード… 」と勝手に省略したり、文脈を見失って変数を書き換えたりする現象が起きます。
差分のみを出力させることは、AIの計算リソースを「修正箇所の思考」のみに集中させるため、コードの品質維持に直結します。
定期的に「全コード」を見せて大掃除
追加や修正ばかりを繰り返していると、AIは「全体像」が見えなくなり、すでに存在する関数をもう一度作ったり(重複)、使っていない変数を残したりと、コードがぐちゃぐちゃになってきます。
そこで、定期的に「現在の全コード」をAIにコピペして見せ、「重複や使っていない関数がないかチェックして」と依頼しましょう。つぎはぎだらけのコードを一度整理整頓させるのです。
チャット形式のAIとの会話が長くなると、「コンテキストの希薄化」が起こります。AIは過去のやり取りをすべて「記憶」しているわけではなく、一定のトークン数(文字数)を超えると古い情報から忘れていきます(あるいは優先度が下がります)。
その結果、初期に定義したルールを無視したり、全体構造と矛盾するコードを書き始めたりします。
定期的に最新の全コード(=正解データ)を再入力することは、薄れかけたAIの記憶をリフレッシュし、「今の全体像」を再認識(グラウンディング)させるために不可欠なプロセスです。
ドツボにハマったら「新しいAI」へ相談する
バグや不具合が起き、AIに修正コードをもらっても直らない。エラー内容を伝えて再度修正しても、また別のエラーが出る…。こうなったら、完全にドツボにハマっています。これ以上同じチャットで粘っても時間の無駄です。
解決策はシンプルです。
「新しいチャット(New Chat)」を立ち上げ、全コードを見せて「この不具合が直らない」と質問すること。驚くほどあっさり解決することが多いです。
AIには「注意機構(Attention Mechanism)」という仕組みがあり、直前の会話の流れ(文脈)に強く影響を受けます。
一度「このロジックで動くはずだ」という間違った前提で回答を生成し始めると、その後の修正案もその「間違った前提」に引っ張られ続けます(これを確証バイアスに近い状態と捉えても良いでしょう)。
「新しいチャット」を作ることは、この「誤った文脈への過度な注目」を強制リセットすることを意味します。真っ新な頭脳でコードを見ることで、前のチャットでは見落としていた単純なミスに気づけるようになるのです。
AIは「頑固者」。人間が別の視点を与える
AIは一度「一つの方法(アルゴリズムやライブラリ)」を提示すると、それしか方法がないかのように振る舞う頑固者です。たとえそれが非効率でも、無理やりその方法で突き進もうとします。
ここで「別のライブラリを使ってみたら?」「この処理はサーバー側でやるべきでは?」といった「別の視点からのアプローチ」を示してあげるのは人間の役目です。
AIは何でも出来ますが、頑固なので、やはり最終的には柔軟な人間の頭脳が必要なのです。
AI(LLM)の本質は「次にくる確率が最も高い言葉を予測するマシン」です。最初に選んだ方針が「確率的にありそう」だと判断すると、そこから外れた(しかし実は最適な)独創的なアプローチを自ら提案するのは苦手です。これを「局所解(Local Minimum)に陥る」と言います。
AIは「コーディング(How)」は得意ですが、「設計や方針転換(What/Why)」は人間ほど柔軟ではありません。
「コードを書く手」はAI、「道筋を決める頭」は人間。この役割分担こそが、AIプログラミングの真髄です。
まとめ
AIを使ってプログラムを書くことは、魔法の杖を振ることではありません。むしろ、「優秀だが、指示出しにコツがいる部下のマネジメント」に近いです。
小さく始めて(叩き台)
余計なことはさせず(全コード出力禁止)
定期的に状況を整理し(全コード共有)
ダメなら担当を変え(新規チャット)
方針は人間が決める(別アプローチの提示)
この5つのコツを意識するだけで、AIが吐き出すコードの品質は劇的に向上し、開発スピードは何倍にもなるはずです。ぜひ試してみてください!