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

2023年8月 (バージョン 1.82)

更新 1.82.1: この更新プログラムは、このセキュリティの問題に対処しています。

更新 1.82.2: この更新プログラムは、これらのの問題に対処しています。

更新 1.82.3: この更新プログラムは、このセキュリティの問題に対処しています。

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


Visual Studio Code の 2023 年 8 月リリースへようこそ。このバージョンでは多くの更新が行われており、気に入っていただけることを願っています。主なハイライトの一部を以下に示します。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com更新 にアクセスしてください。

Insiders: 新機能をいち早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。

アクセシビリティ

ウィンドウタイトルにフォーカスされたビュー

window.title 設定に ${focusedView} 変数が追加され、ビューが現在フォーカスされている場合、タイトルバーにビューの名前が表示されるようになりました。

インライン補完のアクセシブルビュー

GitHub Copilot 拡張機能などからのインライン補完は、アクセシブルビューで検査できるようになりました。

ワークベンチ全体のナビゲーションの一貫性の向上

前回のイテレーションでは、入力コントロール (検索またはフィルター入力など) とその結果の間を移動する際のエクスペリエンスを、拡張機能ビュー、キーボードショートカットエディターなどのコンポーネント間で一貫させるために、⌘↓ (Windows, Linux Ctrl+Down) および ⌘↑ (Windows, Linux Ctrl+Up) を使用して改善しました。これは、設定エディターと GitHub プルリクエストコメントコントロールにも拡張されました。

これは、ターミナルとターミナルアクセシブルバッファー間の移動にも機能します。

ターミナルアクセシブルバッファーのキーバインドを更新

以前は、ターミナルアクセシブルバッファーは Shift+Tab で開かれていました。これは、一部のシェルで既存のキーボードショートカットと競合していました。そのため、他のアクセシブルビューと一致させるために、そのキーバインドを削除し、⌘↓ (Windows, Linux Ctrl+Down) および ⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2) を優先しました。

アクセシブルビューのアクション

アクセシブルビューのアクションにより、スクリーンリーダーのユーザーは、特定の機能の次/前に移動したり、アクセシビリティの詳細設定を無効にしたりできます。これらのアクションは、現在のコンテキストを維持できるように、ビューの便利なツールバー内に存在します。

アクセシブルビューのシンボルへ移動

アクセシビリティヘルプダイアログと一部のアクセシブルビューに、コンテンツを素早く移動できるように**シンボルへ移動** (⇧⌘O (Windows, Linux Ctrl+Shift+O)) アクションが追加されました。

実行後にターミナルアクセシブルバッファーにフォーカス

ターミナルに terminal.integrated.focusAfterRun 設定が追加され、ユーザーは **ターミナル: アクティブなターミナルで選択したテキストを実行** が呼び出されたときに、ターミナルのアクセシブルバッファー (accessible-buffer)、ターミナル自体 (terminal)、または何も (none) フォーカスするかどうかを指定できるようになりました。

ワークベンチ

組み込みのポート転送

VS Code には、組み込みのポート転送システムが搭載されました。この機能により、ローカルで実行されているサービスをインターネット経由で他の人やデバイスと共有できます。使用するには、パネル領域にある**ポート**ビュー (**ポート: ポートビューにフォーカス**) で**ポートを転送**ボタンを選択します。

Forward a Port button displayed in the Ports view

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

ポート転送の詳細については、ポート転送ユーザーガイドを参照してください。

コマンドセンターがデフォルトで有効に

コマンドセンターは数ヶ月前に、VS Code を素早く見つけて操作する方法として導入されました。コマンドパレットでコマンドを見つけたり、タスクを実行したり、その他の素早い操作のための起動パッドとして使用できます。コマンドセンターをタイトルバーに表示する実験を行って、肯定的なフィードバックが得られたため、デフォルトで有効にすることにしました。

コマンドセンター、および戻る/進むボタンを使用したビデオを次に示します。

コマンドセンターには、VS Code 内のあらゆるものを見つける中心となる大きな可能性を見出しており、今後もさらなる改善にご期待ください!

: コマンドセンターを非表示にしたい場合は、タイトルバーを右クリックし、ドロップダウンメニューのコマンドセンターエントリのチェックを外してください。

キーボードまたはマウスからのピン留めされたエディターの閉じ方を制御

