GPTでコードを書くと危険!?AIの落とし穴と実用的なプログラム作成の心得

今日の内容は「1万時間の壁」を超えた経験者の話になるので、「1万時間の壁ってなあに?」と言う方は下記の記事を先にご覧ください。そうしないと「そんな事、簡単そうに言われたって、できないよ!」と返って苦しい気持ちになるかも知れないからです。

シンプルでコンパクトだと使いやすい

私は小規模プロジェクトにおいて、軽量ロガーの実装を心掛けています。既存の巨大なライブラリを避けることで、学習コストやメンテナンスの負担を軽減できるからです。

使い方の簡単な説明

以下のように簡単に使うことができます。

Logger.LogInfo = $"これはログのテスト:Startup arguments: {args}";

ログの設定値を参照することもでき、次のように使用することも可能です。

Logger.LogError = $"エラー発生:Invalid value !!";
throw new InvalidOperationException(Logger.LogError);

これは、1行目で設定した Logger.LogError 値を2行目で参照しています。

コードの整合性と最小限のコメント

30年プログラムを書いてきた経験から、私は「大袈裟な入り組んだコード」は避けるようにしています。時間が経過して見直した時に、「なぜこんな複雑なことをしなければならないのか?」と感じることが多いためです。

そのため、コードはなるべく直感的で単純にし、使い方もシンプルなものを好みます。複雑なコードはメンテナンス性を犠牲にすることがあるためです。

大切なのは「また1からやり直しか…」という事態を最小限にすること

趣味でゲーム開発をする時も、仕事でプログラムを書く時も、「凝りすぎたコードは再利用性を損なう」という事実を伝えたいと思います。

私はなるべく再利用できるコードを書くように心掛けています。

使い捨てプログラムコードは、積み上げた積み木を崩してゼロから積み上げ直すのと同じで、時間を無駄にするからです。

再利用性を高めるためには「シンプルなコンセプト」が大切

コードを全く修正せずに使い回すのは難しいですが、「コンセプト」や「設計思想」をシンプルにすることで、必要最小限の修正で済むことが多いです。例えば、私がよく使い回す軽量ロガーは、ログのデバッグに必要ですが、規模に対して複雑過ぎたりロガー自体が重荷になることを避けるためのものです。

それ以外にも、ちょっとしたテクニックとして、テキストファイルでプログラムの挙動を制御できる仕組みを作っておくことがあります。これにより、プログラムを動かす準備や作業を何度も繰り返さなくても、EXEに変更を一切加えることなく小さな修正はテキストファイルだけで済むようにできます。

このような仕組みは、頻繁なテストや修正を繰り返す時に絶大な効果を発揮します。

軽量ロガーの例については、ZENNで記事を書きましたので、「ロガー=自作もしたことがないよ」という人は参考にしてみてください。こんな小さなコードでも十分に使えることが分かって頂けると思います。

シンプルで軽量にすることはAIは苦手

最近はGPTを使っての開発を主体にシフトしていますが、AI(Chat-GPTやCopilotなど)は複雑なコードを書きがちです。特に、プログラムでは冗長なコードを書いたり、極端に切り詰めすぎたコードを書いたりします。

例えばUnityでは三項演算子を使ったGameObjectのnullチェックは公式に非推奨とされていますが、AIは平気で提案してきます。何も知らない初心者はそれをコピーしてしまうことがあります。

もし、今AIを使って「あまりプログラム書かないけどAIが書くから何でも作れるぞ!」と意気込んでいる方がいれば、自分でもコードを書くセンスを磨くことをお勧めします。AIのコードは2024年7月現在ではまだ十分に手放しで任せられるほどの性能はありません。「実用性の高いコード」を書く傾向にはありますが、人の手の介入が不可欠です。

私はAIの生成するコードを鵜呑みにせず、1つ1つ丁寧に解体して、自分のニーズに合ったものへと変換しています。AIに全部任せると、数年後には「全て作り直し」になる可能性が高いです。

NOTEでは「AIを使っています」と公言していますが、決してアンコントロール(放任)で任せているわけではなく、管理が必要である点を強調したいと思います。

それではまた、ごきげんよう。

いただいたサポートは活動費に使わせていただきます