💡

AIには詳細な指示より『○○と同じで』がなんだかんだ一番良さそう

に公開

こんにちは!
株式会社Sally エンジニアの haruten です♪

私たち株式会社Sallyでは、マーダーミステリーをスマホやPCで遊べるアプリ「ウズ」や、マーダーミステリーを制作してウズ上で公開・プレイできるエディターツール「ウズスタジオ」などを開発・運営しています。
https://sally-inc.jp/

AI開発ツールを使う際、詳細な指示を書くより「既存コードを参照させる」方が効率的だという気づきについての個人的な覚書です。

はじめに

AI開発ツール(Claude Code、GitHub Copilot など)を使い始めた当初、私は「詳細に、具体的に指示すれば精度が上がる」と考えていました。

しかし、実際に使ってみると、以下のような問題に直面しました:

  • 仕様の言語化には時間がかかる : 詳細を書くだけで数分かかる
  • 手直しや段階的指示は必須 : 一度の指示で思い通りの出力を得ることはほぼ不可能で、レビュー後に自分で直すか追加で指示を出す必要がある
  • そもそも自分すら仕様の解像度が低い : 実装しながら「こうした方がいい」と気づくことが多い

例えば、「ユーザーデータを取得するカスタムフックを作って」と指示する際、エラーハンドリングはどうするのか、キャッシュは...と詳細を書き出すと時間がかかります。

そして生成されたコードを見て「やっぱりstaleTimeは違うな」「エラー時の処理を追加しないと」と修正指示を出す。

もうこれ、自分で実装した方が早いな…

そこで方針を変えました。

最もゴールに近い例を探す

そこで指示の仕方を変えました。手順はシンプルです:

  1. プロジェクト内で最も近いコードを探す
  2. そのファイルを参照させる
  3. 差分だけを追加で指示or自分で修正する

例:

○○を参考に××を作って

もちろん、「完全に同じ」はないことが多いです。

でも一度抽象化してみると、「本質的には似てる」コードは結構あります。
完全に同じじゃなくても、似た処理を探せればOK。

例えば:

  • 「ユーザー一覧を取得するAPI」と「商品一覧を取得するAPI」
    → 本質は「リソース一覧の取得とページネーション」
  • 「お気に入り登録ボタン」と「フォローボタン」
    → 本質は「ON/OFFの状態管理と楽観的更新」
  • 「ユーザー編集フォーム」と「商品編集フォーム」
    → 本質は「フォームのバリデーションと送信処理」

あくまで便宜上の簡潔な例ですが、このように抽象化するとプロジェクト内に参照できるコードが見つかりやすくなります。

それで、「そもそもここは切り出して共通化した方がいいな」と思うのなら、共通化しちゃえばいいんです。

そうすれば、プロジェクトのリファクタリングもでき、次回以降の類似処理の作成がさらに楽になります。

メリット1: AIレビューのコストが削減される

これが一番大きいメリットです。

既存コードを参照させると、生成されたコードが既に見たことがある構造になります。

  • 概略は既存と同じ → レビュー不要
  • ロジックも似ている → 差分だけチェックすればいい
  • 「どこまで手直しすればいいか」が明確 → 追加実装の範囲が絞れる

ゼロから生成させると、全体をレビューして「ここはこう直して、あそこはこう変えて...」と指示を出す必要があります。既存参照なら「ここだけ変えて」で済みます。

生成後の手直し・追加実装の範囲が明確なので、作業が速く終わります。

メリット2: 詳細を書く必要がない

既存コードから引き継がれるので、細かいスタイルやロジックを指示する必要がありません。

注意点

もちろん、これはあくまで一つのアプローチです。

・立ち上げ直後のプロジェクトはそもそも参照するコードがない
・どう考えても既存コードに類似性がない

などなど、プロジェクトの性質やタスクによって、詳細な指示が必要な場面もあるでしょう。
ケースバイケースで使い分けるのが良いと思います。

まとめ

AI指示で重要なのは、詳細を具象化することではなく、一度抽象化し、ゴールにもっとも近い既存のコードを参照させることだと感じました。

そのためには、プロジェクトのコードの整理と深い理解が大事です。

この記事が皆さんのAI開発の効率化に役立つと嬉しいです。
最後まで読んでいただきありがとうございました!

UZU テックブログ

Discussion