新しい設定 workbench.editor.preventPinnedEditorClose が追加され、ピン留めされたタブがエディターを閉じるためのキーボードショートカットまたはマウスの中クリックにどのように応答するかをより詳細に制御できるようになりました。デフォルトでは、ピン留めされたタブはキーボードまたはマウスの操作で閉じられません (デフォルト値 keyboardAndMouse)。この設定は必要に応じて変更できます。

  • keyboardAndMouse - ピン留めされたタブは、キーボードショートカットまたはマウスの中クリックでは閉じません (1.82.x 以降のデフォルト)。
  • keyboard - ピン留めされたタブは、キーボードショートカットでは閉じません (1.81.x までのデフォルト)。
  • mouse - ピン留めされたタブは、マウスの中クリックでは閉じません。
  • never - ピン留めされたタブは、常にキーボードショートカットまたはマウスの中クリックで閉じます。

ステータスバーの新しいテーマカラーと更新されたテーマカラー

ステータスバーにはすでに多くのテーマカラーが用意されています。ホバー時の前景と背景のテーマを設定できるように、さらに多くの色が追加されました。

  • statusBarItem.errorHoverBackground
  • statusBarItem.errorHoverForeground
  • statusBarItem.warningHoverBackground
  • statusBarItem.warningHoverForeground
  • statusBarItem.remoteHoverBackground
  • statusBarItem.remoteHoverForeground
  • statusBarItem.offlineHoverBackground
  • statusBarItem.offlineHoverForeground

以下の2つの色名は、色がステータスバー全体に適用されず、リモートインジケーターのみに適用されるようになったため、更新されました。

  • statusBar.offlineBackgroundstatusBarItem.offlineBackground に変更
  • statusBar.offlineForegroundstatusBarItem.offlineForeground に変更

エディター

スティッキースクロール

今回のイテレーションでは、エディターの上部で利用できるスティッキースクロール UI にいくつかの改善が加えられました (**表示: スティッキースクロールを切り替える**)。

  • 現在、デフォルトでは、エディターの水平スクロールバーがスクロールされると、スティッキースクロールが横方向にスクロールされます。この機能は、editor.stickyScroll.scrollWithEditor を無効にすることでオフにできます。
  • Shift キーを押しながらスティッキースクロール行にカーソルを合わせると、スコープの最終行を表示できます。Shift キーを押しながら行をクリックすると、エディターカーソルがスコープの最終行に移動します。
  • 折りたたみアイコンがスティッキースクロールガッターに追加されました。これらのアイコンのレンダリングは、エディターガッターの折りたたみアイコンのレンダリングを制御する設定 editor.showFoldingControls に従います。

保存時に JSON をソート

JSON または JSONC (コメント付き JSON) ファイルを保存時にソートできるようになりました。この機能を有効にするには、設定 json.sortOnSave.enable を使用します。

キーボードによるコードアクションとクイックフィックスのナビゲーション

利用可能なメニューオプションに対応するキーワードや文字を入力することで、クイックフィックス、コードアクション、またはソース管理メニュー ("アクション" コントロールを使用) を素早く移動できるようになりました。フィルターはあいまい一致を利用し、検索は最初の文字やプレフィックスに限定されず、ラベルテキスト全体も含まれます。

Example of searching "Surround" or "Read" in the Refactor menu

差分エディター

今回のリリースでは、新しい差分エディターをデフォルトで有効にしました。また、新しい差分エディターのいくつかの機能を改善し、多くのバグを修正しました。

移動したコードの検出

今回のイテレーションでは、移動したコード検出機能を洗練させました。これは "diffEditor.experimental.showMoves": true を使用するか、差分エディターのコンテキストメニューで有効にできます。有効にすると、同じファイル内でコードブロックが1つの場所から別の場所に移動したことが検出され、コードブロックがどこに移動したかを示す矢印が描画されます。

コードの移動は、わずかに変更された場合でも検出されます。**比較**ボタンを使用して、移動前と移動後のブロックを比較できます。

Moved code detection demo

変更されていないコードヘッダーを折りたたむ

"diffEditor.hideUnchangedRegions.enabled": true を使用するか、エディターのコンテキストメニューでマップアイコンを選択して、変更されていないコードブロックの折りたたみを有効にします。

このリリースでは、折りたたまれたコードブロックのシンボルを示すパンくずリストが追加されました。パンくずリストの項目をクリックすると、選択した項目が表示されます。

Collapsed code headers

動的なレイアウト

差分エディターの幅が狭すぎる場合、エディターは自動的にインラインビューに切り替わります。エディターが再び十分な幅になると、以前のレイアウトが復元されます。この動作を無効にするには、"diffEditor.useInlineViewWhenSpaceIsLimited": false を設定します。

ボタンのトグル状態

