Copilot のコードレビューがツール変更により悪化した理由と改善策
GitHub は Copilot Code Review のツール移行により性能が低下した事例を分析し、ツールの最適化よりも「レビューの読み方」に合わせたプロンプト指示の再設計が重要であることを示した。
キーポイント
ツール共有による予期せぬ性能低下
Copilot CLI の高品質な共通ツール(grep, glob, view)へ移行したが、ベンチマークではレビューコストが増加し検出率が低下する逆転現象が発生した。
根本原因はツールの欠陥ではなく指示の誤り
ツールの能力不足ではなく、モデルがツールを呼び出す際の「インストラクション(プロンプト)」が人間のレビューアーの読み方と合致していなかったことが問題だった。
ワークフロー最適化による劇的改善
ツールの再設計ではなく、レビュープロセスに合わせた指示文を再構築した結果、平均コストを約 20% 削減しながら品質を維持する成功を収めた。
エージェントフレームワークの教訓
既存のツールやフレームワークを安易に流用すると、設計時の前提と現在のユースケースが乖離し、逆効果になるリスクがあることを示している。
汎用ツールとレビュータスクのミスマッチ
既存の共有ツールはリポジトリ全体を探索するよう設計されており、プルリクエストの特定箇所を検証するというレビューの目的とは合致しない。
文脈の蓄積による非効率化
不要なコードコンテキストがエージェントの作業文脈に蓄積され続けることで、トークンコストが増大し、レビューの焦点がぼやけてしまう。
レビューとコーディングアシスタントのワークフローの違い
コーディングアシスタントは広範囲をマッピングするが、コードレビューはプルリクエストの差分から始め、問題の有無を確認するために必要な最小限のエビデンスに焦点を当てる必要がある。
重要な引用
Instead, in our benchmarks, we found that the cost of reviews was higher and fewer issues were being caught.
But the tools weren't the problem. The instructions were.
Once we rewrote them for the way a reviewer actually reads a pull request, the regression flipped into a win: roughly 20% lower average review cost.
"I do not want to open a large part of the repository before I know what I am looking for."
"A tool result is not a disposable printout; for an agent, it's extra tokens that stay in the context window."
A reviewer usually starts from the diff, asks whether the change introduced a problem, and then looks for the narrowest nearby evidence required to confirm or dismiss it.
影響分析・編集コメントを表示
影響分析
この記事は、AI エージェント開発における「ツール依存」から「プロンプト・ワークフロー最適化」への視点転換を促す重要な示唆を含んでいます。単に高性能なツールを導入すれば良いという単純な発想が通用しない現実を示し、実運用レベルの AI 製品開発において、人間の行動パターンに合わせたシステム設計がいかに重要かを浮き彫りにしています。
編集コメント
ツールやインフラの刷新に目が向きがちですが、この事例は「AI の頭脳(プロンプト)をどう鍛えるか」が最も重要な要素であることを如実に示しています。開発者は技術的負債だけでなく、設計思想のミスマッチという見えない負債にも注意を払う必要があります。
エージェントにより優れたツールを与えれば、より良い成果を上げるはずだ。それが直感というものだろう。
プルリクエストを開くと、Copilot のコードレビューは差分を読み込み、周囲のコードを検索して、リリース前に重要な問題を見つけ出す。そのために、従来自分のコード探索ツールを使用していた。そこで、Copilot CLI を支えるよりメンテナンス性の高い共有ツールである grep、glob、view に切り替えた際、スムーズなアップグレードになると期待した。
しかし、ベンチマークでは、レビューにかかるコストが増大し、検出される問題の数が減少していることが判明した。
だが、問題はツールにはなかった。指示にこそあったのだ。レビュアーが実際にプルリクエストを読むプロセスに合わせて指示を再構築したところ、後退は勝利へと転じた:平均レビューコストは約 20% 低下し、レビュー品質は維持されたままだった。
これは、ツールの周りにあるワークフローを調整することで解決策に至った物語である。
同じツール、間違った直感
エージェントフレームワークの上に構築したことがあるなら、おそらくそのツールも継承しているはずです。それらは機能しているので、使い続けることになりますが、やがて自分のユースケースが設計時の想定から十分に乖離し、静かに自分自身に逆らうようになる日が訪れます。まさにそれが私たちが直面していた状況でした。
共有 CLI ツールを使用する前に、Copilot code review は独自のコード探索ツールを使用していましたが、そのツールレイヤーは SWE-agent スタイルのリポジトリナビゲーションや GitHub Copilot Autofix などの初期のエージェントシステムから着想を得ていました。具体的には、ディレクトリのリスト表示、ファイル検索、ディレクトリ検索、そしてコードの読み込みといった機能です。
これらのツールは確かに機能していましたが、Copilot code review に特化したものであり、当時のモデルの振る舞い方を想定して設計されていました。初期のエージェント型コーディングモデルは、ツール呼び出し回数が少なく、必要なコンテキストを自動的に取り込む能力も劣っていました。そのため、モデルが行う限られた数のツール呼び出しに、関連する情報をすべて含めることがより重要でした。
一方、Copilot CLI ハーネスには、grep、glob、view という Unix に着想を得たコード探索ツールの共通セットが用意されています。このハーネスは、GitHub Copilot クラウドエージェントを含む、増加する数の Copilot エージェント製品でも利用されており、ハーネスの改善は複数の製品に恩恵をもたらすことができます。私たちは可能な限りインフラを整理して共有したいと考え、Copilot コードレビューにおいて Copilot CLI ハーネスのツールを使用する実験を行いました。その目的は、重複したツールの実装を減らし、コード探索ツールの改善を行うための共通場所を作成し、これらの改善を Copilot 製品間で容易に引き継ぎやすくすることです。
紙面上では、この移行は単純に見えました:
旧 Copilot コードレビュー | GitHub Copilot CLI | 目的
list_dir glob | | コードを開く前に候補となるファイルとディレクトリを発見する。
search_file and search_dir grep | | コード内で一致するテキスト、シンボル、または呼び出し元を検索する。
read_code view | | パスまたは範囲が特定されたら、関連するファイルの内容を一度読み取る。
既存のレビューツールは単なる薄いラッパーではありませんでした。ディレクトリの検索やコード範囲の読み取りを行う際、一致した行や要求された行に加えて、周囲の追加的なコンテキストも返すことができました。これはトークンコストを増加させましたが、同時に、以前のモデルが自動的に近くのコンテキストを含めることで恩恵を受ける傾向があったこととも合致していました。
当初、これは単なる移行になるだろうと期待していました:あるツールのセットを別のツールセットに置き換えるだけだと。しかし、オフラインベンチマークで共有ツールをテストしたところ、レビューエージェントは効率も効果も低下することが判明しました。平均コストが増加し、有用なコメントの数も減少しました。
トレースから閲覧ループが明らかになりました
内部の Copilot コードレビューベンチマークは、単なる最終スコア以上のものを示すため有用でした。エージェントがたどった経路、つまりどのツールを呼び出したか、どれだけの出力が返ってきたか、どこでエラーが発生したか、そして証拠に向かって絞り込んでいたのか、それとも検索範囲を広げていたのかなどを示してくれます。
共有 Copilot CLI ツールをオフラインベンチマークで初めて試した際、エージェントはプルリクエストを検証するのではなく、リポジトリを閲覧しているかのような振る舞いをすることがよくありました。広範に検索し、可能性のあるパスを推測し、広く読み込み、さらに検索すべきものを見つけ、その追加のコンテキストを次のステップへ持ち越すのです。
image図 1:以前の状態 — 私たちが観察した汎用的な行動の簡略化されたイラスト:検索範囲を広げ、パスを推測し、コンテキストを蓄積する様子。
このパターンは理解できます。タスクが「このリポジトリを理解すること」である場合、広範な探索は有用になり得ます。しかし、これはレビュアーが通常プルリクエストを検証する方法ではありません。
私がプルリクエストを検証する場合、diff から始めて、焦点を絞った質問を行います:
この関数はどこで呼び出されていますか?
この設定キーは他の場所で使用されていますか?
同じパターンを持つテストやヘルパーはありますか?
この振る舞いを説明する最小限の近傍コード範囲は何ですか?
何を探しているかを知る前に、リポジトリの大きな部分をオープンしたくありません。レビューを無関係なコードで過負荷にすることなく、質問に答えるために必要な最小限のコンテキストだけを欲しいのです。
これは重要です。なぜなら、すべてのツール結果がエージェントの作業コンテキストの一部となるからです。追加のファイル内容は後の推論にも引き継がれ、コストが増加し、場合によってはレビューの焦点がぼやけてしまう可能性があります。ツール結果は使い捨ての印刷物ではありません。エージェントにとっては、コンテキストウィンドウ内に残る追加のトークンなのです。
その痕跡がその違いを可視化しました。共有されたツール自体に問題があったわけではありません。指示が、効率的かつ効果的なレビューを行うためにエージェントに誤った直感を与えていたのです。
ツール自体は機能していましたが、それらの指示は Copilot CLI 内での使用に合わせて調整されており、誤ったワークフローを暗示していました:エージェントは grep、glob、view を、広範なコーディングアシスタントのように使い、レビューアーとして使わなかったからです。コーディングアシスタントは変更を加える前に領域全体をマッピングし、コードの他の隅々を壊さないように確認することがあります。一方、レビューアーは通常、diff から始め、その変更が問題を引き起こしたかどうかを問い、それを確認または却下するために必要な最も狭い近傍のエビデンスを探します。
Copilot CLI や Copilot クラウドエージェントで使用されるような一般的なコーディングアシスタントツールの指示は、対話型アシスタントにとっては理にかなっています。開発者は、リポジトリの理解、変更の計画、ファイル編集、そして複数回のやり取りを継続することを依頼するかもしれません。
Copilot のコードレビューにはより限定的な役割があります:プルリクエストの差分から始め、変更が実際の問題を引き起こすかどうかを判断するために十分な周辺証拠を集め、そのレビュー質問に必要のないコンテキストを読み込まないようにすることです。
したがって、追加のプロンプト作業なしで、以前の Copilot コードレビューツールを Copilot CLI のツールに単純に置き換えることはできないことは明らかでした。課題はこうなりました:これらの共有ツールをコードレビューの文脈で効果的に活用するためのツール指示をどう設計するか。
レビュワーのワークフローのためのツール指示の書き換え
次の反復では、ガイダンスがコードレビューに特化されました。Copilot コードレビューに実行してほしいワークフローは以下の通りです:
差分から始めて、具体的なレビュー質問を形成する。
パスが不確かな場合は glob を使用し、候補となるファイル、シンボル、呼び出し元を検索するために grep を使用する。
ファイルを読み込む前に、安価な発見処理を一括で行う。
エージェントが必要なファイルや行範囲を把握している場合にのみ view を使用する。
1 回の検索と 1 回の読み込みを交互に行うのではなく、焦点を絞った読み込みを一括で行う。
過度に単純化すれば、これが私たちがコード化した振る舞いです:
一般的な姿勢:利用可能なツールを使用して、関連する可能性のあるリポジトリのコンテキストを検査する。
レビューに特化したガイダンス:diff から始める。まず grep と glob で範囲を絞り、view で正確な証拠を読む。grep で関連する文脈が見つからない場合は、エスケープされたより単純な検索で再試行する。パスが間違っている場合は、近くのパスを推測するのではなく、glob に切り替える。
例えば、diff が操作の許可可否を決定する認可ヘルパーを変更した場合を想像してください。関連するレビューの質問は「このヘルパーを呼び出すすべてのファイルの完全な内容を表示してほしい」ではありません。代わりに、より絞り込んだ「旧来の動作に依存しているリクエスト処理の呼び出し元はあるか」という問いが考えられます。
意図された手順は短く以下の通りです:
diff で変更されたヘルパーから始める
そのヘルパーの呼び出し元を grep で検索する
おそらくルート、ハンドラー、またはコントローラーファイルであるものを glob で検索する
最も関連性の高い呼び出し元の範囲を view で確認する
どの呼び出し元がリスクを変化させるかを判断する
このガイダンスは、エージェントが失敗した検索から回復する方法も変更しました。入力が grep の失敗を引き起こした場合、より良い次のステップは、修正されたより単純な検索です。パスが間違っている場合、より良い次のステップは隣接するパスを推測して存在するものを何でも読むことではなく、glob を使用することです。これにより、小さなツールの失敗が大きな探索ループに発展することを防ぐよう、エージェントを誘導しました。
image図 2:後 — プロンプトが指向したレビューに特化した動作の簡略化されたイラスト:diff にアンカーを留め、grep と glob で絞り込み、view で焦点を絞った範囲を読む。
言葉の表現はさほど大きく変わらなかったものの、その効果は絶大でした。エージェントのリズムを「閲覧、読解、再検索」から「質問、絞り込み、読解、判断」という流れに変えたのです。
ベンチマークはスコアだけでなく、動作のデバッグも可能にする
共有されたハーン(枠組み)がツールを提供し、内部の Copilot コードレビュー用ベンチマークフィードバックループをもたらしました。
同じレビュー例を実行し、ツールのトレースを比較し、指示を更新して再実行することができました。これにより、具体的な質問が可能になりました:
エージェントはまず絞り込みを行ったのか、それとも広く読解したのか?
独立した検索をバッチ処理したか?
理由がある場合にのみ view(表示)ツールを呼び出したか?
ツールの指示変更はツールのエラーを減らしたのか、単に別の場所へ移しただけなのか?
トレースは diff(差分)からの証拠に焦点を維持していたか?
レビューは私たちが重視する品質指標を依然として保持していたか?
最も有用なシグナルは「指示が改善された」というものではなく、より具体的なものでした。エージェントが行うツールの呼び出し回数はほぼ同じでしたが、検索を繰り返し拡大するのではなく、関連性の高い証拠に時間を割くようになったのです。
これにより、製品レベルの成果と理解可能なエンジニアリングの動作が結びつきました。スコアが変動した理由を推測する代わりに、それを生み出したワークフローを検証できるようになりました。
その結果:平均レビューコストが約 20% 低下
本番環境では、調整された動作により、対照群と比較して平均レビューコストが約 20% 低下しました。重要なのは、出荷を阻止する品質上の問題を示すシグナルは現れなかったことです。
この削減はツール自体によるものではなく、それを取り巻くワークフローによるものでした。共有コード探索ツール、Copilot コードレビューのカスタムツール指示、および内部ベンチマークにより、エージェントの振る舞いを十分に可視化し、調整できるようになりました。
これはエージェントで構築する際に重要な枠組みです。ツールを実装の詳細として扱い、あるツールを別のツールに置き換えて最終的な回答を比較するという誘惑に駆られることがあります。しかし、エージェントにとってツールのインターフェースは製品体験の一部です。それはエージェントが何に注意を向けるか、どのように検索するか、どの程度のコンテキストを次へ引き継ぐか、そして十分な証拠があると感じるタイミングを変化させます。
ツール説明やシステム指示は API ドキュメントに近いものです。不明確な API ドキュメントは開発者を混乱させ、非効率または誤った決定につながります。同様に、不明確なツールのプロンプトは LLM に対しても同じ影響を及ぼします。わずかな言葉遣いの変更が、エージェントの注意の向け方を変えることで、コスト、品質、調査の形状に影響を与える可能性があります。
同じツールでも異なる役割
私たちは CLI においても同様の焦点を当てたツール指示を適用しようと試みましたが、そこでは同じような成果は得られませんでした。これは有用な反例であり、この教訓に対する重要なガードレールです。
Copilot のコードレビューは、差分(diff)とレビュー質問に紐付けられています。一方、Copilot CLI はより広範な対話型コーディングタスクを扱い、探索が業務の一部となる場合もあります。単一の差分アンカーが存在しないこともあり、ユーザーは複数のやり取りを通じて方向性を変更することもあり、初期段階では適切なコンテキストが明確でないこともあります。同じ grep、glob、ビューツールが両製品で利用可能ですが、それらのツールを取り巻くワークフローは各製品の特性に合わせる必要があります。
重要な点は、共有ツールのスケーラビリティは、指示とベンチマークが実際の業務内容と一致している場合に発揮されるということです。
GitHub Copilot のコードレビュー機能を使って、ぜひご自身でお試しください。
「より良いツールが Copilot のコードレビューを悪化させた。実際に改善した方法」という記事は、もともと The GitHub Blog で公開されました。
原文を表示
Give an agent better tools and it should do better work. That’s the instinct, anyway.
When you open a pull request, Copilot code review reads the diff and explores the surrounding code to find the problems that matter before they ship. To do that, it used its own code exploration tools. So when we swapped in the better-maintained, shared tools that power the Copilot CLI, grep, glob, and view, we expected a clean upgrade.
Instead, in our benchmarks, we found that the cost of reviews was higher and fewer issues were being caught.
But the tools weren’t the problem. The instructions were. Once we rewrote them for the way a reviewer actually reads a pull request, the regression flipped into a win: roughly 20% lower average review cost, while maintaining the same review quality.
This is the story of how adjusting the workflows around the tools led us to a fix.
Same tools, wrong instincts
If you’ve built on top of an agent framework, you’ve probably inherited its tools too. They work, so you keep them, until the day your use case drifts far enough from what they were designed for that they quietly start working against you. That’s the situation we were in. Before trying to use the shared CLI tools, Copilot code review used its own code exploration tools. That tool layer was inspired by earlier agentic systems, including ideas from SWE-agent-style repository navigation and GitHub Copilot Autofix: list directories, search files, search directories, and read code. Those tools worked, but they were specific to Copilot code review, and they were designed for how models behaved at the time. Earlier agentic coding models made fewer tool calls and were worse at automatically pulling in necessary context. This meant it was more important to include all relevant information in the few tool calls that the model made.
Meanwhile, the Copilot CLI harness has a shared set of Unix-inspired code exploration tools: grep, glob, and view. That harness is also used by a growing number of Copilot agent products, including GitHub Copilot cloud agent, so harness improvements can benefit more than one product. We wanted to clean up and share infrastructure where possible, so we experimented with using the tools from the Copilot CLI harness in Copilot code review. The goal was to reduce duplicated tool implementations, create one shared place to improve code exploration tools, and make it easier to carry those improvements across Copilot products.
On paper, the migration looked simple:
Old Copilot code reviewGitHub Copilot CLIPurpose
list_dir glob Discover candidate files and directories before opening code.
search_file and search_dir grep Search code for matching text, symbols, or call sites.
read_code view Read the relevant file contents once a path or range is known.
The existing review tools were not thin wrappers. When searching for a directory or reading a code range, they could return the matched or requested lines plus extra surrounding code context. That added token cost, but it also matched how earlier models often benefited from having nearby context included automatically.
Initially, we hoped this would be a simple migration: swap one set of tools for another. But when we tested the shared tools in offline benchmarks, the review agent became less efficient and less effective. Average cost increased, and the number of useful comments dropped.
The trace revealed a browsing loop
Our internal Copilot code review benchmarks were useful because they show more than a final score. They show the path the agent took, including which tools it called, how much output came back, where errors happened, and whether it was narrowing toward evidence or widening the search.
When we first tried the shared Copilot CLI tools in offline benchmarks, the agent often behaved as if it was browsing a repository instead of investigating a pull request. It would search broadly, guess likely paths, read broadly, find more things to search, and carry that extra context forward.
imageFigure 1: Before — a simplified illustration of the general-purpose behavior we observed: widening the search, guessing paths, and accumulating context.
That pattern is understandable. Broad exploration can be useful when the task is “understand this repo.” But it’s not how a reviewer would usually review a pull request.
When I review a pull request, I start from the diff and ask targeted questions:
Where is this function called?
Is this config key used anywhere else?
Is there a test or helper with the same pattern?
What is the smallest nearby code range that explains this behavior?
I do not want to open a large part of the repository before I know what I am looking for. I want the minimal context needed to answer the question, without overloading the review with unrelated code.
That matters because every tool result becomes part of the agent’s working context. Extra file contents can be carried forward into later reasoning, increasing cost and sometimes making the review less focused. A tool result is not a disposable printout; for an agent, it’s extra tokens that stay in the context window.
The traces made that difference visible. The shared tools were not the problem. The instructions were giving the agent the wrong instincts to do an efficient and effective review.
The tools themselves worked, but their instructions were tuned for their use within the Copilot CLI and implied the wrong workflow: the agent used grep, glob, and view like a broad coding assistant instead of a reviewer. A coding assistant may map a whole area before making a change to ensure it doesn’t break some other corner of the code. On the other hand, a reviewer usually starts from the diff, asks whether the change introduced a problem, and then looks for the narrowest nearby evidence required to confirm or dismiss it.
General coding-assistant tool instructions, like the ones used by Copilot CLI or Copilot cloud agent, make sense for an interactive assistant. A developer may ask it to understand a repository, plan a change, edit files, and continue over multiple turns.
Copilot code review has a narrower job: start from a pull request diff, gather enough surrounding evidence to decide whether a change introduces a real issue, and avoid loading context that is not needed for that review question.
It was therefore clear that we couldn’t simply replace the previous Copilot code review tools with the tools from the Copilot CLI without additional prompting work. The problem became: how do we design tool instructions that use these shared tools effectively in a code review setting?
Rewriting the tool instructions for a reviewer’s workflow
The next iterations made the guidance specific to code review. The workflow we wanted Copilot code review to follow was:
Start from the diff and form specific review questions.
Use glob when the path is uncertain and grep to find candidate files, symbols, and call sites.
Batch cheap discovery before reading files.
Use view only when the agent knows which file or line range it needs.
Batch focused reads instead of alternating between one search and one read.
In oversimplified form, this was the behavior we encoded:
Generic posture: Use the available tools to inspect repository context that may be relevant.
Review-shaped guidance: Start from the diff. Narrow first with grep and glob; read exact evidence with view. If grep fails to find relevant context, retry with a simpler escaped search. If a path is wrong, pivot to glob instead of guessing nearby paths.
For example, imagine the diff changes an authorization helper that decides whether an operation is allowed. A relevant review question is not “show me the full contents of every file that calls this helper.” It could instead be the narrower: “are any request-handling callers relying on the old behavior?”
The intended path is short:
start from the helper changed in the diff
grep for callers of that helper
glob for likely route, handler, or controller files
view the most relevant caller ranges
decide whether any caller changes the risk
The guidance also changed how the agent recovered from failed searches. If an input made grep fail, the better next step was one simpler, corrected search. If a path was wrong, the better next step was glob, not guessing neighboring paths and reading whatever happened to exist. That nudged the agent away from letting a small tool failure turn into a larger exploration loop.
imageFigure 2: After — a simplified illustration of the review-shaped behavior the prompt guided toward: stay anchored to the diff, narrow with grep and glob, then read focused ranges with view.
The change was small in wording and large in effect. It changed the rhythm of the agent from “browse, read, search again” to “ask, narrow, read, decide.”
Benchmarks let us debug behavior, not just scores
The shared harness gave us the tools. The internal Copilot code review benchmarks gave us the feedback loop.
We could run the same review examples, compare tool traces, update the instructions, and run again. That let us ask concrete questions:
Did the agent narrow first, or read broadly first?
Did it batch independent searches?
Did it call view only when it had a reason?
Did a tool-instruction change reduce tool errors, or just move them somewhere else?
Did the trace stay focused on evidence from the diff?
Did the review still preserve the quality metrics we cared about?
The most useful signal was not “the instructions are better.” It was more concrete. The agent was making a similar number of tool calls, but spending more of them on relevant evidence instead of repeatedly expanding the search.
That connected product-level outcomes to understandable engineering behavior. Instead of guessing why a score moved, we could inspect the workflow that produced it.
The result: roughly 20% lower average review cost
In production, the tuned behavior showed roughly 20% lower average review cost compared with the control. Importantly, it did not show a quality signal that could block shipping.
The reduction did not come from the tools by themselves, it came from the workflow around them. Shared code exploration tools, Copilot code review custom tool instructions, and internal benchmarks made the agent’s behavior visible enough to tune.
That framing matters when building with agents. It can be tempting to treat tools as implementation details by swapping one tool for another, then comparing the final answer. But for an agent, the tool surface is part of the product experience. It changes what the agent notices, how it searches, how much context it carries forward, and when it decides it has enough evidence.
Tool descriptions and system instructions are closer to API documentation. Unclear API docs can leave a developer confused and lead to inefficient or wrong decisions. Unclear tool prompting can do the same for an LLM; a small wording change can affect cost, quality, and the shape of the investigation because it changes how the agent spends its attention.
Same tools, different job
We also tried to apply the same kind of focused tool instructions in the CLI, where it did not produce the same kind of win. That is a useful counterexample, and an important guardrail for the lesson.
Copilot code review is anchored to a diff and a review question. Copilot CLI handles broader, interactive coding tasks where exploration can be part of the job. There may be no single diff anchor, the user may change direction over multiple turns, and the right context may not be obvious at the start. The same grep, glob, and view tools can support both products, but the workflow around those tools has to match the product.
The takeaway is that shared tools scale when the instructions and benchmarks match the job.
Try it out yourself using GitHub Copilot code review.
The post Better tools made Copilot code review worse. Here’s how we actually improved it. appeared first on The GitHub Blog.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み