🐣

駆け出しエンジニアが仕事でchatGPTを使うときにやりがちなミス

2024/06/08に公開

はじめに

少し煽り気味のタイトルにしてみたが、駆け出しエンジニア(特に未経験からの人)の目に止まって欲しい一心なので許して欲しい。

できている人は当然のように実践している内容だと思うので、1セクションくらい見てみて、「そんなやつおらん」と思うかもしれない。
それでも一応最後まで見てほしい。
当たり前に見えるけど、これが不思議なことに、気を抜くと意外とやっちゃいがちなのである。
自分をもこうなっちゃう可能性もあるので、備忘録としての意味もある。

自分もまだ駆け出しだし、「その程度の知識で言うな」とか「いや、もっとこうしてほしい」と言う意見もあると思う。
それはコメント欄にお願いします。

セキュリティリスクを意識できてない

chatGPTにいきなり直接コードを載せていないだろうか?
それやばいかも。

ソースコードがオープンな場合はいいけれど、基本的にはソースコードは資産なので
流出する可能性があることは避けなくてはいけない。

流出の可能性をなくすためには以下の二つの方法がある。

  1. API経由にする
  2. オプトアウトさせる

2番めのオプトアウトが一番手っ取り早い。(やり方
1番めのAPI経由はちょっとめんどくさいけれど、openAI playgroundを使うことでも実現できる。
どっちでもいいけれど、今後API経由でchatGPTを使う可能性があるなら、勉強の意味も兼ねてplaygroundを使ってみるのも良いだろう。
設定項目が意外といっぱいあって勉強になる。

※注意点
厳しい職場では、上記の対策をしてもまだ使ってはいけない可能性がある。
一時的にopenAIに会話の内容が保存されてしまうからだ。
そう言う時はコードを渡すのは素直に諦めよう。

理解できていないままコードを張ってしまう

このパターンめちゃくちゃよく見るようになった。
「とりあえず実装できました!」と言われて見に行くと違和感のあるコードがあり
その部分について実装意図を聞くと「chatGPT経由なのでまだ細かくはわかりません。」と、、、

chatGPTにコードを生成させることは全く問題ないけれど、生成されたコードについては最低限理解しておこう。
大体コードの解説も同時に出力してくれるからそれを理解すれば良いし、もし出力してくれなかったら、

先ほどのコードの意味について解説お願いします。

と一言聞けば良い。

chatGPTなら優しく教えてくれる。
この一手間をサボったら絶対ダメ。

誰も理解できていないコードは、その時点で負債なので、chatGPTを使って効率的に負債を生み出すことになってしまう。

設計をすっ飛ばす

例えば投稿機能をつけたいとき、
「投稿機能だからとりまフォーム作ろう」みたいな感じで、いきなりchatGPTに「新規登録フォーム作って」とお願いするのはだめ!
詳細でなくてもいいから、せめて、どういう画面が必要か、どういう機能が必要か程度は決めてからコードを書き始めよう。

chatGPTがない頃は、そこから始めないとそもそもコードを書き始められなかったはずなのに、
chatGPTの威力が凄すぎて、なぜかそこをすっ飛ばしていける気がしてしまうという現象が起こる(気がする)。

どんなレベルの開発者であっても、どんな開発手法(アジャイル)でも

設計→実装→テスト
の流れは変わらない(と思っている。)
ここで言う設計は設計書を書くことではない、どのように実装するのか全体像をイメージすることを設計といっている。

設計書を書かずに、いきなり書き始めて、しっかり作り切るおじさんもいるかもしれないし、書いて理解しながら設計する人もいるだろう、しかしその人たちは無意識

chatGPTに頼るあまり自分の頭の中で設計をイメージできないまま実装してしまう人がいる。
これは絶対に避けたい。
なぜならそういうふうに作られたコードは、行単位では問題なくても、全体を見ると問題がある場合が多いからだ。

絶対要件に分解しよう。
最初に、実装したい内容の全体像を掴めていないと、全体を見たときにコードがぐちゃぐちゃになる。
要件に分解するときもchatGPTを使えるのだからそこまで手間じゃないはず。

変数名や可読性を考えない

chatGPTは、プロダクトの全体から見たときにそのコードがどう言う文脈でのコードなのかを理解していない。
そのためハウツー記事的なコードを書いてくることが多い。

例えば変数名が実際のエンティティとずれていたり、イテレーターがおかしかったり、適切なコメントアウトをしていなかったり、、、
詳細はリーダブルコードを読もう。

既存コードをちゃんと読まない

chatGPTにやらせるのが手っ取り早すぎて、既存コードの理解を疎かにしてないだろうか?
何かをやりたいと思ったときに、その実装の仕方はおそらく何通りもある。
そのときに、どれがベストなのかはコード単体では決められない。

同じような実装が他の箇所にあるなら、その書き方に近いものがベストになることが多い。
なのに、そこの理解をおろそかにしてしまうと、全体的に統一感のないコードになってしまうことが多い。

さらにいうなら、もしかしたら
そのコードは他の箇所で実装されているものをそのまま使えるかもしれない。
共通処理をちゃんと確認しただろうか?

効率的に車輪の再構築を行なっても、それは結局無駄なのだ。

終わりに

ここまで結構偉そうに書いてきたが、自分も気を抜いているとやってしまいそうになる。
一緒に気をつけよ。

Discussion