エンジニアが生成AIを扱うときに気をつけたいこと
エンジニアが生成AIを扱うときに気をつけたいこと
最近では、ChatGPTやGitHub Copilot、Cursorなどといったツールを使ってコーディングを行うのも珍しくなくなりました。生成AIが、エンジニアの開発現場にも着実に浸透しており、コーディングにおいても身近なツールになりつつあります。
ただ、非常に残念なことに、一部の開発者の中には、AIが吐き出したコードや文章をそのままコピー&ペーストして使ってしまうケースも見受けられます。
先日、こんなことがありました。
ある新人が「ログイン処理のコードがうまく書けません」と相談してきたので、どんな実装をしているのか見てみたところ、生成AIから出力されたコードがそのまま貼られていました。そこには、ユーザー名とパスワードをPOSTで受け取って、そのまま平文でファイルに書き出すような処理が含まれていたのです。
username = request.form["username"]
password = request.form["password"]
with open("log.txt", "a") as f:
f.write(f"{username}:{password}\n")
見た瞬間、思わず絶句しました。平文のパスワードをログに保存するなど、情報セキュリティ上は完全にアウトです。本人は「動いたので大丈夫かと…」と答えていましたが、その「大丈夫」がどれほど危険か、本人はまったく理解していなかったのです。
便利だからといって生成AIの出力を鵜呑みにするのは非常に危険です。本記事では、私自身が生成AIの導入が進む開発現場で感じたことを率直に記述するとともに、正しい生成AIとの向き合い方について、真剣に考えてみたいと思います。
なお、先に明言しておきますが、開発現場に生成AIを導入することに関しては、私もAIエンジニアとして大賛成の立場です。ただ、その中で、「注意しておかないと大変なリスクに繋がる」と思う場面が多々ありますので、今回記事にまとめておこうと筆をとった次第です。
生成AIの出力をそのまま使うことの危険性
まず押さえておくべきは、AIが生成したコードや回答には思わぬ落とし穴が潜んでいるということです。
以下に、その主な例を挙げます。
- バグや誤りの混入: 生成AIは一見もっともらしい回答をしますが、必ずしも正確ではありません。コードのロジックに微妙なバグが含まれていたり、要件を満たしていないケースもあります。AIが出力したコードを理解せずに使えば、バグ修正に余計な時間がかかったり、原因不明の不具合に悩まされる可能性が高まります。
- セキュリティ上のリスク: AIが生成するコードは、しばしば基本的なセキュリティ対策が抜け落ちています。例えば入力値の検証やアクセス制限、認証・認可といった重要な処理が含まれずにコードが提示されることがあり、そのまま使うと深刻な脆弱性を生む恐れがあります。攻撃者にとって格好の的となり得るコードを、知らずに自分のアプリに組み込んでしまう危険があるのです。
- 著作権・ライセンス問題: 生成AIが提供したコードや文章が、実は既存のオープンソースや他者の著作物からの無断流用だった、というケースも考えられます。生成AIはインターネット上の掲示板や公開リポジトリなどのコードで学習しているため、出力が第三者の著作権を侵害している可能性はゼロではありません。その結果生じる責任は、最悪、生成物を使用したエンジニア自身が負うことになるかも知れません。
- チームからの信頼喪失: コードをレビューする先輩や同僚は、あなたが提出したコードを見れば、その意図や理解度を汲み取ろうとします。もしAIから得たコードを丸写しして提出すれば、表面的には動いていても「この人は自分で考えずに安易にコピペしているのではないか」という疑念を招きます。実際、「AIが書いたコードをそのまま使うのは、典型的なコピペ問題と同じだ」という指摘もあります。チーム開発では信頼が何より大切です。安易なコピペは、問題発生時に自分で説明や対処ができないだけでなく、周囲からプロ意識を疑われる行為なのです。
私の勤める現場にも、先日、こんな事件がありました。
実装方針をチャットで新人に聞いたところ、まともに考えているように見えてそうではない回答が返ってきました。どうにも前提条件や期待される挙動が、本人の回答からは抜け落ちているのです。
たとえば、「複数ファイルをアップロードしてサーバーに保存する機能をどう実装するつもりか」と尋ねたところ、
「request.filesで全部取得してfor文で保存します」
という答えが返ってきました。一見、やりたいことは分かるのですが、重要な点がいくつも曖昧なままです。
- ファイル名の衝突が起きたらどうするのか?
- 拡張子チェックやサイズ制限は必要か?
- 同時にアップロードされた数百ファイルはどう扱うのか?
- 保存先のパスはユーザーごとなのか共通なのか?
そうした仕様面の整理や、セキュリティ・運用上の前提が何も言及されていませんでした。
いざ、それを確認すると、本人からは、
すみません。とりあえず生成AIに聞いて、それをそのまま送ってただけです。
と、恐ろしい回答が返ってきました。なぜその実装方針が妥当なのか、何を考慮すべきで、何を考慮するべきではないのか――そうした基本的な検証を行っていないことが露呈した瞬間でした。
「理解していないコード」の危険性
生成AI頼みは「理解していないコード」のリスクに直結しやすい問題です。
数年前、まだ生成AIによるコーディングなど存在していなかった時代、「プログラミングなんてググってコピペしてれば何とかなる」と豪語する人間は常に一定数いました。そしてそういうタイプの人間は、例外なく早いうちに淘汰されてきました。
理由は明快です。自分で考えない人間は、成長しないからです。そして、トラブルが起きたときに自分で原因を追えず、周囲の足を引っ張ることになるからです。
生成AIは、そんな「コピペ志向」の人たちにとって一見便利な道具に見えるかもしれません。でも、それはむしろ “成長しないまま生き延びようとする”危険な依存先 にもなり得ます。
多くの先輩エンジニアたちは、そんな「見せかけだけの理解」によって痛い目にあった人たちの末路を、何度も目にしており、以下のように深刻な結果となって返ってきます。
- 理解していないコードはすぐに露呈する: レビューやペアプログラミングで質問されたとき、理解せず貼り付けたコードは説明ができません。指摘に対して「なぜこの実装にしたのか」と問われ、答えに窮すれば信頼は一気に揺らぎます。「動けばいい」という姿勢は短期的には楽かもしれませんが、そのツケは必ず自分に返ってきます。
- 成長の機会を逃す: コピペに頼っていては、エラーの原因究明や設計の工夫といったエンジニアとして成長できる場面で思考停止に陥ります。複雑なバグに直面しても太刀打ちできず、結果として「任せられる仕事が限定される」「重要なポジションを任されない」といった評価にもつながりかねません。最悪の場合、「この人はAIがないと何もできないのでは」と見做されてしまう恐れもあります。
実は、私もコードレビューやディスカッションの中で、「ああ、この子は理解していないな」と感じた際、「あ、もう開発はしなくていいよ」と、彼に任せたタスクをすべて巻き取った経験があります。
もちろん、誰でも最初は分からないことだらけです。それ自体は責められることではありません。ただし、「理解していないまま分かったフリをすること」「AIの出力を理解せず使っていること」――これが明らかになると、任せられる仕事は急激に減ります。それは、自身の成長機会を奪うことにもつながるのです。
そうして失われた評価や信用は、その後のキャリアに大きく影響します。先輩エンジニアほど、「最終的に自分の頭で考え抜く力が大事」だと知っているのです。
AIはあくまで思考を支える道具
では、我々エンジニアは生成AIとどう向き合えば良いのでしょうか。
ここまで、厳しい意見を列挙しましたが、私は決して「コーディングに生成AIを使うな」とは言っていません。 むしろ、積極的に使うべきという立場です。
その上で、答えを言いますと、AIを相棒(アシスタント)として扱い、自分の頭で考えることを放棄しないことです。 生成AIから得られる提案やコード片は、あくまで“たたき台”です。100%自動で正解を出してくれる魔法の箱ではありません。むしろ 「AIが出力したものは必ず人間がチェックする」 という前提で活用すべきです。
以下、具体的な心得を述べます。
- 必ず自分で検証する: AIが出力したコードは、そのまま動かす前に必ず内容を精査しましょう。動作確認や単体テストを行い、意図した挙動になっているか、セキュリティ上問題がないかを確認します。人間のレビューを必ず通すことも習慣にしてください。
- 背景を理解する: 提案された解法やコードの背景にある原理・概念を学ぶようにしましょう。ただコードを写すのではなく、「なぜそう書くのか」「他に方法はないか」を考える習慣が重要です。公式ドキュメントや信頼できる情報源にもあたり、AIの回答を裏付けることがプロの姿勢です。
- 自分の言葉で説明できること: AIから得たコードでも、自分自身で咀嚼し、チームに説明できるレベルまで理解しましょう。もし説明できない部分があれば、それはそのコードを使うべきではないというシグナルです。説明できる=理解している、ということですから、理解できていないコードは採用しない勇気も必要です。
AIは先生ではない。勉強を放棄してはいけない
生成AIは非常に便利な道具ですが、それは“先生”ではなく“辞書”や“補助輪”のようなものです。辞書を引いても意味が分からない単語は、自分で調べて理解するしかありません。それと同じで、生成AIから出てきたコードや解法も、自分自身で検証し、背景を理解し、血肉化する必要があります。
生成AIで作成したコードを、自分の目できちんとレビューし、自分の頭で設計と照らし合わせ、バグを見つける習慣をつけてください。それは面倒なように見えて、必要なプロセスです。
さらに、基本的な勉強をすることを忘れないでください。 コーディングや実装方針のベースになるには、あなた自身の知識と経験です。データベースを扱ったことのない人間には、効率的なクエリの書き方は判断がつきませんし、Webセキュリティに馴染みがないと、コードの安全性やリスクの評価もできません。
地道なように見えて、自分の知識を磨いていくことは、生成AIの出力を評価するための強力な武器になり得ます。
誰もが「まだ分からないことだらけ」からスタートします。でも、だからこそ「自分で勉強する姿勢」だけは、どんなツールよりも大切なのです。
おわりに
生成AIの登場によって、エンジニアの開発スタイルは大きく変わり始めています。新しいテクノロジーを受け入れ活用すること自体は素晴らしいことですが、それに溺れて自分の考える力を失ってしまっては本末転倒です。
我々エンジニアは、「AIは便利な助手だが、最終的に責任を持つのは自分」という意識を強く持つ必要があると思っています。
周囲からの信頼も、良いコードも、自らの手で積み重ねるものです。生成AIを上手に使いつつ、自分の頭で考え抜くエンジニアとして成長していきましょう。
Discussion