VS Codeのエージェントモードを拡張するには、を試してください!

2024年5月 (バージョン 1.90)

アップデート 1.90.2: このアップデートでは、これらの問題に対処しています。

アップデート 1.90.1: このアップデートでは、これらの問題に対処しています。

ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


Visual Studio Code 2024年5月リリースへようこそ。このバージョンには多くのアップデートが含まれており、皆様に気に入っていただけることを願っています。主なハイライトの一部を以下にご紹介します。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.comUpdatesにアクセスしてください。Insiders: 新機能をできるだけ早く試したいですか?毎晩のInsidersビルドをダウンロードして、最新のアップデートをすぐに試すことができます。

アクセシビリティ

アクセシビリティヘルプダイアログからキーバインディングを設定

アクセシビリティヘルプダイアログは、機能やビューの重要なコマンドの概要を提供します。コマンドにキーバインディングが割り当てられていない場合、アクセシビリティヘルプダイアログ内から⌥K (Windows, Linux Alt+K)で設定できるようになりました。

実験的: シグナル遅延設定

設定 Debounce position changes が有効になっている場合、設定 Signal options delays を使用して、様々なアクセシビリティシグナルのデバウンス時間をカスタマイズできます。

Workbench

エディタータブの複数選択

複数のタブを同時に選択できるようになり、複数のエディターに対して一度にアクションを適用できます。この新機能により、1つのアクションで複数のタブを移動、固定、または閉じることができます。選択範囲に別のタブを追加するには、Ctrl + Click (macOS では Cmd + Click) を使用します。タブの範囲を選択するには、Shift + Click を使用します。

エディターアクションを常に表示

Always Show Editor Actions 設定を導入します。この設定を有効にすると、エディターがアクティブかどうかにかかわらず、各エディターグループのエディタータイトルアクションが常に表示されます。

この設定が有効でない場合 (デフォルト値)、エディターアクションはエディターがアクティブな場合にのみ表示されます。

Editor Actions of each group when the setting is disabled

この設定を有効にすると、エディターがアクティブでない場合でも、エディターアクションは常に利用可能になります。

Editor Actions of each group when the setting is enabled

`disable-lcd-text` をランタイム引数として設定

disable-lcd-text を使用すると、Windows で RGB サブピクセルレンダリングを無効にできます。disable-lcd-text 設定は、argv.json ファイルのランタイム引数としてサポートされるようになりました。以前は、ドキュメント化されていない CLI フラグとしてのみ利用可能でした。ランタイム引数を設定するには、基本設定: ランタイム引数を構成コマンドを使用します。

次の画像では、左右で比較されており、左側では disable-lcd-texttrue、右側では false に設定されています。

Comparison showing that disable-lcd-text disables RGB subpixel rendering

テーマ: Light Pink (vscode.dev でプレビュー)

新しいウィンドウのカスタムプロファイルを構成

以前は、新しい VS Code ウィンドウを開くと、アクティブなウィンドウのプロファイル、またはアクティブなウィンドウがない場合はデフォルトプロファイルが使用されていました。新しいウィンドウを開くときに使用するプロファイルを、window.newWindowProfile 設定を構成することで指定できるようになりました。

Configure custom profile for new window

ソース管理

入力/リソースグループコマンドにフォーカス

このマイルストーンでは、いくつかのワークベンチコマンドを追加しました。これにより、それらのキーボードショートカットを作成できます。

  • 次または前のソース管理入力フィールドにフォーカス: workbench.scm.action.focusNextInput, workbench.scm.action.focusPreviousInput
  • リポジトリ内の次または前のリソースグループにフォーカス: workbench.scm.action.focusNextResourceGroup, workbench.scm.action.focusPreviousResourceGroup

ノートブック

セル選択内で検索

ノートブック内で、選択したセルの特定の範囲内を検索するために、検索コントロールを使用できるようになりました。

notebook.experimental.find.scope.enabledtrue に設定すると、検索コントロールにセル選択内で検索トグルが利用可能になります。その後、セルの範囲を選択し、検索コントロールを開くか、すでに開いている場合は「セル選択内で検索」ボタンを選択できます。

ノートブックの書式設定コードアクション

ノートブックは、notebook.format コードアクションの種類プレフィックスで定義される新しい種類のコードアクションをサポートするようになりました。これらのコードアクションは、明示的な書式設定要求 (コマンド ノートブック: ノートブックをフォーマットを使用) または保存時の書式設定要求を介して自動的にトリガーできます。