差分エディターのボタンのトグルスタイルを更新し、より視覚的に分かりやすくしました。

古いトグルスタイル (トグルなしとトグルあり) と暗いトグルなしボタン

Old, untoggled dim buttons, Old, toggled

新しいトグルスタイル (トグルなしとトグルあり) と影付きのトグル背景

New, untoggled visible buttons, New, toggled with shaded background

ターミナル

起動時のターミナルの復元方法を制御

新しい設定 terminal.integrated.hideOnStartup は、アプリケーションの起動時にターミナルが自動的に作成されるかどうかを制御します。以下のオプションが利用可能です。

  • never (デフォルト): 起動時にターミナルビューを非表示にしません。
  • whenEmpty: 永続的なセッションが復元されない場合にのみターミナルを非表示にします。
  • always: 永続的なセッションが復元されている場合でも、常にターミナルを非表示にします。

括弧付き貼り付けモードを無効にする

括弧付き貼り付けモードは、貼り付けたテキストを特別なシーケンスで囲むことで、シェルがその情報を使用できるようにするターミナルの機能です。この機能を有効にするシェルは適切にサポートするように意図されていますが、うまくいかない場合があり、その場合、貼り付け時に予期せず [201~ のようなテキストが表示されることがあります。この機能は明示的に無効にできるようになり、シェルが要求した場合でもこの機能は無効になります。

実行後のターミナルのフォーカス設定

ターミナルに terminal.integrated.focusAfterRun 設定が追加され、ユーザーは **ターミナル: アクティブなターミナルで選択したテキストを実行** が呼び出されたときにターミナルにフォーカスすべきかどうかを指定できるようになりました。他のオプションは、ターミナルのアクセシブルバッファー (accessible-buffer) にフォーカスするか、何もフォーカスしない (none) です。

サイズ変更可能な検索

ターミナルの検索コントロールは、エディターと同様に左側のサッシュを使用してサイズ変更できるようになりました。

Hover the left border of the Find control to see the resize handle

サッシュにカーソルを合わせたりドラッグしたりして検索コントロールのサイズを変更すると、サッシュがハイライト表示されます。

GPU アクセラレーションが無効な場合の高速レンダリング

GPU アクセラレーションが無効な場合に使用される「DOM レンダラー」のパフォーマンスが、コンポーネントの書き換えにより大幅に改善されました。書き換えは、使用される DOM 要素の数を減らすことに焦点を当てており、ターミナルが大きくなるほど節約効果がはるかに優れています。

117 列 36 行のターミナルで一般的なレンダリング呼び出しをテストしたところ、以前は〜10msかかりましたが、現在は〜2msで完了します。テストマシンでターミナルサイズを 300x100 に増やした場合、レンダリングにかかる時間は以前は〜25-35msでしたが、現在は〜4-5msに短縮されました。

より良い選択レンダリング

GPUアクセラレーションがオフの場合、選択レンダリングはwebglレンダラーと同じになり、すべての背景がテーマの選択背景色に変更され、良好なコントラストと一貫性が確保されます。

The background when selected will now be the same as the rest of the selection

薄暗いテキストの最小コントラスト比の半分を尊重

最小コントラスト比機能により、ターミナルは前景の色をより細かく制御し、特定のコントラスト比で表示されるようにすることができます。以前この機能に問題があったのは、薄暗いテキスト (CSI 2 m) もコントラスト比を尊重するため、通常のテキストと同じくらい目立つように表示される可能性があったことです。PowerShell のオートコンプリートゴーストテキストは、これがうまく機能しなかった例です。

薄暗いテキストは、**半分**のコントラスト要件を持つようになりました。これは、テキストが最小コントラスト比を満たさない可能性があることを意味しますが、通常のテキストとは明らかに異なるため、より重要です。

Now dimmed text should be visually different for typical minimum contrast ratios

フォーカスされていないときのカーソル表示を構成

ターミナルでフォーカスされていないときのカーソルの外観を terminal.integrated.cursorStyleInactive で構成できるようになりました。これは既存の terminal.integrated.cursorStyle のすべてのスタイルに加えて、outline (デフォルト) と none をサポートします。

The new inactive cursor styles are underline, block, line, outline and none

**検出されたリンクを開く**コマンド (⇧⌘G (Windows, Linux Ctrl+Shift+G)) の動作が変更され、リンクをターミナルバッファー全体で検索する機能が大幅に向上し、高いパフォーマンスを維持できるようになりました。以前は、ビューポートと少し上のリンクのみを提供し、残りのバッファーを検索するには最後に扱いにくい**より多くのリンクを表示**ボタンがありました。

Previously the last entry must have been selected to search everything

ビューポート内のリンクはすぐに表示され、クイックピックをできるだけ早く表示できるようになりました。

Now initial results are restricted to the initial viewport

クイックピックが表示されるとすぐに、ターミナルバッファーの残りの部分のリンクがバックグラウンドで検出されます。フィルタリングのために入力すると、VS Code はすべての結果を待ち、フィルタリングされた結果に含めます。

Results from the entire buffer are included in the search when filtering begins

CodeQL.yml がビューポート外にあったため、フィルターが入力されるまで含まれていなかったことに注目してください。

以下の GNU スタイルのリンク形式がターミナルで検出されるようになりました。

  • sourcefile:lineno.column
  • sourcefile:line1-column1.column2
  • sourcefile:line1.column1-line2.column2

デバッグ

JavaScriptデバッガー

WebAssembly のデバッグ

JavaScript デバッガーは、WebAssembly モジュールを自動的に WebAssembly テキスト形式に逆コンパイルし、逆コンパイルされたモジュールをステップ実行したり、ブレークポイントを設定したりできるようになりました。

Breakpoint hit during a WebAssembly debug session

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

ソースマップの読み込みの改善

今回のリリースでは、ソースマップの読み込み方法が大幅に改善されました。

  • tsc コマンドラインでコンパイルされたアプリケーションなど、いくつかの一般的なケースでのソースマップの読み込みが 3~5 倍高速になりました。
  • Vite 開発サーバーからのホットモジュールリロードがサポートされました。
  • 認証済みエンドポイントからソースマップを自動的に読み込めるようになりました。

テスト

ステータスエリアの改善

テストビューのフィルタボックスの下にある「ステータスエリア」がより簡潔になり、最近実行されたテストを再実行するためのクリック可能なアクションも提供されるようになりました。再実行ボタンを Alt キーを押しながらクリックすると、代わりにそれらのテストがデバッグされます。

Testing view status area displaying test result count, test timing, and rerun button

リンク検出がテスト出力が表示されるターミナルで実行されるようになりました。ファイル名、パス、URI がクリック可能になりました。

テストと関連付けられた出力のエクスペリエンスの改善

テスト拡張機能は、コンソール出力を特定のテストまたは場所と関連付けることができます。以前は、このように作成された各出力は、テスト結果ビューで独自のアイテムとして表示され、選択するとテキストエディターで開かれました。

現在、それらは適切なターミナルに表示され、出力メッセージに移動すると、そのテストの出力のターミナルが開かれ、メッセージが選択されます。

ノートブック

セル出力をコピー

セル出力メニューに、出力をシステムクリップボードにコピーするオプションが追加されました。画像出力の場合も、画像を右クリックして**出力のコピー**コマンドを選択することで、コンテキストメニューを使用できます。

テーマ: Bearded Theme feat. Gold D Raynh (vscode.dev でプレビュー)

言語

TypeScript 5.2

VS Code には TypeScript 5.2.2 が搭載されました。この大規模なアップデートにより、新しい TypeScript 言語機能、パフォーマンスの向上、多くの重要な改善とバグ修正が行われます。TypeScript 5.2 の詳細については、TypeScript ブログを参照してください。

ファイルへの移動リファクタリング

JavaScript と TypeScript の**ファイルへ移動**リファクタリングにより、クラス、関数、または定数を既存のファイルに移動できます。これにより、シンボルへのすべての参照が自動的に更新され、必要に応じてインポートも更新されます。

**ファイルへ移動**を選択すると、VS Code は現在の TypeScript または JavaScript プロジェクトのすべてのファイルのリストを表示します。目的のファイルを素早く絞り込むために、入力を開始できます。

または、**既存のファイルを選択...** を使用して通常のファイルピッカーでファイルを選択するか、**新しいファイルパスを入力...** を使用して作成する新しいファイルを指定できます。

インライン変数リファクタリング

JavaScript および TypeScript の**インライン変数**リファクタリングは、変数のすべての出現箇所をその定数値で置き換えます。

このリファクタリングは、既存のコードを書き換える際に最も役立つことがよくあります。例えば、変数が宣言されてすぐに返される場合、インライン変数を使用して余分な宣言を削除し、値を直接返すことができます。

function add(a, b) {
  const result = a + b;
  return result;
}

result に対して inline variable を実行した後

function add(a, b) {
  return a + b;
}

クリック可能なパラメーターヒント

パラメーターヒントをクリックすると、パラメーター宣言に素早くジャンプできるようになりました。インレイヒントをオンにした後、

"editor.inlayHints.enabled": "on",
"typescript.inlayHints.parameterNames.enabled": "all",
"javascript.inlayHints.parameterNames.enabled": "all"

Ctrl/Cmd を押しながらパラメーター名をクリックすると、そのパラメーターの宣言にジャンプします。

今後のリリースでは、他の JavaScript および TypeScript のインレイヒントに対して**定義へ移動**を有効にする予定です。

リモート開発

リモート開発拡張機能を使用すると、開発コンテナー、SSH 経由のリモートマシンまたはリモートトンネル、またはLinux 用 Windows サブシステム (WSL) をフル機能の開発環境として使用できます。

主なハイライトは次のとおりです。

  • リモート - トンネル接続の信頼性の向上。
  • 新しい**WSL に Docker をインストール**コマンド。
  • 事前ビルドされた開発コンテナーのチュートリアルガイド。

新しい拡張機能の機能とバグ修正については、リモート開発リリースノートで確認できます。

拡張機能への貢献

GitHub Copilot

チャットビューからワークスペースを作成

GitHub Copilot Chat 拡張機能の安定版ビルドで、自然言語の記述から /createWorkspace を使用してワークスペースを作成できるようになりました。

さらに、以下の改善も行いました。

  1. 提案されたワークスペースが、チャットの応答でファイルツリーとしてレンダリングされるようになりました。
  2. ファイルをクリックして、エディターで読み取り専用のプレビューを開くことができます。
  3. Copilot の最初の提案が完全に正しくなかった場合でも、フォローアップの質問をすることで、Copilot が反復処理して改善するのを手助けできます。

インラインチャットで名前のないエディターでコーディングを開始

名前のないテキストエディターを開くと、⌘I (Windows, Linux Ctrl+I) を介してインラインチャットセッションを開始する方法のヒントが表示されるようになりました。スクリーンリーダーのユーザーは、このヒントを聞き、accessibility.verbosity.untitledHint 設定で無効にすることを選択できます。

クイックチャットの改善

数ヶ月前にクイックチャットを導入し、VS Code に合うエクスペリエンスを提供するために迅速に反復処理してきました。

今回のイテレーションのハイライト

  • よりコンパクトな UX。
  • フォーカスが失われてもクイックチャットが開いたままになるようになりました。
  • ウィンドウのサイズを変更するためのサッシュと「スクロールして拡大」動作。
  • **クイックチャットを開く**がコマンドセンターに移動しました。

The Quick Chat window with a question and answer displayed

全体として、UX はコマンドパレットのような他の「クイックオープン」エクスペリエンスに合わせてよりコンパクトになりました (パディングが全体的に少なくなり、ユーザーと Copilot のアイコンが小さくなり、ボタンがタイトルバーではなくインラインになりました)。

デフォルトでは、質問をすると、クイックチャットは画面スペースを最小限に抑えるために、その質問と回答に焦点を合わせるようにサイズ変更されます。これは、Copilot に素早く質問したい場合に役立つと考えています。会話の履歴は引き続き利用でき、上にスクロールして過去に戻ることができます。

この動的な高さのため、より多くのスペースまたは少ないスペースが必要な場合にウィンドウのサイズを変更する方法も提供したかったのです。ウィンドウサイズを調整するオプションは2つあります。1つ目は「スクロールして拡大」と呼ぶものです。クイックチャットウィンドウが短い回答で小さい場合でも、以前の長い回答を見たい場合、上にスクロールすると、クイックチャットは最大高さまで拡大します。

クイックチャットの高さは、次のいずれかの操作で最後の質問と回答のみを表示するようにリセットできます。

  • クイックチャットを閉じて30秒待つ。
  • 別の質問をするか、/clear を実行する (/clear はチャット履歴を完全に消去することに注意してください)。
  • 下部のサッシュをダブルクリックする。

サッシュといえば...クイックチャットの下部にもサッシュがあり、クイックチャットの高さを手動で調整するために使用できます。サッシュを使用すると、デフォルトの動的な動作をオプトアウトし、「この高さをリセットされるまでここに固定したい」と言っていることになります。

: 動的な動作に戻したい場合は、サッシュをダブルクリックするか、チャットで /clear と入力してください (/clear はチャット履歴を消去します)。

最後に、コマンドセンターの**クイックチャットを開く**オプションからクイックチャットを起動できます。

Open Quick Chat command in the Command Center

ターミナルの選択を説明

Copilot は、ターミナルのコンテキストメニューで**Copilot: これを説明する**を選択することで (プラットフォームに応じて右クリックまたはShift + 右クリック)、現在のターミナルの選択を説明する機能が追加されました。

The terminal context menu's first entry is Copilot: Explain This

**Copilot: これを説明する**コマンドはチャットビューを表示し、Copilot が詳細な説明を返します。

Copilot goes into detail in the explanation, for example it explains that a git push uses LFS, what delta compression is

設定の自然言語検索

設定エディターで、GitHub Copilot Chat を使用した自然言語検索が可能になりました。

自然言語検索の結果は現在、キーワード一致の結果の下に配置され、類似度スコアの降順で並べられていますが、来月には順序を修正し、目次グループごとに検索結果が配置されるようにする予定です。

自然言語検索は現在 Copilot の埋め込みに依存しています。したがって、自然言語検索の結果は、埋め込みが利用可能になる前、つまり GitHub Copilot Chat 拡張機能がアクティブ化されてから数秒間は、設定エディターに表示されません。

Searching "make text bigger" in the Settings editor shows editor.fontSize as a result

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

Python

新しい Python フォーマットの記事

Python フォーマットに関する新しい専用トピックが追加されました。ここでは、autopep8Black などのデフォルトフォーマッターを設定し、さまざまな設定でカスタマイズする方法を学習できます。

環境変数を使用したターミナルアクティベーション

Python 拡張機能に、明示的なアクティベーションコマンドを実行せずに、ターミナルで選択した環境をアクティベートする新しいアクティベーションメカニズムが追加されました。今月、これを実験として展開し、デフォルトのエクスペリエンスとする予定です。この新しいアプローチでは、環境変数を使用してターミナルをアクティベートします。これはターミナル起動時に暗黙的に行われるため、特に conda 環境ではより高速になります。これを試すには、以下の**ユーザー**設定を追加してください: "python.experiments.optInto": ["pythonTerminalEnvVarActivation"]

この実験に関するご意見やご提案がございましたら、vscode-python issue #11039 までお気軽にお寄せください。

既存の .venv 環境を再作成または使用

.venv フォルダーをすでに含むワークスペースで作業している場合、**Python: 環境の作成**コマンドが更新され、既存の環境を再作成または使用するオプションが追加されました。環境を再作成することを選択した場合、現在の .venv は削除され、新しい .venv という名前の環境を再作成できます。その後、**Python: 環境の作成**フローに従って、この新しい環境をカスタマイズし、好みのインタープリターを選択し、インストールする依存関係ファイルを指定できます。環境が削除できない場合 (たとえば、アクティブであるためなど)、手動で環境を削除するように求められます。

または、既存の環境を使用することを選択した場合、その環境がワークスペースに選択されます。

プレビュー機能

ワークスペース検索結果をクイックアクセスメニューに表示する実験を行っています。これを試すには、**検索: クイックテキスト検索 (実験的)**を実行します。このコマンドは、検索クエリを受け入れるようにクイックオープンを設定します。いくつかのテキストを入力して、さまざまなワークスペースファイルからの一致を確認してください。

フォーカスされていないエディターとターミナルを薄暗く表示

現在フォーカスされていないエディターとターミナルを薄暗く表示する新しい実験的機能が追加されました。この機能の目的は、通常の点滅するカーソルと比較して、テキストがどこに行くのかをはるかに明確にすることです。

When dim unfocused is enabled in a 2x2 grid editor group layout, only one will be fully opaque

上の画像は、フォーカスされていない機能が有効になっており、不透明度が 0.5 に設定されているため、terminalService.ts のエディターがフォーカスされていることがより明確になっています。

これは accessibility.dimUnfocused.enabled を使用して有効にでき、薄暗くする量は accessibility.dimUnfocused.opacity で制御されます。

この機能は現在エディターとターミナルのみをカバーしていますが、将来的にユーザーがどのビューを薄暗く表示するかを自分で構成できるように拡張する予定です。

拡張機能作成

バッチ範囲フォーマットのサポート

DocumentRangeFormattingEditProvider API がバッチフォーマットをサポートするようになりました。これは、拡張機能がオプションで、複数の範囲を一度に渡して呼び出されることをサポートしていることをエディターに通知できることを意味します。これにより、フォーマットプロバイダーへの呼び出しの数が減り、パフォーマンスが向上します。

バッチフォーマットに参加するには、プロバイダーは新しいオプション関数である provideDocumentRangesFormattingEdits を実装する必要があります。

ワークスペースフォルダーにスコープされた EnvironmentVariableCollection

EnvironmentVariableCollection API が、特定のワークスペースフォルダーにスコープされた新しいコレクションを作成できるようになり、これは「グローバル」コレクションに追加して適用されます。

// Get a scoped collection for the first workspace folder
const scoped = context.environmentVariableCollection.getScoped({
  workspaceFolder: workspace.workspaceFolders[0]
});
scoped.replace('SCOPED', '1');
// Only terminals created in the first workspace folder will have SCOPED=1 set

Python 拡張機能は、このメカニズムを使用して、マルチルートワークスペースでターミナルが属するフォルダーに応じて異なる仮想環境を設定します。

EnvironmentVariableMutator が適用されるタイミングを構成する

EnvironmentVariableCollection API に、シェル初期化スクリプトの後に実行されるシェル統合スクリプト内で変更を適用する機能が追加されました。これはシェル統合が有効になっている場合にのみ機能するため、変更はシェル作成時と、重要であればシェル統合内でも適用できます。

context.environmentVariableCollection.prepend('PATH', '/my/custom/path', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

この機能は、問題の変数がシェル初期化スクリプトによって変更される可能性がある場合に役立ちます。

提案されたAPI

すべてのマイルストーンには新しい提案された API が含まれており、拡張機能の作者はそれらを試すことができます。いつものように、皆様からのフィードバックを歓迎します。提案された API を試す手順は次のとおりです。

  1. 試したい提案を見つけて、その名前をpackage.json#enabledApiProposalsに追加します。
  2. 最新の@vscode/dtsを使用し、npx @vscode/dts devを実行します。これにより、対応するd.tsファイルがワークスペースにダウンロードされます。
  3. これで提案に対してプログラミングできます。

提案された API を使用する拡張機能を公開することはできません。次のリリースで破壊的変更がある可能性があり、既存の拡張機能を壊すことは望ましくありません。

TestMessage とコントリビューションポイントの contextValue

ユーザーがメッセージに対してアクションを実行する際に表示される TestMessagecontextValue を指定できるようになりました。さらに、testing/message/contexttesting/message/content という 2 つの新しいメニュー貢献ポイントが利用可能になりました。前者はテスト結果ツリービューのメッセージに表示され、後者はエディターのメッセージの上に表示されます。

contextValue の詳細については、issue #190277 を参照してください。

ターミナルコンテキストメニューの寄与

拡張機能が独自のコンテキストメニューアクションをターミナルに統合できるように、2つの新しいメニューが提案されています。

  • terminal/context - ターミナルコンテキストメニュー
  • terminal/title/context - ターミナルタブのコンテキストメニュー

ターミナルコマンド実行をリッスン

長らく要望されていた、拡張機能がターミナルコマンド実行 API をリッスンする機能の初期提案がテスト用に利用可能になりました。この API はシェル統合を使用して実装されており、シェル統合が有効で機能しているターミナルでのみ発生します。

export interface TerminalExecutedCommand {
  /**
   * The {@link Terminal} the command was executed in.
   */
  terminal: Terminal;
  /**
   * The full command line that was executed, including both the command and the arguments.
   */
  commandLine: string | undefined;
  /**
   * The current working directory that was reported by the shell. This will be a {@link Uri}
   * if the string reported by the shell can reliably be mapped to the connected machine.
   */
  cwd: Uri | string | undefined;
  /**
   * The exit code reported by the shell.
   */
  exitCode: number | undefined;
  /**
   * The output of the command when it has finished executing. This is the plain text shown in
   * the terminal buffer and does not include raw escape sequences. Depending on the shell
   * setup, this may include the command line as part of the output.
   */
  output: string | undefined;
}

export namespace window {
  /**
   * An event that is emitted when a terminal with shell integration activated has completed
   * executing a command.
   *
   * Note that this event will not fire if the executed command exits the shell, listen to
   * {@link onDidCloseTerminal} to handle that case.
   */
  export const onDidExecuteTerminalCommand: Event<TerminalExecutedCommand>;
}

この API の形式は最終的なものではありませんが、基本的な考え方は同じままです。

以下は、git push コマンドの成功をリッスンし、拡張機能の更新をトリガーする使用例です。

const disposables = [];
disposables.push(
  window.onDidExecuteTerminalCommand(command => {
    if (command.commandLine.startsWith('git push') && command.exitCode === 0) {
      refreshState();
    }
  })
);
function refreshState() {
  /* ... */
}

ターミナル選択アクセス

ターミナル選択にアクセスするための単純な提案 API

export interface Terminal {
  /**
   * The selected text of the terminal or undefined if there is no selection.
   */
  readonly selection: string | undefined;
}

この API は、最終決定される前に対応する変更イベントが含まれる可能性が高く、API 名は、それが単純な文字列であり、TextEditor.selection のような Range ベースではないことをより明確にするために変更される可能性があります。

ターミナルクイックフィックスの進捗

ターミナルクイックフィックスの提案は、ターミナルコマンドではなく、通常の VS Code コマンドをトリガーできるようになりました。この変更により、ターミナルコマンドのインターフェース名も変更する必要がありました。

export interface TerminalQuickFixProvider {
  /**
   * Provides terminal quick fixes
   * @param commandMatchResult The command match result for which to provide quick fixes
   * @param token A cancellation token indicating the result is no longer needed
   * @return Terminal quick fix(es) if any
   */
  provideTerminalQuickFixes(
    commandMatchResult: TerminalCommandMatchResult,
    token: CancellationToken
  ): ProviderResult<
    SingleOrMany<TerminalQuickFixExecuteTerminalCommand | TerminalQuickFixOpener | Command>
  >;
}
export class TerminalQuickFixExecuteTerminalCommand {
  /**
   * The terminal command to run
   */
  terminalCommand: string;
  constructor(terminalCommand: string);
}

エンジニアリング

Electron 25 の更新

今回のマイルストーンでは、Electron 25 の更新を安定版ユーザーにリリースします。この更新には、Chromium 114.0.5735.289 と Node.js 18.15.0 が含まれています。Insiders ビルドでセルフホストし、早期のフィードバックを提供してくださった皆様に感謝いたします。

Node.js の更新ハイライト

デスクトップアプリケーションにバンドルされている Node.js と、サーバーにバンドルされているスタンドアロン実行可能ファイルが v16 -> v18 に更新されました。これはメジャーバージョンのバンプであるため、いくつかの動作と互換性の変更点があります。

  • OS からの DNS 結果の順序はソートされなくなりました。この変更をまだ採用していない可能性のある拡張機能を壊さないように、ローカルとサーバーの両方のシナリオで、拡張機能ホストに --dns-result-order=ipv4first を追加しました。今後は、拡張機能が socket.connect API の autoSelectFamily オプションを使用して、結果順序の変更に対応することをお勧めします。

  • 公式 Node.js リポジトリからの Linux 用プレビルドバイナリは、glibc 2.28 以降に基づいた Linux ディストリビューションと互換性があります。これは、Ubuntu 18、CentOS 7、RHEL 7 などのサーバーからのサポートを打ち切ることを意味します。現在、Linux サーバー向けに Node.js のカスタムビルドを提供しており、glibc 2.17 以降の互換性を維持しています。このサポートは、CentOS 7 イメージで新しい Node.js バージョンをビルドできなくなった場合、今後の更新で変更されるため、この変更の影響を受けるサーバーユーザーは OS バージョンを更新することをお勧めします。

Chromium の更新ハイライト

  • Mesa バージョンアップグレード後、Chromium のシェーダーコンパイルが壊れ、アプリケーション UI にアーティファクトが発生する可能性があります。この問題はissue #190437で追跡されており、Chromium のバグレポートへのリンクも含まれています。この問題は、--verbose で実行し、ログで ERROR:shared_context_state.cc(81)] Skia shader compilation error という行を探すことで特定できます。この問題の影響を受ける場合は、現在の回避策は ~/.config/Code/GPUCache にある GPU キャッシュを削除することです。
  • Chromium が webgl の SwiftShader バックエンドを使用すると、Windows と Linux の両方で統合ターミナルのパフォーマンスが低下するようです。回避策として、GL_RENDERER 文字列に基づいて影響を受けるユーザーを検出し、ターミナルの DOM バックエンドに切り替えます。詳細については、issue #190195 を参照してください。この問題には、Chromium のバグレポートへのリンクも含まれています。

ありがとうございます

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

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-css-languageserviceへの貢献者

vscode-hexeditorへの貢献

  • @lorsanta: データインスペクターで fp16 と bf16 のサポートを追加 PR #451

vscode-js-debugへの貢献者

vscode-pull-request-githubへの貢献者

vscode-vsceへのコントリビューション

  • @bandantonio (アントニオ)
    • feat: --help にユーザーフレンドリーな情報を追加 PR #884
    • feat: ライセンスファイルなしでパッケージングおよび公開をサポート PR #887
    • マニフェスト内の不一致の価格値に関するエラーメッセージを再表現 PR #890