AIには詳細な指示より『○○と同じで』がなんだかんだ一番良さそう
こんにちは!
株式会社Sally エンジニアの haruten です♪
私たち株式会社Sallyでは、マーダーミステリーをスマホやPCで遊べるアプリ「ウズ」や、マーダーミステリーを制作してウズ上で公開・プレイできるエディターツール「ウズスタジオ」などを開発・運営しています。
AI開発ツールを使う際、詳細な指示を書くより「既存コードを参照させる」方が効率的だという気づきについての個人的な覚書です。
はじめに
AI開発ツール(Claude Code、GitHub Copilot など)を使い始めた当初、私は「詳細に、具体的に指示すれば精度が上がる」と考えていました。
しかし、実際に使ってみると、以下のような問題に直面しました:
- 仕様の言語化には時間がかかる : 詳細を書くだけで数分かかる
- 手直しや段階的指示は必須 : 一度の指示で思い通りの出力を得ることはほぼ不可能で、レビュー後に自分で直すか追加で指示を出す必要がある
- そもそも自分すら仕様の解像度が低い : 実装しながら「こうした方がいい」と気づくことが多い
例えば、「ユーザーデータを取得するカスタムフックを作って」と指示する際、エラーハンドリングはどうするのか、キャッシュは...と詳細を書き出すと時間がかかります。
そして生成されたコードを見て「やっぱりstaleTimeは違うな」「エラー時の処理を追加しないと」と修正指示を出す。
もうこれ、自分で実装した方が早いな…
そこで方針を変えました。
最もゴールに近い例を探す
そこで指示の仕方を変えました。手順はシンプルです:
- プロジェクト内で最も近いコードを探す
- そのファイルを参照させる
- 差分だけを追加で指示or自分で修正する
例:
○○を参考に××を作って
もちろん、「完全に同じ」はないことが多いです。
でも一度抽象化してみると、「本質的には似てる」コードは結構あります。
完全に同じじゃなくても、似た処理を探せればOK。
例えば:
- 「ユーザー一覧を取得するAPI」と「商品一覧を取得するAPI」
→ 本質は「リソース一覧の取得とページネーション」 - 「お気に入り登録ボタン」と「フォローボタン」
→ 本質は「ON/OFFの状態管理と楽観的更新」 - 「ユーザー編集フォーム」と「商品編集フォーム」
→ 本質は「フォームのバリデーションと送信処理」
あくまで便宜上の簡潔な例ですが、このように抽象化するとプロジェクト内に参照できるコードが見つかりやすくなります。
それで、「そもそもここは切り出して共通化した方がいいな」と思うのなら、共通化しちゃえばいいんです。
そうすれば、プロジェクトのリファクタリングもでき、次回以降の類似処理の作成がさらに楽になります。
メリット1: AIレビューのコストが削減される
これが一番大きいメリットです。
既存コードを参照させると、生成されたコードが既に見たことがある構造になります。
- 概略は既存と同じ → レビュー不要
- ロジックも似ている → 差分だけチェックすればいい
- 「どこまで手直しすればいいか」が明確 → 追加実装の範囲が絞れる
ゼロから生成させると、全体をレビューして「ここはこう直して、あそこはこう変えて...」と指示を出す必要があります。既存参照なら「ここだけ変えて」で済みます。
生成後の手直し・追加実装の範囲が明確なので、作業が速く終わります。
メリット2: 詳細を書く必要がない
既存コードから引き継がれるので、細かいスタイルやロジックを指示する必要がありません。
注意点
もちろん、これはあくまで一つのアプローチです。
・立ち上げ直後のプロジェクトはそもそも参照するコードがない
・どう考えても既存コードに類似性がない
などなど、プロジェクトの性質やタスクによって、詳細な指示が必要な場面もあるでしょう。
ケースバイケースで使い分けるのが良いと思います。
まとめ
AI指示で重要なのは、詳細を具象化することではなく、一度抽象化し、ゴールにもっとも近い既存のコードを参照させることだと感じました。
そのためには、プロジェクトのコードの整理と深い理解が大事です。
この記事が皆さんのAI開発の効率化に役立つと嬉しいです。
最後まで読んでいただきありがとうございました!
Discussion