最近、開発でChatGPTやClaudeを使うことが増えました。
エラー調査、コード生成、リファクタリング、設計相談など、かなり便利です。
ただ、使っているうちに何度も同じ失敗をしました。
それは、AIにいきなりコードを書かせることです。
最初は、
ログイン機能を作ってください
とか、
このコードをいい感じにリファクタリングしてください
のように雑に投げていました。
すると、たしかにそれっぽいコードは返ってきます。
でも実際に使おうとすると、
- 既存コードの設計と合っていない
- 勝手に新しいライブラリを追加している
- 変更範囲が大きすぎる
- 仕様にない処理が入っている
- 動くけど保守しにくい
みたいなことが起きました。
AIが悪いというより、こちらの渡し方が雑だったんだと思います。
そこで最近は、AIにコードを書かせる前に、簡単な「実装メモ」を作るようにしています。
これだけで、かなり失敗が減りました。
いきなりコードを書かせない
AIを使うときに意識しているのは、いきなり完成コードを求めないことです。
まずは、
実装方針を考えてください
と依頼します。
いきなりコードを書かせると、AIは足りない前提を勝手に補完します。
その補完がプロジェクトとズレると、見た目はきれいでも使えないコードになります。
なので、最初に人間側で最低限の前提を整理します。
自分が使っている実装メモ
最近は、以下のような形でAIに渡しています。
目的:
何を実現したいのか
背景:
なぜその機能が必要なのか
技術スタック:
使っている言語、フレームワーク、DBなど
現在の状態:
すでにあるコードや仕様
実現したい動き:
正常時にどう動いてほしいか
エラー時の動き:
失敗時にどう表示・処理したいか
制約:
変更してはいけないもの
やってほしくないこと:
AIに勝手にやってほしくないこと
これだけです。
特別なプロンプトテクニックではなく、ただ状況を整理しているだけです。
でも、AIの回答はかなり変わります。
例:ログイン機能を相談する場合
悪い例はこれです。
ログイン機能を作ってください
これだと、AIはかなり自由に解釈します。
メールログインなのか、SNSログインなのか。
Cookie管理なのか、JWTなのか。
DB構造はどうなっているのか。
管理者権限は必要なのか。
何も分かりません。
なので、次のように書きます。
目的:
既存のWebアプリにログイン機能を追加したいです。
技術スタック:
- TypeScript
- Node.js
- PostgreSQL
現在の状態:
- usersテーブルはすでに存在しています
- emailとpassword_hashのカラムがあります
- 画面デザインは既存のものを使います
実現したい動き:
- メールアドレスとパスワードでログイン
- 成功時はマイページへ遷移
- 失敗時はエラーメッセージを表示
制約:
- DB構造は変更しない
- 新しいライブラリは追加しない
- 既存のUIは大きく変えない
やってほしいこと:
まず実装方針を説明してください。
その後、必要な処理を分解してください。
いきなりコードは書かなくていいです。
このように渡すと、AIの回答がかなり現実的になります。
ポイントは、最初からコードを書かせないことです。
まず方針を出してもらう。
それを見て、ズレていなければコードを書いてもらう。
この流れにすると、手戻りが減ります。
「やってほしくないこと」を書くのが大事
個人的にかなり効果があったのが、禁止事項を書くことです。
たとえば、
新しいライブラリは追加しないでください
DB構造は変更しないでください
既存の関数名は変えないでください
UIの見た目は変えないでください
大規模なリファクタリングはしないでください
こういう条件です。
AIは親切なので、良かれと思って大きく改善してくれることがあります。
でも実務では、小さく直したい場面が多いです。
少しエラー処理を直したいだけなのに、全体の設計まで変えられるとレビューが大変になります。
AIに自由に書かせるより、変更範囲をコントロールするほうが大事だと感じています。
AIは「答えを出す道具」より「整理する相手」
AIを使っていて思うのは、AIは答えを出す道具というより、整理する相手として使うほうが強いということです。
こちらが曖昧なまま聞くと、曖昧な答えが返ってきます。
逆に、目的、前提、制約を整理して渡すと、かなり使いやすい回答になります。
これは人間に依頼するときと同じです。
「いい感じに作って」よりも、
「この条件で、この範囲だけ修正して」
と言われたほうが作りやすいですよね。
AIも同じです。
まとめ
AIにコードを書かせる前に、簡単な実装メモを作るだけで失敗が減りました。
特に大事なのは、
- 目的を書く
- 技術スタックを書く
- 現在の状態を書く
- 制約を書く
- やってほしくないことを書く
- いきなりコードではなく、まず方針を出してもらう
このあたりです。
AIを使うほど、結局は人間側の整理力が重要になります。
コードを書く作業はAIに任せられる部分が増えました。
でも、何を作るのか、どこまで変えていいのか、出てきたコードが妥当かを判断するのは人間です。
AIに振り回されないためにも、まず自分の頭の中を整理してから使うのが一番効果的だと思っています。