これらは、ワークスペース編集とノートブック編集を使用することで、より強力な書式設定を提供するために使用できます。開始するには、vscode-extension-samples リポジトリの拡張機能の例を確認してください。

ターミナル

⚠️ Canvas レンダラーの削除

Canvas レンダラーは VS Code 1.89 リリースで非推奨となり、完全に削除されました。これは、WebGL2 をサポートしない少数のマシンでは、ターミナルが DOM ベースのレンダラーを使用することを意味します。GPU アクセラレーションの詳細については、ターミナルドキュメントを参照してください。

ターミナルでの重複グリフのスケーリング

VS Code 1.88 リリースでプレビュー機能として導入された設定 terminal.integrated.rescaleOverlappingGlyphs が、デフォルトで有効になりました。この機能は、あいまいな幅の文字をカバーすることを意図している後続のセルと重なるグリフを再スケーリングします。これらのグリフは、背後の pty/Unicode バージョンが想定しているものとフォントグリフが一致しない場合があります。

例えば、ほとんどのフォントではローマ数字のUnicode文字 (U+2160+) は通常複数のセルを占めるため、この設定が有効になっている場合は水平方向に再スケーリングされます。

スケーリングなし

Before the glyphs for Ⅷ and Ⅻ depending on the font would always overlap the following cells

スケーリングあり

After the glyphs for Ⅷ and Ⅻ depending on the font are rescaled horizontally to fit a single cell

拡張機能への貢献

GitHub Copilot

チャットにコンテキストを添付

チャットプロンプトをより具体的にするために、チャットメッセージにコンテキストを追加できます。ワークスペースシンボルなど、より多くの種類のコンテキストをチャットメッセージに添付できるようになりました。以前は、ファイルや現在の選択範囲を参照するために「#」記号を使用していました。現在では、チャットビューの入力フィールドにある📎アイコンを選択するか、⌘/ (Windows, Linux Ctrl+/) を入力することで、チャットメッセージにコンテキストを添付できます。

ヒント: コンテキストピッカーを開いたまま、右矢印キーを使用してバックグラウンドで素早くコンテキストを添付できます。エディターにいる場合、選択範囲を右クリックしてCopilot > 選択範囲をチャットに追加を選択することもできます。

Bing検索とエンタープライズナレッジベースを使用して質問する

VS Code のGitHub Copilot Enterprise ユーザーは、ウェブ検索結果や企業独自のナレッジベースからのコンテキストで強化された質問ができるようになりました。この機能を試すには、Copilot Chat の最新プレリリース版をインストールしてください。

チャットビューでは、ウェブ検索を利用するために @github Node.js の最新 LTS は何ですか? #web のような質問をすることができます。Copilot によって参照された検索結果は、チャット応答のUsed References セクションに表示されます。

Web search results in Copilot Chat

また、ドキュメントを含む Markdown リポジトリの集合体である、企業独自のナレッジベースに関する質問も VS Code から直接行えます。利用可能なナレッジベースから選択するには、@github #kb と入力するだけです。同様に、Copilot によって参照されたナレッジベースのスニペットは、チャット応答のUsed References セクションに表示されます。

