クソコードお焚き上げの会:AI生成コードの反省と教訓
皆さん、こんにちは!年末も近づき、今年たまった「クソコード」を盛大にお焚き上げする季節がやってきました。
今回のテーマは、AIコード生成ツール「cursor」の使用で大失敗した経験と、そこから得られた教訓です。
生成AI活用ド初心者がやってしまったクソコード生成の反省文として残しておきます…
お焚き上げ対象:「cursor」が生成したルール無視コード
業務効率化のため、流行りのAIコード生成ツール「cursor」を利用してみました。その圧倒的な生成能力に期待し、ある機能の実装をまるっと任せてみたのですが、結果は惨憺たるものでした。
まさにクソコードを大量生成してレビューで同僚を怖がらせましょう!をやってしまったわけです。
- マジックナンバーの放置: 定数化すべき値を直接コードに記述。
- 不必要な複雑性: シンプルな処理を複雑なネストで実装。
コーディング規約やベストプラクティスが、まるで存在しないかのように生成されたコードは、まさに「動けばいい」の極地でした。
反省ポイント:
AIは、プロンプトに明記されない「暗黙のルール」や「文化」は理解してくれない。
規約のドキュメントを読み込ませるだけでは、細かな慣習までは反映されませんでした。
なぜAIは「クソコード」を生成したのか?
AIが生成するコードは、多くの場合、文法的には正しく、機能も一応は満たします。しかし、「チーム開発における品質」という観点では、以下の問題がありました。
- プロンプトが巨大すぎた
複雑な要件を一つの巨大なプロンプトにまとめて実行したため、AIは「とにかく機能を完成させる」ことを優先し、コードの品質やルール遵守は二の次になってしまいました。 - ルールを細かく指定しなかった
「命名規則は〇〇に準拠」「このロジックはヘルパー関数として分離」「エラー処理はこう書く」といった具体的な指示を怠ったため、AIは学習データから持ってきた汎用的な、しかしチームの基準に合わないコードを生成しました。
最終結論:AIと上手に付き合い、良いコードを作るには
この「クソコードお焚き上げ事件」から得られた教訓は、AIはあくまで強力な「アシスタント」であり、「丸投げ先」ではないということです。
- ルールに準拠したコードを生成しよう
AIにコードを生成させる際は、コーディング規約をプロンプトに含めるか、規約に準拠した既存のコードを例として提供しましょう。AIの学習ソースが何であれ、チームのルールが最優先です。 - 短く区切ってプロンプトを実行しよう
一度にすべてを任せるのではなく、機能やタスクを細かく分解し、短く区切ったプロンプトを段階的に実行しましょう。
- 「まず、このデータの取得処理を実装して(命名規則を遵守)」
- 「次に、取得したデータをこの形式に変換するロジックを追加」
- 「最後に、エラーハンドリングを標準のパターンで追加」
このように小さなステップで指示を出すことで、AIの出力の品質を常にコントロールし、ルール違反を早期に修正できます。
AIを「コードを書くスピード」だけでなく、「コードの品質」を高めるツールとして活用できるよう、プロンプトの出し方を見直しましょう。
「お焚き上げしたい」クソコードの事例があれば、ぜひ教えてください!