に参加して、VS Code の AI 支援開発について学びましょう。

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

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

更新 1.82.2: この更新プログラムは、以下の問題に対処します。

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

ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel シリコン | 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 Pull Request コメントコントロールにも拡張されました。

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

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

以前は、ターミナルのアクセシブルバッファーは Shift+Tab で開かれました。これは一部のシェルで既存のキーボードショートカットと競合しました。そのため、他のアクセシブルビューと合わせるために、このキーバインディングは ⌘↓ (Windows、Linux Ctrl+Down)⌥F2 (Windows Alt+F2、Linux Shift+Alt+F2) に変更されました。

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

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

アクセシブルビューでの Go to Symbol

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

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

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

Workbench

組み込みポート転送

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

Forward a Port button displayed in the Ports view

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

ポート転送ユーザーガイドでポート転送の詳細をご覧ください。

Command Center が既定でオンになりました

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

Command Center と、戻る/進むボタンを使用したビデオです。

Command Center は VS Code 内のあらゆるものを見つけるための中心となる大きな可能性を秘めているため、今後のさらなる改善にご期待ください!

: Command Center を表示したくない場合は、タイトルバーを右クリックし、ドロップダウンメニューの Command Center エントリのチェックを外して非表示にすることができます。

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

ピン留めされたタブがエディターを閉じるためのキーボードショートカットまたはマウスの中央クリックにどのように応答するかをより詳細に制御するための新しい設定 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 に改名

Editor

スティッキースクロール

このイテレーションでは、エディター上部で利用できる Sticky Scroll UI (View: Toggle Sticky Scroll) にいくつかの改善が加えられました。

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

保存時に JSON をソートする

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

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

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

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

差分エディター

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

移動したコードの検出

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

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

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 設定が追加され、ユーザーがTerminal: Run Selected Text In Active Terminal が呼び出されたときにターミナルにフォーカスするかどうかを指定できるようになりました。その他のオプションとして、ターミナルのアクセシブルバッファー (accessible-buffer) にフォーカスするか、何もフォーカスしない (none) かがあります。

サイズ変更可能な検索

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

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

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

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

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

117 列 36 行のターミナルで一般的なレンダリング呼び出しをテストした場合、以前は約 10 ミリ秒、書き直し後は約 2 ミリ秒かかりました。テストマシンでターミナルサイズを 300x100 に増やした場合、以前はレンダリングに約 25~35 ミリ秒かかっていたのが、書き直し後は約 4~5 ミリ秒になりました。

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

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

Open Detected Link コマンド (⇧⌘O (Windows, Linux Ctrl+Shift+O)) の動作が変更され、パフォーマンスを維持しながら、ターミナルバッファ全体からリンクを検索しやすくなりました。以前は、ビューポートとその少し上のリンクのみを提供し、残りのバッファを検索するために最後に煩わしいさらにリンクを表示ボタンがありました。

Previously the last entry must have been selected to search everything

ビューポート内のリンクはすぐに表示されるため、Quick Pick はできるだけ早く表示されます。

Now initial results are restricted to the initial viewport

Quick Pick が表示されるとすぐに、ターミナルバッファの残りの部分のリンクがバックグラウンドで検出されます。フィルタリングするために文字を入力すると、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 経由のリモートマシン、リモートトンネル、またはWindows 用 Linux サブシステム (WSL) をフル機能の開発環境として使用できます。

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

  • リモート - トンネル接続の信頼性の向上。
  • 新しいWSL に Docker をインストールコマンド。
  • Prebuild Dev Containers の操作ガイド。

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

拡張機能への貢献

GitHub Copilot

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

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

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

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

インラインチャットで無題のエディターでコーディングを開始

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

クイックチャットの改善

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

このイテレーションでのハイライト

  • よりコンパクトな UX。
  • フォーカスが失われてもクイックチャットが開きっぱなしになるようになりました。
  • ウィンドウのサイズを変更するためのサッシュと「スクロールで拡大」動作。
  • クイックチャットを開くが Command Center に追加されました。

The Quick Chat window with a question and answer displayed

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

デフォルトでは、質問をすると、Quick Chat はその質問と回答にフォーカスするようにサイズ変更され、画面のスペースを最小限に抑えます。これにより、Copilot に素早く尋ねたい質問に集中できると考えられます。会話の履歴は引き続き利用可能で、上にスクロールすると過去に戻ることができます。

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

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

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

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

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

最後に、Command Center のOpen Quick Chatオプションからクイックチャットを起動できます。

Open Quick Chat command in the Command Center

ターミナル選択の説明

Copilot は、ターミナルのコンテキストメニュー (プラットフォームに応じて右クリックまたはShift + 右クリック) でCopilot: Explain Thisを選択することで、現在のターミナル選択を説明できるようになりました。

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

Copilot: Explain Thisコマンドはチャットビューを表示し、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 Formatting の記事

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

環境変数を使用したターミナルのアクティブ化

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

この実験に関するご意見やご提案があれば、vscode-python issue #11039 で共有してください。

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

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

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

プレビュー機能

Quick Access メニューにワークスペースの検索結果を表示する実験を行っています。これを試すには、Search: Quick Text Search (Experimental) を実行します。このコマンドは、Quick Open が検索クエリを受け入れるように設定します。テキストを入力すると、さまざまなワークスペースファイルからのマッチが表示されます。

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

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

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

vscode-js-debugへの貢献者

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

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

  • @bandantonio (Antonio)
    • feat: add user-friendly info to --help PR #884
    • feat: add support for packaging and publishing without license file PR #887
    • rephrase error message for mismatched pricing values in manifest PR #890

© . This site is unofficial and not affiliated with Microsoft.