これにより、Copilot Enterprise ユーザーは、既存のチャット変数 (例: #file#selection) を使用して、検索結果と内部ドキュメントをエディターコンテキストと組み合わせることができます。ぜひお試しいただき、https://github.com/microsoft/vscode/issues までフィードバックをお寄せください!

チャットコードブロックでの IntelliSense

Copilot が生成したコードブロック内で基本的な IntelliSense をサポートするようになりました。これにより、エディターですでに使用している IntelliSense ツールを多く利用でき、生成されたコードをよりよく理解するのに役立ちます。

Hover IntelliSense in Copilot chat code block

サポートされている IntelliSense 機能には以下が含まれます

  • ctrl click / cmd click または F12 を使用して定義へ移動
  • ホバー
  • 実装へ移動
  • 型定義へ移動

IntelliSense は @workspace と共に使用することもでき、Copilot の応答で使用されているワークスペースシンボルについて知ることができます。

TypeScript、JavaScript、HTML、CSS のコードブロックに対する IntelliSense はすぐに利用できます。追加の言語サポートについては、その言語の拡張機能をインストールしてみてください。ただし、すべての言語拡張機能がすでにコードブロック IntelliSense をサポートしているわけではありません。まだこれをサポートしていない言語については、機能リクエストを提出してください。

ファイル名とシンボルのリンクを追加することで、チャット応答を改善しました。これらのリンクを選択すると、エディターで対応するファイルまたはシンボルに移動できます。

Clickable links for symbols used with /explain

Clickable file and symbol links for an @workspace question

インラインチャットとチャットビューの間でアクティブなチャットを移動

完了済みまたはアクティブなチャットリクエストを、インラインチャットからチャットビューに移動できるようになりました。この機能を使用して、インラインチャットを整理し、会話をより永続的な場所に移動することができます。リクエストを移動するには、チャット入力ボックスの隣にあるチャットアイコンを選択します。

Move a chat conversation from inline chat to the Chat view

自動リネームの提案

Copilot Chat 拡張機能を使用している場合、シンボルをリネームすると、Copilot が提供するリネームの提案が自動的にトリガーされるようになりました。この機能は、設定 github.copilot.renameSuggestions.triggerAutomatically を使用してオフにできます。

Python

テストのバグ修正

Python Testing Rewrite を使用する際の pytest のエクスペリエンスが改善され、pytest の cwd を VS Code ワークスペースルートの隣に設定する場合、および関数名がクラス間で重複する場合にテストエクスプローラーにパラメーター化されたテストを表示するためのサポートが強化されました。

さらに、テスト実行のためにシェルを有効にするため、システム構成スクリプトのパスを PATH に追加することで、いくつかのテスト検出失敗シナリオを減らしました。

実験的: IntelliSense と構文ハイライトを備えた Python ネイティブ REPL

IntelliSense や構文ハイライトなどの機能を備えたエディターのような REPL 環境で Python コードを実行できるようになりました。これにより、REPL とのやり取りがより効率的になります。この機能を有効にするには、settings.json ファイルで "python.REPL.sendToNativeREPL": true を設定します。これにより、Shift+Enter選択/行を実行 で Python ネイティブ REPL でコードが実行されます。

settings.json"python.REPL.sendToNativeREPL": false を設定することで、ターミナル内の Python REPL ( >>> ) を使用することを選択できます。さらに、settings.json"interactiveWindow.executeWithShiftEnter": false 設定を追加すると、Python の元の対話型インタープリターと同様に、Python ネイティブ REPL は Enter でスマートに実行されます。

GitHub プルリクエストとイシュー

プルリクエストとイシューの作業、作成、管理を可能にする GitHub Pull Requests 拡張機能の進捗がありました。その他のハイライトについては、拡張機能の 0.90.0 リリース用の変更ログを参照してください。

VS Code 音声

VS Code Speech 拡張機能にテキスト読み上げ機能のサポートを追加しました。新しい設定 accessibility.voice.autoSynthesize を有効にすると、音声が入力としても使用された場合に Copilot Chat の応答を自動的に読み上げることができます。

入力フィールドのマイクアイコンが変化し、テキストが読み上げられていることを示していることに注目してください。合成を中断するには、アイコンを選択するか、Escape を押してください。

各チャット応答には新しいスピーカーアイコンも表示され、応答を選択的に読み上げることができます。

Text to Speech for a Chat Response

既存の accessibility.voice.speechLanguage 設定を介して、テキスト読み上げに使用される言語を変更できます。

プレビュー機能

PowerShell 用の VS Code ネイティブ IntelliSense

信頼性のいくつかの改善に加え、ターミナルでの PowerShell IntelliSense に以下の変更を加えました。

  • terminal.integrated.shellIntegration.suggestEnabledterminal.integrated.suggest.enabled に変更されました。
  • 新しい terminal.integrated.suggest.quickSuggestions は、空白の後にタイプしたときに提案を表示するかどうかを制御します。
  • 新しい terminal.integrated.suggest.suggestOnTriggerCharacters は、/\、または - をタイプしたときに提案を表示するかどうかを制御します。

TypeScript 5.5

今後の TypeScript 5.5 リリースに対するサポートの改善を続けました。このリリースの詳細については、TypeScript 5.5 ベータブログ投稿イテレーション計画を参照してください。

TypeScript 5.5 ベータ版の使用を開始するには、TypeScript Nightly 拡張機能をインストールしてください。フィードバックを共有し、TypeScript 5.5 でバグが発生した場合はお知らせください。

Web 用イシューレポーター

VS Code for the Web でのイシュー報告フローを、デスクトップユーザーが現在利用しているものと一致するように改善しました。ヘルプ: イシューの報告を選択すると、新しいウィンドウでイシューレポーターページが開き、ユーザーは必要に応じてバグの種類、ソース、拡張機能を選択できます。拡張機能情報、システム情報などは、GitHub で作成されるイシューに自動的に添付されます。

この機能は本リリースではデフォルトで無効になっていますが、issueReporter.experimental.webReporter 設定をオンにしてフィードバックを共有してください。

拡張機能作成

拡張機能に esbuild を使用

TypeScriptWeb 用の yo code 拡張機能ジェネレーターに、バンドラーとして esbuild を使用するオプションが追加されました。esbuild を選択すると、esbuild.js ビルドスクリプトが作成され、package.json にスクリプトエントリが、.vscode/tasks.json にビルドタスクが追加されます。

既存の拡張機能で esbuild を使用するには、拡張機能のバンドルWeb 拡張機能のガイドを参照してください。

サンプルプロジェクトは vscode-extension-samples/esbuild-sample で見つけることができます。

チャットと言語モデル API

拡張機能がチャットに参加し、言語モデルにアクセスできるようにする API を完成させました。詳細については、拡張機能のサンプルおよびチャット拡張機能のドキュメントページを参照するか、Microsoft Build カンファレンスで発表したGitHub Copilot で VS Code 拡張機能を強化するという講演をご覧ください。

重要: これらの API は最終決定済みですが、現時点では VS Code Insiders でのみ利用可能です。

チャット参加者

チャット参加者 API を使用すると、拡張機能は GitHub Copilot Chat を、チャット入力フィールドで @ を使用して呼び出すことができるチャット参加者で拡張できます。参加者は、マークダウン、ファイルツリー、VS Code コマンドを実行するボタン、またはその他の種類のコンテンツでユーザーリクエストに応答できます。

Chat Participant example in the Chat view

言語モデル

言語モデル API は、gpt-3.5 や gpt-4 などの Copilot のチャットモデルへのアクセスを可能にします。この API はチャット参加者だけでなく、他の機能を強化するためにも使用できます。この API は、チャットリクエストとトークンカウントに使用されるLanguageModelChat オブジェクトを中心に構築されています。

チャットオブジェクトにアクセスする唯一の方法は、vscode.lm.selectChatModels 関数です。この関数は、ベンダー、ファミリー、バージョン、または識別子など、チャットモデルの様々なプロパティを絞り込むセレクターを受け入れます。値は比較的自由形式であり、それらを提供する拡張機能のドキュメントで調べる必要があります。現在、Copilot Chat 拡張機能のみがチャットモデルを提供しています。これは copilot ベンダーを使用しており、現在のファミリーは gpt-3.5-turbogpt-4 ですが、変更される可能性があります。

このスニペットは、copilot ベンダーからすべてのチャットモデルを選択する方法を示しています。

const models = await vscode.lm.selectChatModels({
  vendor: 'copilot'
});

if (models.length === 0) {
  // no models available
  return;
}

selectChatModels を呼び出す際に非常に重要な点が2つあります。

  1. モデルが利用できない場合、関数は空の配列を返します。拡張機能はこのケースを処理する必要があります。
  2. Copilot のチャットモデルは、拡張機能がそれらを使用する前にユーザーからの同意を必要とします。同意は認証ダイアログとして実装されます。そのため、selectChatModels はコマンドのようなユーザーが開始したアクションの一部として呼び出すべきであり、突然呼び出すべきではありません。

チャットオブジェクトがあれば、拡張機能はそれを使用してチャットリクエストを送信できるようになりました。次のスニペットは、チャットリクエストを送信し、応答ストリームを処理する方法を示しています。

// take the first model and say "Hello"
const [chat] = models;
const messages = [vscode.LanguageModelChatMessage.User('Hello')];
const response = await chat.sendRequest(messages);

// the response is always an async iterable that can be consumed with for-await
for await (const part of response.text) {
  console.log(part);
}

これが言語モデル API の要点です。より完全な例については、拡張機能のサンプルを参照してください。さらなるサンプル、ドキュメント、および API の拡張にご期待ください。

VS Code 用の Java 拡張機能は、すでに言語モデル API を使用して、Java コードの Copilot ベースのリライト機能を提供しています。これらのアップデートの詳細については、Visual Studio Code での Java 2024年5月のブログ投稿を参照してください。

@vscode/prompt-tsx ライブラリ

VS Code 用の GitHub Copilot 拡張機能の開発を支援するために、複雑なプロンプトを宣言し、LLM のコンテキストウィンドウの制限に従ってそれらをチャットメッセージに変換するための TSX ベースのライブラリを開発し、公開しました。この開発にあたり、Anysphere のpriompt ライブラリからインスピレーションを得ました。チャットおよび言語モデル API の使用を計画している拡張機能の作成者の方は、このライブラリの最新のアルファリリース @vscode/prompt-tsx を試してみてください。

GitHub Apps を介した GitHub Copilot の拡張

GitHub App を提供することで GitHub Copilot を拡張することも可能です。この GitHub App はチャットビューでチャット参加者として貢献でき、@ で呼び出すことができます。GitHub App はサービスによって支えられており、github.com、Visual Studio、VS Code など、すべての GitHub Copilot サーフェスで動作します。GitHub Apps は VS Code API への完全なアクセス権を持ちません。GitHub App を介して GitHub Copilot を拡張するには、Copilot Partner Program に参加する必要があります。詳細については、Microsoft Build カンファレンスで発表したGitHub Copilot の拡張という講演をご覧ください。

デバッグスタックフォーカス API

VS Code は、新しい API を介して、デバッグビューでどのスタックフレームとスレッドがフォーカスされているかを公開するようになりました。vscode.debug.activeStackItem は現在フォーカスされているスタックアイテム (スレッドまたはスタックフレーム) を取得し、vscode.debug.onDidChangeActiveStackItem はそれが変更されたときに発生するイベントです。

これは、DebugAdapterTracker を使用するものなど、VS Code のデバッグ機能を拡張する API と組み合わせて使用すると便利です。デバッガー拡張機能の作成について詳しく知る。

TestRunRequest.preserveFocus API

以前は、拡張機能によってトリガーされたテスト実行では、UI が開始した実行と同じようにテスト結果ビューにフォーカスが移動することはありませんでした。この動作は、TestRunRequest の作成時に設定できる preserveFocus フラグを介して設定可能になりました。このフラグは、後方互換性を維持するためにデフォルトで true に設定されています。

提案されたAPI

属性付きテストカバレッジ

テストごとにテストカバレッジを割り当てることを可能にする API を開発中です。これにより、ユーザーはどのテストがどのコードを実行したかを確認でき、エディターに表示されるカバレッジとテストカバレッジビューの両方をフィルタリングできます。詳細と更新については、vscode#212196 を確認してください。

ホバー詳細度レベル

前回のマイルストーンで、詳細度を増減できるホバーを提供する新しい API が提案されました。このマイルストーンでは、API が変更され、HoverVerbosityRequestverbosityDelta を使用してホバー詳細度レベルの相対的な増減を通知するようになりました。以前は、HoverVerbosityRequest は列挙型 HoverVerbosityAction を使用して、詳細度を増やすか減らすかを通知していました。

エンジニアリング

起動時のメモリ効率の追跡

Windows、macOS、Linux で毎日、VS Code Insiders の起動パフォーマンスを測定しています。私たちの主な関心は、テキストファイルが開かれるまでの起動速度です。

今月、起動をさらに高速化するために改善する予定の別のメトリックを追加しました。それは、どれだけのメモリを消費し、そのメモリのどれだけが V8 によってガーベージコレクションされるかです。この数値を減らすことができれば、V8 のガーベージコレクション実行による起動時間への影響を少なくすることができます。

Memory consumption statistics for VS Code

Electron 29 アップデート

このマイルストーンでは、安定版リリースのユーザーに Electron 29 アップデートを提供します。このアップデートには、Chromium 122.0.6261.156 および Node.js 20.9.0 が含まれています。Insiders ビルドでセルフホストし、早期のフィードバックを提供してくださった皆様に感謝いたします。

注目すべき修正点

  • 212386 ローカル履歴: 以前に削除されたファイルのエントリが保持されない
  • 213645 Firefox で補助ウィンドウが動作しない
  • vscode-js-debug#2000/2002 JavaScript デバッガーが高速化され、特にソースマップのリネーム処理が改善されました。

ありがとうございます

最後に、VS Codeの貢献者の皆様に心からの感謝を申し上げます。

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-eslintへの貢献者

vscode-extension-samplesへの貢献

vscode-generator-codeへの貢献者

vscode-hexeditorへの貢献

vscode-languageserver-nodeへの貢献者

vscode-mypyへの貢献

vscode-remote-try-dotnet への貢献

language-server-protocolへの貢献者

monaco-editorへのコントリビューション