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

アップデート 1.90.2: このアップデートでは、以下のissueに対処しています。

アップデート 1.90.1: このアップデートでは、以下のissueに対処しています。

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


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

これらのリリースノートをオンラインで読むには、Updatescode.visualstudio.com内)にアクセスしてください。Insiders の皆様へ: 最新機能をいち早く試してみたいですか? nightly Insiders ビルドをダウンロードして、最新アップデートをいち早くお試しください。

ユーザー補助機能

ユーザー補助ヘルプダイアログからキーバインドを設定する

ユーザー補助ヘルプダイアログでは、機能またはビューの重要なコマンドの概要を確認できます。コマンドにキーバインドが割り当てられていない場合、⌥K (Windows、Linux Alt+K)を使用して、ユーザー補助ヘルプダイアログ内から設定できるようになりました。

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

設定 Debounce position changes が有効になっている場合、設定 Signal options delays を使用して、さまざまなユーザー補助シグナルのデバウンス時間をカスタマイズできます。

ワークベンチ

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

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

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

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

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

Editor Actions of each group when the setting is disabled

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

Editor Actions of each group when the setting is enabled

runtime 引数として disable-lcd-text を設定する

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

次の画像では、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.focusNextInputworkbench.scm.action.focusPreviousInput
  • リポジトリ内の次のまたは前のリソースグループにフォーカス: workbench.scm.action.focusNextResourceGroupworkbench.scm.action.focusPreviousResourceGroup

ノートブック

セル選択内の検索

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

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

ノートブックのコード整形アクション

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

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

ターミナル

⚠️ キャンバスレンダラーの削除

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

ターミナルでの重なり合うグリフのリスケール

VS Code 1.88 リリースでプレビュー機能として導入された設定 terminal.integrated.rescaleOverlappingGlyphs がデフォルトで有効になりました。この機能は、曖昧幅文字をカバーすることを意図した後のセルと重なり合うグリフをリスケールします。これらのセルには、バッキング pty/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 ユーザーは、Web 検索結果とエンタープライズの ナレッジベース からのコンテキストで強化された質問をできるようになりました。この機能を試すには、Copilot Chat の最新プレリリース版をインストールしてください。

チャットビューで、@github Node.js の最新 LTS は何ですか? #web のように質問して、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-copilot-release でフィードバックをお寄せください!

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

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

Hover IntelliSense in Copilot chat code block

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

  • ctrl クリック / cmd クリック または 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 REPL は、Python の元のインタラクティブインタープリターと同様に、Enter でスマートに実行されます。

GitHub Pull Requests and Issues

GitHub Pull Requests 拡張機能でさらに進展がありました。この拡張機能を使用すると、プルリクエストと issue を操作、作成、および管理できます。その他のハイライトについては、拡張機能の 0.90.0 の変更履歴を確認してください。

VS Code Speech

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 用 Issue Reporter

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

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

拡張機能の作成

拡張機能に esbuild を使用する

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

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

サンプルプロジェクトは、vscode-extension-samples/esbuild-sample にあります。

Chat および Language Model API

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

重要: これらの API は最終決定されていますが、現在は VS Code Insiders でのみ使用できます。

チャット参加者

チャット参加者 API を使用すると、拡張機能は、チャット入力フィールドで @ で呼び出すことができるチャット参加者で GitHub Copilot Chat を拡張できます。参加者は、Markdown、ファイルツリー、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 拡張機能は、Java コード用の Copilot ベースの書き換え機能を提供するために、すでに Language Model API を使用しています。これらのアップデートの詳細については、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 App は、VS Code API へのフルアクセス権を持っていません。GitHub App を介して GitHub Copilot を拡張するには、Copilot パートナープログラムに参加する必要があります。詳細については、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 が変更され、HoverVerbosityRequest がホバー詳細レベルの相対的な増減を通知するために verbosityDelta を使用するようになりました。以前は、HoverVerbosityRequest は、詳細度を上げるか下げるかを通知するために enum 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 Aux ウィンドウが Firefox で動作しない
  • vscode-js-debug#2000/2002 JavaScript デバッガーが高速化 (特にソースマップの名前変更の処理)

謝辞

最後になりましたが、VS Code のコントリビューターの皆様に心から感謝申し上げます。

Issue tracking

Issue tracking への貢献

プルリクエスト

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 への貢献