読者が抱える課題
GitHub Copilot、Cursor、ChatGPTなどのAIコーディングアシスタントを利用している際、特定の関数やバグのみを修正するよう指示したにもかかわらず、周辺の無関係なコードやスタイル、依存関係まで勝手に変更されてしまうケースがあります。
これによって差分(Diff)が膨らみ、コードレビューの負担が増加したり、意図しないリグレッション(デグレ)が発生したりする課題が生じます。
この記事で分かること
- AIが指定範囲外のコードを変更してしまう技術的背景と原因
- 意図しない変更を防ぐためのプロンプト設計と指示の与え方
- エディタ設定やプロンプトテンプレートを用いた実務的な対策
- 意図しない変更を検知・防止するための作業チェックリスト
対象読者・前提条件
- AIコーディングツール(GitHub Copilot, Cursor, Claude Code, ChatGPT等)を日常業務で利用しているエンジニア
- Gitによるバージョン管理の基本操作を理解していること
なぜAIは指定外のコードまで変更してしまうのか?
AIが指定外のコードを変更する主な原因には以下が挙げられます。
- コンテキストウィンドウの最適化動作: AIモデルは入出力全体の整合性を保とうとするため、指定箇所の修正に伴い周辺のコードも「ついでに最適化(リファクタリング)」しようと判断する場合があります。
- 指示の曖昧さ: 「〇〇の関数を修正して」という指示だけでは、変更を許容する「境界(スコープ)」が明確に伝わりません。
- システムプロンプトやエディタの差分生成アルゴリズム: エディタプラグイン側がAIの出力をファイル全体に反映する際、行数のズレや整形処理によって予期せぬ差分を生むことがあります。
意図しない変更を防ぐための対策
1. プロンプトに明確な「制約条件(ネガティブプロンプト)」を含める
指示を与える際は、実行してほしい内容だけでなく「行ってはいけないこと」を明記します。
悪い例(指示が曖昧)
user_idのバリデーション処理を追加してください。
良い例(スコープと制約を明記)
【依頼内容】
validate_user関数内に、user_idが正の整数であるか検証する処理を追加してください。
【制約条件】
- validate_user 関数以外の既存コードには一切変更を加えないでください。
- 変数名の変更やコードフォーマット(インデント・改行等)の変更を行わないでください。
- 変更対象以外の関数やコメントを削除・修正しないでください。
2. システムプロンプト・設定ファイル(.cursorrulesなど)による共通ルールの固定
Cursorなどのエディタでは、プロジェクト直下に設定ファイルを配置することで、AIに対する共通の制約を自動で適用できます。
設定例(.cursorrules またはシステムプロンプト用)
# コーディングルールおよび変更範囲に関する制約
- 指示された箇所以外のコードを変更しないでください。
- 明示的な指示がない限り、既存のコードスタイル、コメント、不要なリファクタリングを行わないでください。
- 変更箇所は最小限にとどめ、Diff(差分)が最小になるように回答・出力してください。
※エディタや利用するツールの仕様変更により、設定ファイルの名称や評価順序が変更される場合があります。利用時は最新の公式ドキュメントをご確認ください。
3. 実務用プロンプトテンプレート
修正依頼を出す際に利用できるテンプレートです。
■ 目的
[修正したい内容や解決したい課題を簡潔に記述]
■ 対象ファイル・関数
- ファイルパス: [src/utils/auth.ts]
- 対象関数: [verifyToken]
■ 変更内容
[具体的な変更内容]
■ 禁止事項
1. 指定した対象関数以外のコードを変更・削除しないこと。
2. リファクタリングやスタイルの変更を許可なく行わないこと。
3. インポート文の並び替えや未送信ログの追加を行わないこと。
■ 出力形式
変更が必要な箇所のDiff(または該当関数のみ)を出力してください。
作業手順とチェックリスト
AIを利用してコードを修正・適用する際の実務手順です。
| ステム | 作業内容 | 確認ポイント |
|---|---|---|
| 1. 事前準備 | ワークスペースのクリーン化 |
git status で作業前の差分がない状態にする |
| 2. 指示 | 制約条件付きでプロンプト送信 | 変更範囲と禁止事項を明記しているか |
| 3. 適用 | コードの反映 | 全置き換えではなく、指定箇所のみ適用する機能を利用する |
| 4. 確認 | 差分チェック |
git diff で意図しない箇所の変更がないか確認する |
レビュー時のチェックリスト
- 依頼した関数・行以外にDiffが発生していないか
- コメントの削除やコードスタイルの意図しない変更が含まれていないか
- 依存ライブラリ(package.jsonなど)が勝手に更新されていないか
- 未使用の変数や不要なログ出力コードが紛れ込んでいないか
注意点と運用上の判断基準
-
広範囲の修正は分割して依頼する
一度に複数のファイルを修正しようとすると、AIが全体を調整しようとして意図しない変更が増える傾向があります。ファイル単位・関数単位に分割して指示を出してください。 -
Gitの機能を活用する
AIによる提案を適用する前に、必ずコミットを作成しておくか、ブランチを分けて作業してください。意図しない変更が発生した場合は即座にgit checkoutまたはgit restoreで復元できるように管理します。 -
ツール固有の差分適用機能の仕様を確認する
エディタのAI機能によっては「Accept」を押すとファイル全体を置き換える動作をする場合があります。適用前にDiffプレビュー画面で個別の変更行を確認してから取り込んでください。
まとめ
AIによる意図しないコード変更は、プロンプトへの制約条件の追加、システムプロンプトによる設定、Gitを用いた小まめな差分確認によって大幅に抑制できます。作業範囲を明確に限定し、レビューの手間を減らしながらAIを効率的に活用していきましょう。