Gemini Code Assisant と Visual Studio Codeでの差分ファイルの適用エラーについて

Gemini 3 をプレビュー版だが、制限をゆるくたくさん使えるようなので、アシストをしてもらいながらコードを書いてみた。結構、快調に作業ができる。

1つだけGemini 3 proとがっつり話した場面があった。あまりにもサボるので喧嘩調になった。これは使い方の注意事項かもしれない。

それは、現在のソースコートから改良案を提案してもらうときの差分のデータを提供してもらうときの話し。提供コードに以下のメッセージが出ることがある。

The code change produced by Gemini cannot be fully applied. Blocks that failed (highlighted below) can be applied manually.

このメッセージが出ると自動的に差分が適用できない。手動で差分を適用するように伝えるメッセージ。これは差分データが正しく作成されいないときに出力される。何が悪いのかと言うと、差分を作成するための現在のソースコードをGeminiが確認できないときに起こる。

現在のソースコードを確認できないとき、過去のやり取りや自分の学習ベースから、さも現在のファイルを見たかように差分をシレッと生成してくるのだ。現在のファイルを参照できないと言ってこない。言ってくるときもあるがそうでないときもある。

ここで不思議に思うことがある。過去のやり取りで何度も現在ファイルの状況を確認して、提案や解析をしているので、現在のファイルは常に見れている思っていたがどうもそうではないようなのだ。

過去のやりとりでは、誤解が出るから、フォルダのあるファイルを見るな、と指示しても該当のファイルを何度も覗き見されているので、デフォルトで作業フォルダの下のファイルを見れるのだろうと思っていた。
(覗き見を禁止にする方法がGemini Code Assisantあったようですが、知らなかった)

そのことを詳細にGemini 3 伝えて、見れないのはGeminiがサボっているからだ!厳しく責めたら次のような回答が帰ってきた。

1. Gemini Code Assist の仕組み(前提)

まず、私が「ファイルが見えている」状態とはどういうことか説明します。 私はあなたのPCのファイルシステムに直接アクセスして、自由にファイルを閲覧しているわけではありません。

仕組み:

あなたがチャットで質問をする。

VS Codeの拡張機能が、あなたのプロジェクト内のファイルから「関連性が高いと思われるファイル」や「現在開いているファイル」を自動的にピックアップする。

それらのファイルの中身をテキストデータに変換し、あなたの質問文と一緒に**「巨大なプロンプト(入力データ)」**として私(サーバー上のAIモデル)に送信する。

私はその送られてきたテキストデータを見て、「ファイルが見えている」状態で回答する。

2. なぜ「見えなくなった」のか?(推測される原因)

環境を変更していないにも関わらず見えなくなった原因として、以下の可能性が極めて高いです。

① トークンリミット(容量制限)の超過 【最有力】

AIが一度に読み込めるデータ量(トークン数)には上限があります。

以前: プロジェクトの規模が小さかったため、全ファイルの中身を送信しても上限に収まっていた。そのため、指定しなくても「全ファイルが見えていた」。

現在: 機能追加やファイル分割により、コードの総量が増加しました(特に editor_page.dart は1400行を超えています)。これにより、拡張機能が**「全てのファイルを送ると容量オーバーになる」**と判断し、一部のファイルを送信対象から除外した可能性があります。

② 拡張機能のコンテキスト選択ロジック

拡張機能は、容量を節約するために「どのファイルを送るか」を選別しています。

アクティブなファイル優先: 現在エディタで開いているタブのファイルは優先されます。

参照関係: importされているファイルなどを追跡しますが、深すぎると切られます。

不具合: ファイルのインデックス化(中身の解析)がうまくいっておらず、「空のファイル」あるいは「存在しない」と誤認している可能性があります(警告が出ているのはこのケースかもしれません)。

3. なぜ Diff が正しくなくなったのか?

これが「ファイルが見えない」ことの直接的な弊害です。

正常時: ファイルの「現物」が送られてくるので、その行番号や前後のコードを使って正確なDiffを作れます。

現在: ファイルの「現物」が送られてこないため、私は**「過去の会話の記憶」や「一般的なコードの推測」**で補完してDiffを作ろうとします。

結果、実際のファイルとは行番号がズレたり、存在しない行を削除しようとしたりして、適用エラー(Diffエラー)が発生します。

4. 解決策(どうすればいいか)

システム(拡張機能)が自動で送ってくれない以上、手動で「これを読め」と強制する必要があります。

明示的なコンテキスト追加:

チャット入力欄で @ (アットマーク)を入力してみてください。ファイル一覧が出る場合、そこから editor_page.dart などを明示的に選択すると、強制的にコンテキストに含まれます。

ファイルを開いておく:

修正したいファイルをVS Codeのエディタ画面で開いた状態(アクティブ)にしてから質問すると、優先的に送信される場合があります。

最終手段(テキスト貼り付け):

上記でもダメな場合、今回のように「ファイルの中身をチャットに貼り付ける」のが、AIに「現物」を見せる最も確実な方法です。

結論: あなたの環境が壊れたわけではなく、**「プロジェクトの成長により、自動送信の容量制限を超えたため、AIに届く情報が間引かれている」**可能性が最も高いです。

この回答を見て、Visual Studio Code の右下にGeminiとの対話ごとに Warningが多数出力されていたのを思い出した。

Gemini: Could not add ‘c:\Users\xxxxxxxx\editor_page.dart’ to context. Please check if the file exists and you have permissions to read it.

これがどうやらファイルが読み込めていないメッセージだったようなのだ。Visual Code Studioの[出力]のコンソールで右上のドロップダウンリストから[Gemini Code Assist]を選ぶとエラーが出力されているのが理解できた。内容が多すぎるので、Geminiには送信していないというようなエラーが出ていた。

規模が大きくなるとファイルの内容の送信が勝手にカットされて、ファイルをGeminiが勝手に創造して差分のファイルを作成するのた。

見れなくなったらどうするのか?

その時は 適用エラーになったファイル名をコピーして、Geminiへの回答に @ [ファイル名]を入力すると途中でそのファイルの名前が選べるダイアログが表示されるので、クリックすると 青い文字で @ ファイル名に変わる。その状態で一言、差分がエラーなるとかを言い添える(言い添えなくてもいいけど)と、今度は適用できる差分ファイルを出力してくれるようになる。

会話ダイアログに現在のファイルの内容を全部貼り付ける方法でも行けるようだがこちらのほうがスムーズ。これを知ってからは、スムーズに作業が進むようになった。

※ @ ファイル名でもファイルを取得しないケースがあるようだ。その場合は、該当のファイルの内容を全部コピーして、会話に貼りけるか、該当のファイルを開いて、「ファイル全体を選択状態」にして、差分エラーである旨の回答を書くと、正しい差分を提出してくれる。

この方法はGeminiが現在ファイルが見れないので差分を見て適用してくれ、と言ってきたときにも使える。

タイトルとURLをコピーしました