AIが提案するコード、信じていい? AIのミスを見抜くための審美眼
Pythonをブラウザで実行しながら実践的に学ぶ
Pythonの基礎からソフトウェアアーキテクチャ,アルゴリズムなどの応用的な内容まで幅広く学べます。
ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。
2026年現在、プログラミングの世界は劇的に変化しました。 ChatGPTやCursor、GitHub CopilotといったAIツールを使わずにコードを書くエンジニアは、今や少数派かもしれません。
しかし、AIが生成したコードをそのままコピー&ペーストして、後で痛い目を見たことはありませんか?
AIはあくまで超高性能な予測マシンに過ぎないからです。
今回は、AIが提案するコードの「嘘」を見抜き、自分の力で正解へと導くための審美眼についてお話しします。 エンジニア歴10年の私が現場で培った知見をもとに、AIとの賢い付き合い方を深掘りしていきましょう。
AIがコードを「間違える」根本的な理由¶
なぜ、最新のAIであっても完璧なコードを出力できないのでしょうか。 その理由は、AIがコードの意味を理解しているわけではないという点にあります。
AIは膨大な学習データから、次に続く可能性が高い文字の並びを確率的に予測しているだけです。 そのため、もっともらしい顔をして、実際には存在しないライブラリや関数を提案することがあります。
学習データの鮮度とハルシネーション¶
AIの学習データには締め切りがあり、最新のアップデート情報を追い切れていないことが多々あります。 昨日リリースされたばかりの新機能について尋ねても、古い仕様に基づいた回答が返ってくるのはそのためです。
また、情報が不足している場合に、AIが架空の情報を生成してしまうハルシネーションも無視できません。 初心者の方は特に、AIの自信満々な回答を鵜呑みにしてしまいがちなので注意が必要です。
【関連記事】ChatGPTやCursorに頼りすぎてない?「AIに書かせる」から「AIとペアプロする」への思考転換
文脈の読み取り限界¶
AIは私たちが作ろうとしているシステムの全体像を、完璧に把握しているわけではありません。 断片的なプロンプト(指示)に対しては、その場しのぎの動くだけのコードを返しがちです。
たとえそのコードが単体で動作しても、既存のシステムに組み込んだ途端にエラーを引き起こすこともあります。 これは、AIがプロジェクト固有の設計思想や命名規則までは汲み取れないために起こる現象です。
ベテランエンジニアが考えている違和感¶
私はこれまで、数え切れないほどのバグと向き合い、多くのコードレビューを行ってきました。 その経験から言えるのは、良いコードには独特のリズムや美しさがあるということです。
AIが書いたコードを見たとき、ベテランエンジニアは一瞬で何かおかしいと直感することがあります。 その違和感の正体を知ることで、あなたの審美眼は飛躍的に向上するはずです。
冗長すぎるロジックと不自然な命名¶
AIは時に、非常に単純な処理を驚くほど複雑なコードで実現しようとすることがあります。 必要のないループを回していたり、標準ライブラリで完結する処理を自作していたりするケースです。
また、変数名や関数名が文脈にそぐわないほど一般的すぎたり、逆に説明的すぎて長すぎたりすることもあります。 こうした不自然さは、AIが今、この場所で求められている最適解を完全には理解していない証拠です。
エッジケースへの配慮不足¶
AIが提案するコードの多くは、ハッピーパスと呼ばれる、最も理想的な状況のみを想定しています。 しかし、実際の開発で重要なのは、データが空だった場合や通信が途切れた場合などの例外処理です。
AIにファイルを読み込むコードを書いてと頼むと、ファイルが存在しない場合の処理が抜け落ちていることがよくあります。 こうしたもしもの視点が欠けているコードは、本番環境で致命的なバグの原因となります。
AIが生成しがちな「罠」を含むコード例¶
実際に、AIがよく出力する動くけれど問題があるコードを見てみましょう。 Pythonでリストに要素を追加するだけの簡単な関数を例に挙げます。
以下のコードには、Python初学者が非常にハマりやすい罠が仕掛けられています。 どこがおかしいか、あなたには分かりますか?
# AIが提案しがちな、一見正しそうで問題のあるコード
def add_user_to_list(name, user_list=[]):
user_list.append(name)
return user_list
# 1回目の呼び出し
print(add_user_to_list("田中")) # ['田中'] と表示される
# 2回目の呼び出し
print(add_user_to_list("佐藤")) # ['田中', '佐藤'] と表示される!?
このコードの問題点は、デフォルト引数に可変オブジェクトを指定していることです。 Pythonでは、デフォルト引数は関数が定義された時に一度だけ評価され、その後はずっと使い回されます。
その結果、2回目に呼び出した時、1回目のデータが残ってしまうという奇妙な挙動が発生します。 AIに指示を出すと、稀にこのような言語仕様の落とし穴を平然と踏み抜いたコードを出すことがあるのです。
正しい書き方は、以下のようになります。
# 審美眼を持って修正したコード
def add_user_to_list(name, user_list=None):
if user_list is None:
user_list = []
user_list.append(name)
return user_list
このように、Noneを使って関数内部でリストを初期化するのがPythonの定石です。 AIの出力をそのまま信じるのではなく、言語の特性を理解して修正する力こそが、今のエンジニアに求められています。
人間とAIの得意・不得意を比較する¶
AIを敵対視するのではなく、それぞれの特性を理解して適材適所で活用することが大切です。 以下の表に、人間とAIのコード作成における傾向をまとめました。
| 特徴 | AIが得意なこと | 人間(エンジニア)が得意なこと |
|---|---|---|
| スピード | 数秒で数百行のコードを生成できる | 思考や調査に時間がかかる |
| 正確性 | 文法エラーは少ないが、論理ミスが多い | 言語仕様や設計に基づいた正確な判断 |
| 最新情報 | 過去の学習データに依存し、最新版に弱い | 最新のドキュメントを読み、適用できる |
| 文脈理解 | 指示された範囲内でのみ機能する | システム全体の整合性や将来性を考慮できる |
| エラー対応 | 定型的なエラー修正は得意 | 未知の複雑なバグの原因究明と対策 |
この表を見ると、AIは下書きを作るのには最適ですが、最終的な検品は人間が行うべきだと分かります。 AIを部下やアシスタントとして扱い、あなたが責任者としてチェックする体制を整えましょう。
審美眼を鍛えるための3つの習慣¶
AIのミスを見抜く力は、一朝一夕には身につきません。 日々の学習の中で、意識的に以下の3つの習慣を取り入れてみてください。
これらを繰り返すことで、AIが書いたコードの良し悪しが直感的に判断できるようになります。
1. 公式ドキュメントを「一次ソース」にする¶
AIが教えてくれた関数の使い方が本当に正しいか、必ず公式ドキュメントで確認する癖をつけましょう。 ネット上の古い記事やAIの記憶よりも、公式サイトの情報が常に最も正確で最新です。
最初は読むのが大変かもしれませんが、公式ドキュメントに慣れることは、エンジニアとしての格を上げます。 AIがこう言っているからではなく、ドキュメントにこう書いてあるからと言える強みを持ちましょう。
2. 「なぜ動くのか」を一行ずつ説明する¶
AIが出したコードを動かして満足するのではなく、すべての行に対して自分の言葉で説明を試みてください。 もし説明できない行があれば、そこがあなたの理解が不足している部分であり、AIに騙されるリスクがある場所です。
一行ずつ解読していく過程で、AIが仕込んだ無駄な処理や不自然な記述に気づくことが増えていきます。 この地道な作業こそが、コードに対する深い洞察力を養う最短ルートです。
【関連記事】バグを出す前に例外を予見する!不測の事態に強いエンジニアの思考プロセスとは?
3. テストコードを自分で書く癖をつける¶
AIにコードを書かせたら、セットでそのコードが正しく動くか検証するテストも用意しましょう。 ただし、テストコード自体もAIに書かせる場合は、そのテスト内容が妥当かを厳しくチェックする必要があります。
意地悪なデータを入力しても壊れないか、自分の手で小さな実験を繰り返してみてください。 テストをパスして初めて、そのコードは信じても良いコードへと昇格します。
AI時代のエンジニアに求められる「真のスキル」¶
かつてエンジニアに求められたのは、構文を暗記し、一文字のミスもなくタイピングする能力でした。 しかし、これからの時代に求められるのは、提示された膨大な情報の中から正解を選び取る力です。
AIはあなたの能力を拡張してくれる強力な武器ですが、それを使いこなす知性がなければ宝の持ち腐れです。 コードを書く作業はAIに任せても、コードを考える責任を手放してはいけません。
思考をアウトソーシングしない¶
AIに頼りすぎると、自分で考える力が徐々に衰えていくという懸念があります。 AIがやってくれるから、仕組みは知らなくていいという考え方は、技術的な成長を止めてしまいます。
便利なツールを使いつつも、裏側で何が起きているのかを探求する好奇心を持ち続けましょう。 その探求心が、AIには到達できない深いエンジニアリングスキルへと繋がります。
クリエイティビティと責任感¶
AIは既存のデータの組み合わせから答えを作りますが、全く新しい概念や画期的な解決策を生み出すのは苦手です。 ユーザーが本当に求めている体験や、ビジネスの課題を解決するためのアーキテクチャ設計は、人間にしかできません。
そして、最終的にそのコードが引き起こした結果に対して責任を持つのも、AIではなく人間です。 AIが書いたからという言い訳が通用しないプロの世界で、誇りを持ってコードを届けましょう。
まとめ:AIと共生し、一歩先のステージへ¶
AIが提案するコードには、常に間違いが含まれている可能性があるという前提で向き合いましょう。 その上で、AIのスピード感と人間の審美眼を組み合わせれば、これまでにない速さで成長できるはずです。
最初はミスを見抜くのが難しいかもしれませんが、コードを読み込み、公式ドキュメントに触れるうちに、必ず違和感に気づけるようになります。 AIを賢く使いこなし、技術を心から楽しめるエンジニアを目指していきましょう。
もし、Pythonの学習で行き詰まったり、AIの回答が理解できなかったりしたときは、基本に立ち返ってみるのも一つの手です。 当サイトでは、初心者の方が本質を理解するための記事をたくさん用意しています。
あなたのプログラミングの旅が、AIという最高の相棒と共に、より豊かなものになることを願っています。