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

2021年8月 (バージョン 1.60)

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

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

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


Visual Studio Code 2021年8月リリースへようこそ。今回のバージョンには、皆さんに気に入っていただけるような多くのアップデートが含まれています。主なハイライトは以下の通りです。

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

このリリースの新機能のデモをご覧になり、ライブで質問するには、9月2日木曜日の太平洋時間午前8時 (ロンドン時間午後4時) に開催されるVS Codeチームのライブストリームご参加ください

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

ワークベンチ

自動言語検出

前回のリリースでは、未保存ファイルの内容に基づいて言語モードを自動的に設定する実験的な機能を導入しました。自動言語検出機能は、機械学習を使用して言語を推測し、機械学習モデルはすべてお使いのマシン上でローカルに実行されます。このモデルは、オープンソースのMLライブラリTensorflow.jsと、GitHubユーザー@yoeoによるGuesslangのMLモデルによって駆動されています。

今回のリリースでは、自動言語検出を既定で有効にし、さらにファイル拡張子を持たないファイルにも検出を拡大しています。ノートブックでは、言語ピッカーを使用して言語検出を簡単に要求する方法を提供しています。

この機能を追加したのは、VS Codeの新規ユーザーの中には、言語モードの設定方法を知らず、VS Codeの豊富な機能セット(言語のカラー化や拡張機能の推奨など)を利用するためにこれが必要であることを知らない人がいることが分かったためです。新規ユーザーがVS Codeで利用可能な言語機能や拡張機能を素早く確認できるようにすることで、エディターの習熟を助けます。

さらに、未保存のテキストエディターをメモ帳として使用するパワーユーザーは、明示的に言語モードを設定する必要がなくなり、ワークフローが効率化されることを期待しています。

以下に、自動言語検出によって可能になったいくつかの便利なシナリオを示します。

オンラインから例をコピーして、未保存のエディターに貼り付ける

テーマ: Panda Theme

"Pipe into code" 言語検出 (拡張子なしファイルの検出のデモンストレーション)

テーマ: Panda Theme

ノートブックの言語ピッカーにある自動検出オプション

テーマ: Panda Theme

ターミナルエディターの確認ダイアログ

実行中の子プロセスを持つターミナルエディターを閉じるときに表示されるダイアログが、ターミナルエディターに特化され、「ターミナルを保存」するオプションが提供されなくなりました。

Terminal editor confirmation dialog

復元に失敗した場合でもエディターを閉じずに開いたままにする

以前は、ウィンドウの再読み込みやアプリケーションの再起動後にエディターの復元に失敗した場合、正常にロードされるエディターが見つかるまで自動的にエディターが閉じられていました。この動作は、エディターが閉じられたために慎重に作成されたエディターレイアウトが失われるという、不満の残る結果につながっていました。

今回のリリースでは、一度正常に開かれたエディターは、復元に失敗した場合でも閉じられることはありません。エディターは問題を示し、操作を再試行するオプションを提供します。

Keep editors open and offer to Try Again

設定エディターにおけるコードブロックのシンタックスハイライト

設定の説明におけるフェンス付きコードブロックが、シンタックスハイライトされるようになりました。

Syntax highlighting of TypeScript code in the Settings editor

設定エディターをサイドで開く

openToSide引数を使用してキーバインディングを設定することで、設定エディターをサイドグループで開くことが可能になりました。

{
  "key": "cmd+,",
  "command": "workbench.action.openSettings",
  "args": {
    "openToSide": true
  }
}

これはworkbench.action.openSettingsJsonコマンドでも機能します。

エディター

高性能な括弧ペアのカラー化

エディターがネイティブな括弧ペアのカラー化をサポートするようになりました。

Side by side comparison with bracket pair colorization on and off

括弧ペアのカラー化は、"editor.bracketPairColorization.enabled": trueを設定することで有効にできます。すべての色はテーマ設定可能で、最大6色を設定できます。

この機能は、CoenraadSによる有名なBracket Pair Colorizer拡張機能のパフォーマンス問題に対処するために実装されました。

これで、巨大なドキュメントの変更も即座に反映されます。

オートコンプリートにおけるインライン提案

オートコンプリートウィジェットが表示されているとき、インライン提案が提案プレビューを拡張できるようになりました。オートコンプリートウィジェットで選択された提案がインライン補完プロバイダーによって拡張できる場合、その拡張は斜体で表示されます。1回目のTabキーを押すと、オートコンプリートの提案のみが受け入れられます。2回目のTabキーを押すと、インライン提案が受け入れられます。

この機能には、提案プレビューが有効になっている必要があります ("editor.suggest.preview": true)。

更新されたPeekビュー

Peekビューは、他のエディタービューと整合するように視覚的な刷新が行われました。

Peek view for informational items

Peek view for warning items

Peek view for error items

Peek view for References view

ターミナル

ボックス描画文字とブロック要素文字のカスタムレンダリング

GPUアクセラレーションが有効な場合 (terminal.integrated.gpuAcceleration)、ボックス描画文字とブロック要素文字は、フォントを使用する代わりにピクセルパーフェクトなカスタムグリフを使用するようになりました。これは、例えば、ターミナルで行の高さや文字間隔を設定しても、ボックスが隙間なく描画されることを意味します。

Terminal glyph rendering before with gaps Terminal glyph rendering after without gaps

セクションの周囲にボックス描画文字、チャートにブロック要素が表示されているターミナルアプリZenithの例です。

Terminal rendering box characters and block elements

これは"terminal.integrated.customGlyphs": falseを設定することで無効にできます。

特定のフォントでのアンダースコアのレンダリング改善

ターミナルでのアンダースコアのレンダリングにはいくつかの歴史的な問題があり、そのほとんどはWebGLレンダラー(デフォルト)に切り替えることで修正されました。これには1つの例外があり、Linuxではフォントのアンダースコア文字がセルの境界の下に予期せず描画されるというものでした。

下の行のアンダースコアがセルの下にレンダリングされていることに注目してください。

The underscore was previously rendered 1 pixel below the cell's bounds

これはほとんどの場合で問題なく機能しますが、キャンバスの境界外に描画されるため、一番下の行では失敗します。

現在、この問題は、そのようなフォントを検出し、アンダースコアのテクスチャがセルの境界内に収まるまで上にシフトさせることで回避しています。この解決策は、以前は行の重複を避けるために行をクリップする方法が原因で、どの行にもアンダースコアを表示しなかったキャンバスレンダラーにも適用されます。

The underscore is now at the bottom of the cell's bounds

ウィンドウの再読み込み後のより高速な再接続

以前は、ウィンドウを再読み込みする際に、ターミナルのバッファーの状態を解析するのに最大300ミリ秒かかることがあり、破損の可能性もありました。複数のビジーなターミナルでは、これがすぐに積み重なっていました!これを修正するため、バッファーの復元方法が、ptyホスト上の多数の最近の生ターミナルイベントを記録する方法から、ptyホスト上にヘッドレスターミナルフロントエンドを維持し、すべてのデータをそこに書き込む方法に変更されました。

このアプローチにはいくつかの利点があります

  • 復元するスクロールバックの量を細かく調整できます。デフォルトは現在100で、速度とデータ量の良好なバランスです。スクロールバック量はterminal.integrated.persistentSessionScrollback設定で変更できます。
  • xterm.jsの高速パーサーのおかげで、これはCPU使用率への影響を最小限に抑え、ptyホスト上の全体的なメモリ使用量を削減するはずです。
  • ターミナルモードは、以前は見落とされてバッファー破損の原因となる可能性があったものが、明示的に復元されるようになりました。
  • ターミナルのバッファーはそのサイズと常に同期しているため、コストのかかるサイズ変更イベントをリプレイする必要はなくなりました。
  • 復元は比較的速いため、すべて単一のフレームで処理されます。これにより、貴重なCPU時間が部分的に復元されたターミナルのレンダリングに費やされて、さらに処理が遅くなるということがなくなります。

この新しい実装がどの程度の高速化を提供するは、ターミナルの数、ハードウェア、ターミナルバッファーサイズ、ターミナルで何が起こっていたかなど、多くの要因によって異なります。完全なターミナルバッファーを復元した場合の概算速度向上は、およそ5〜10倍になるはずです。

また、新しいxterm-headlessパッケージをnpmで公開しましたので、ご自身のプロジェクトでこの作業をご利用いただけます。

デバッグ

ウォッチビューでの値の設定

ウォッチビューで、コンテキストメニューの値の設定アクションを使用して、ウォッチしている式の値を設定できるようになりました。

Shows WATCH view with the Set Value action selected in the context menu

値の設定が利用可能になるには、デバッグ拡張機能がこの機能をオプトインする必要があります。現在、JS-debug、C#、C++の各拡張機能がこれをサポートしていますが、他のデバッグ拡張機能もまもなく追随すると予想されます。

マイナーなUI改善

  • VS Codeは、変数ビュー、ウォッチビュー、デバッグホバーでも値のリンクを検出するようになりました。変数の値がリンクである場合、クリックするだけでそのリンクをたどることが容易になります。

  • すでに実行中のデバッグセッションの別のインスタンスを開始しようとすると、誤って2つのセッションを開始するのを防ぐために、モーダル確認ダイアログが表示されるようになりました。

  • エディターのブレークポイントガターで無効なブレークポイントをクリックすると、そのブレークポイントが削除されるのではなく、有効になります。

  • デバッグセッションがアクティブな場合、エディターのブレークポイントガターのコンテキストメニューで行まで実行アクションが利用可能になりました。

新しい設定

  • デバッグセッション中に誤ってウィンドウを閉じるのを避けたい場合は、新しい設定debug.confirmOnExitを有効にできます。これをalwaysに設定すると、ウィンドウを閉じるときにデバッグセッションを停止するかどうかを確認するプロンプトが表示されます。

    Confirm quit while debugging

  • 新しい設定debug.console.acceptSuggestionOnEnterは、デバッグコンソールでEnterキーを押したときに提案を受け入れるかどうかを制御します。Enterキーはデバッグコンソールに入力された内容を評価するためにも使用されるため、このオプションはユーザーにEnterキーを押したときの動作をより細かく制御する機会を与えます。

JavaScriptデバッグ

従来のNodeデバッガーは廃止されました

VS Codeは以前からNode.jsデバッガーを組み込んでおり、別途Chromeデバッガーも公開していました。昨年、Node.jsとChrome用の新しいデバッガーを導入し、VS Code 1.47 (2020年7月) 以降、それはデフォルトとなり、「オプトアウト」オプションも用意されていました。

今回のリリースで、古いデバッガーは製品から削除され、Marketplaceで非推奨とマークされました。新しいJavaScriptデバッガーをオプトアウトしなかったVS Codeユーザーの大多数の方にとっては、何も変わりません。

古いデバッガーが必要な場合(例えば、Node.js 6プログラムのデバッグなど)は、[Deprecated] Node Debugまたは[Deprecated] Debugger for Chrome拡張機能をインストールし、それぞれlegacy-nodeまたはlegacy-chromeの起動タイプを使用できます。

非同期関数とNode.js内部でのステップ実行の改善

デバッガーのskipFilesを設定することで、非同期関数をステップ実行する際によくヒットするNode.jsの内部コードなど、特定のコードへのステップインを避けることができます。

しかし、Node.jsは「ブラックボックス化された」スクリプトを扱う際に常に正しい動作を示すわけではないため、今回のイテレーションではデバッガーに「合成ブラックボックス化」を導入しました。これにより、Node.jsプログラム、特に非同期関数へのステップイン時の信頼性が大幅に向上するはずです。

次回のリリースでは、デバッガーがNode.jsの内部をデフォルトでスキップするようにする予定です。

インストーラー

VS Codeをサポート対象ファイルタイプのデフォルトに登録する

Windows 11では、プログラムから開く開くと共にメニューのトップに配置する新しいファイルエクスプローラーのコンテキストメニューが導入されました。この更新により、利用可能なすべてのエディターを見つけてデフォルトを変更することが容易になります。

新しいベストプラクティスに従い、Windowsのインストール中にVS Codeのチェックボックス関連付けられたファイルタイプの既定のエディターとしてVS Codeを登録するがデフォルトでチェックされるようになりました。また、関連付けられたファイルタイプのリストを見直し、より頻繁に開かれるファイルタイプを多く含むように拡張しました。

Windows 11上のMicrosoft Store

間もなく登場するWindows 11では、新しいMicrosoftストアがより伝統的なアプリケーションタイプとインストーラーをサポートできるようになります。Windows Insiderプログラムを通じてすでにWindows 11をテストしている場合は、ストアで検索することで、VS Codeの最新リリースを今日からインストールできます。インストールすると、当社のウェブサイトからユーザーインストールとして入手できるVS Codeと同じものが利用でき、更新は今日と同じようにアプリ内で処理されます。

ノートブック

ノートブックがMarkdownセル間のリンクをサポートするようになりました。

Markdownセル内のヘッダーへのリンクは、以下を使用して作成できます。

[Link text](#_header-slug)

header-slugは、ヘッダーのテキストを小文字にし、スペースや特殊文字を-に置き換えたものです。上記の例のリンクは、ヘッダー# Header Slugに移動します。

大量の出力を扱う際のパフォーマンス改善

ノートブックにおける大量の出力の処理方法を最適化し、パフォーマンスを大幅に改善しました。

舞台裏では、VS Codeはノートブックの出力をUint8Arrayを使用してバイナリデータとして保存します。以前は、拡張機能ホストプロセスとレンダラープロセス間で出力データを転送する際、データはまず数値の配列に変換され、その後JSONにシリアル化されていました。

これがなぜパフォーマンスにとって悪いのかを理解するために、Hello Code!というテキストを出力するノートブックを考えてみましょう。これは内部的にUint8Arrayとして保存されます。

new Uint8Array([72, 101, 108, 108, 111, 32, 67, 111, 100, 101, 33]);

そのデータは11バイト長です。古い実装では、そのバイナリデータをJSON文字列に変換していました。

'[72,101,108,108,111,32,67,111,100,101,33]';

この文字列は41バイト長で、元のデータの3.5倍以上のサイズです!これは転送するのに非常に多くの余分なバイトであり、受信側はこれをJSONとして解析して再びUint8Arrayに変換する必要がありました。この解析は、数十MBサイズのノートブック出力にとって大きなボトルネックとなる可能性がありました。

新しい実装では、ノートブックの出力は転送中にバイナリデータとして保持されます。この実装の詳細については、プルリクエストで詳しく読むことができます。

この修正により、大量の出力を保存したノートブックの読み込みと、ノートブック実行時に大量の出力を生成する際のパフォーマンスが大幅に向上します。

onNotebookアクティベーションイベントの改善

VS Codeは、ワークスペースでノートブックが開かれたときにonNotebook:{type}およびonNotebook:*イベントを発行し、これらのイベントをリッスンしているノートブック拡張機能がアクティブ化されるようにします。以前は、VS Codeはファイルを開く前にこれら2つのイベントをリッスンしているすべての拡張機能を待っていましたが、現在は特定のノートブックのシリアライザーが登録されるのを待つだけになりました。例えば、ユーザーが新しいワークスペースでipynbファイルを開くと、組み込みのipynbシリアライザー拡張機能がアクティブ化され、ファイルがすぐに開かれます。同時に、VS Codeは他のすべての拡張機能(例: Jupyter、.NET Interactive、Julia拡張機能)にアクティベーションイベントを発行します。他の拡張機能のアクティベーションは、高速なノートブックのオープンを保証するためにファイル操作を遅くすることはありません。

ノートブックのレイアウトカスタマイズ

エディターのツールバーから直接、ノートブックのレイアウト設定をカスタマイズできるようになりました。

Notebook layout customization actions available in the editor toolbar

言語機能

TypeScript 4.4

VS CodeにTypeScript 4.4が組み込まれました。このアップデートでは、静的ブロック新しい厳密性オプションなど、多数の新しい言語機能と改善がサポートされます。また、新しいツール機能の改善といくつかの重要なバグ修正も含まれています。

TypeScript 4.4の詳細は、TypeScriptブログでご確認いただけます。

JavaScriptとTypeScriptのインレイヒント

TypeScript 4.4で最も重要な新しいツール機能は、インレイヒントのサポートです。インレイヒントは、ソースコードにインラインで追加情報を提供し、コードの動作を理解するのに役立ちます。

例えば、パラメーター名インレイヒントは、関数呼び出しにおけるパラメーター名を表示します。

Parameter name inlay hints

これにより、各引数の意味を一目で理解でき、ブール値のフラグを取る関数や、混同しやすいパラメーターを持つ関数に特に役立ちます。

パラメーター名ヒントを有効にするには、javascript.inlayHints.parameterNames.enabledまたはtypescript.inlayHints.parameterNames.enabled設定を行います。可能な値は3つあります。

  • none - パラメーターインレイヒントを無効にします。
  • literals - リテラル (文字列、数値、真偽値) のみにインレイヒントを表示します。
  • all - すべての引数にインレイヒントを表示します。

さらに、VS Codeは、JavaScriptおよびTypeScriptコードにおける暗黙の型情報を表示するインレイヒントも提供します。

変数型のインレイ ヒント は、明示的な型アノテーションを持たない変数の型を表示します。

設定 - javascript.inlayHints.variableTypes.enabled および typescript.inlayHints.variableTypes.enabled

Variable type inlay hints

プロパティ型のインレイ ヒント は、明示的な型アノテーションを持たないクラス プロパティの型を表示します。

設定 - javascript.inlayHints.propertyDeclarationTypes.enabled および typescript.inlayHints.propertyDeclarationTypes.enabled

Property type inlay hints

パラメーター型のヒント は、暗黙的に型付けされたパラメーターの型を表示します。

設定 - javascript.inlayHints.parameterTypes.enabled および typescript.inlayHints.parameterTypes.enabled

Parameter type inlay hints

戻り値の型インレイ ヒント は、明示的な型アノテーションを持たない関数の戻り値の型を表示します。

設定 - javascript.inlayHints.functionLikeReturnTypes.enabled および typescript.inlayHints.functionLikeReturnTypes.enabled

Return type inlay hints

今後もインレイヒントの改善を続けていく予定ですので、新しい機能に関するご意見やご感想をぜひお寄せください

JavaScriptファイルでのスペル提案

VS Codeは、JavaScriptファイルでの簡単なスペルミスを検出するのに役立ちます。

Spelling suggestions in a plain JS files

スペル提案は、それが実際の誤りであり、IntelliSenseエンジンが理解できない単なるコードパターンではないという、かなり高い確信がある場合にのみ表示されます。この機能が追加されたPRで詳細を読むことができます。

これらの提案は、以下を設定することで無効にすることもできます。

"javascript.suggestionActions.enabled": false

より包括的なチェックを行うには、JavaScriptコードで完全なセマンティックチェックを有効にすることを試してください。これはより多くのエラーを検出するのに役立つだけでなく、いくつかの便利なクイックフィックスも有効にします。

typescript.tsserver.useSyntaxServer

新しいtypescript.tsserver.useSyntaxServer設定を使用すると、TypeScriptがコードの折りたたみ計算など、構文関連の操作を迅速に処理するための専用サーバーを起動するかどうかを制御できます。これは、現在非推奨となっているtypescript.tsserver.useSeparateSyntaxServer設定に代わるものです。

可能な値は次のとおりです。

  • auto - 完全なサーバーと、構文操作に特化した軽量なサーバーの両方を起動します。構文サーバーは、コードの折りたたみなどの構文操作を高速化し、プロジェクトの読み込み中にIntelliSenseを提供するために使用されます。(デフォルト)
  • always - すべてのIntelliSense操作を処理するために軽量の構文サーバーを使用します。この構文サーバーは、開いているファイルに対してのみIntelliSenseを提供できます。
  • never - 専用の構文サーバーを使用しません。すべてのIntelliSense操作を処理するために単一のサーバーを使用します。

プレビュー機能

ロックされたエディターグループ

エディター領域でのターミナルの導入により、ターミナルエディターがファイルエディターに簡単に、あるいは誤って置き換えられてしまうことに不満を感じるユーザーからの報告を受けました。デフォルトでは、ファイルは常にアクティブなエディターグループで開かれるため、ターミナルがアクティブな場合でも、ファイルが開かれてターミナルが隠れていました。

ロックされたエディターグループは、この問題に対処する新しい方法を提供します。ターミナルだけでなく、あらゆるエディターに適用されます。複数のエディターグループを開いている場合、新しいコマンドを使用するか、"..."オーバーフローメニューから、それらをロックできるようになりました。

Lock Group action on the editor context menu

ロックされたグループは、ロック解除されたグループとは異なる動作をします。

  • 新しいエディターは、ユーザーが明示的にそこに移動しない限り(例:ドラッグ&ドロップ)、ロックされたグループでは開きません。
  • エディターがロックされたグループを開くのをスキップした場合、それは最近使用したロック解除されたグループで開かれるか、ロックされたグループの隣に新しいグループを作成します。
  • エディターグループのロック状態は、再起動後も保持され、復元されます。
  • 空のグループもロックできるため、より安定したエディターレイアウトが可能になります。
  • ロックされたグループは、アクションツールバー(右上)の鍵アイコンで示されます。

Locked editor group layout with lock icon

ロックされたエディターグループが実際にどのように動作するかを示す以下のデモをご覧ください。Markdownプレビューがアクティブであっても、新しいファイルは左側のエディターグループで開かれます。

この機能のために追加されたコマンドは次のとおりです。

  • workbench.action.experimentalLockEditorGroup
  • workbench.action.experimentalUnlockEditorGroup
  • workbench.action.experimentalToggleEditorGroupLock

新しいコンテキストキーactiveEditorGroupLockedが利用可能になり、グループのロック状態に応じて条件付きでコマンドをバインドできます。

注: 関連する設定とコマンドは、ロックされたエディターグループの設計が最終決定されるまで実験的なものです。この新機能に関するフィードバックをお待ちしておりますので、お気軽に問題を報告してください。

エディターグループの自動ロック

新しいロックされたエディターグループの概念を基盤として、新しいworkbench.editor.experimentalAutoLockGroups設定を使用すると、開いたときに自動的にグループをロックするエディターを選択できます。これは、エディターがそれ以外は空または新しいグループで最初に開く場合にのみ適用されます。

ターミナルはデフォルトで新しいグループを自動的にロックするように設定されています。以下の短いビデオでは、ターミナルがアクティブであっても、ターミナルから選択されたファイルは左側のエディターグループで開かれます。

Markdownプレビューが自動的にグループをロックするようにしたい場合は、experimentalAutoLockGroups設定にmainThreadWebview-markdown.preview: trueを追加できます。

次のマイルストーンでは、エディターの識別子を知らなくてもエディターを選択できるように、設定のUXを改善する作業を行います。関連する設定とコマンドは、ロックされたエディターグループの設計が最終決定されるまで実験的なものです。繰り返しになりますが、皆様のフィードバックをお待ちしております。

「ファイル名で検索」クイックピックでの引用符サポート

今回のイテレーションでは、「ファイル名で検索」クイックピック (⌘P (Windows、Linux Ctrl+P)) から、検索文字列を引用符で囲むことで、ファジー検索の結果を除外する機能を追加しました。

この機能が光るシナリオ

クエリが数文字しかない場合

結果の「乱雑さ」を減らしたい場合

この引用符による検索体験は直感的で、多くの検索エンジンが同様のメカニズムを使用しているため、気に入っていますが、皆様からのフィードバックをお待ちしております。また、issue #131431で議論されている他のアプローチも検討しています。

拡張機能への貢献

Jupyter

行単位実行

VS CodeはJupyterノートブックで行単位実行機能をサポートするようになりました。これは、セルのコードを行ごとに実行できるシンプルなデバッグモードです。試すには、選択したカーネルとしてipykernel v6以上がインストールされていることを確認し、行単位実行ボタンを選択してください。

デバッグ

VS Codeのフルデバッグ機能を使用してJupyterノートブックをデバッグするための実験的なサポートもあります。試すには、選択したカーネルとしてipykernel v6以上がインストールされていることを確認し、"jupyter.experimental.debugging": trueを設定し、ブレークポイントを設定して、セルをデバッグコマンドを選択してください。

Jupyterキーマップ

Jupyterのクラシックキーバインディングは、別のJupyter Keymap拡張機能として抽出されました。マーケットプレイスの別のノートブックキーバインディングのセットを使用したい場合は、これを無効にできます。

Python

刷新されたテストインターフェース

新しいテストAPIのおかげで、Python拡張機能のテスト機能が刷新されました。テストの検出、ナビゲーション、ステータスレンダリングがより安定した体験で利用できるようになったほか、テストの検索、テストの選択実行、最後に実行されたテストの再実行など、新しい機能も追加されました!

Running tests with the new Python Test Explorer

エディターからターミナルでPythonファイルを実行およびデバッグ

Python拡張機能を使用すると、エディターから直接ターミナルでPythonファイルを実行およびデバッグできるようになりました。

GitHubプルリクエストとIssue

GitHubプルリクエストとIssue拡張機能で長らく要望されていた、すべてのコメントを展開/折りたたむ機能が利用可能になりました。すべてのコメントは、コマンドGitHubプルリクエスト: すべてのコメントを展開GitHubプルリクエスト: すべてのコメントを折りたたむを介して展開および折りたたむことができます。また、展開/折りたたみ状態を制御する設定githubPullRequests.commentExpandStateもあります。最後に、コメントUI内からすべてのコメントを折りたたむこともできます。

Collapse all pull request comments button

すべての新機能と更新について学ぶには、拡張機能の0.30.0リリースの完全な変更ログをご覧ください。

拡張機能作成

Web拡張機能

VS Codeがブラウザーで実行されている場合、拡張機能はブラウザー内でも実行される拡張機能ホストに読み込まれます。「Web拡張機能ホスト」はブラウザーによって制約され、拡張機能はローカルファイルシステムやプラットフォーム機能にアクセスできません。拡張機能の作成者がWeb版VS Codeでの実行をサポートするように拡張機能を更新するのを助けるため、Web拡張機能作成者ガイドが提供されています。ここでは、Web上で最適に機能する拡張機能の種類、VS Code APIへのアクセス方法、仮想ファイルシステムとの連携方法について学ぶことができます。

Web拡張機能ガイドに加え、yo code 拡張機能ジェネレーターWeb拡張機能をスキャフォールドするオプションが追加され、コマンドラインからWeb拡張機能をテストするための@vscode/test-webモジュールもサポートされるようになりました。

Web版Visual Studio Codeの動作を見たことがない場合は、GitHubリポジトリの<> Codeタブで'.' (ピリオドキー) を押すと、ソースコードの閲覧と編集のためにWebベースのVS Codeが起動します。

コマンドの短いタイトル

コマンドのコントリビューションポイントでは、拡張機能がタイトル、カテゴリ、アイコンなど、コマンドのUIプロパティを定義できます。一方、メニューはコマンドを表示する「場所」であり、メニューはコマンドのUIプロパティの一部またはすべてを表示する場合があります。たとえば、一部のメニューはアイコンのみをレンダリングし、他のメニューはタイトルまたはカテゴリとタイトルをレンダリングします。拡張機能の作成者にとって、グローバルメニューとローカルメニューの両方で同様に機能するコマンドタイトルを考案することは難しい場合があります。たとえば、コマンドパレットはコンテキストメニューよりも多くの単語を表示できます。

異なるタイトルを可能にするために、新しいshortTitleプロパティがあります。これにより、コマンドはUIに応じて適切に機能する短いタイトルを提供できます。例えば、コマンドパレットではノートブック: すべてのセルの出力をクリア、ノートブックツールバーではより短いすべてクリアなどです。

環境名前空間にアプリケーションホストを追加

.env名前空間に、アプリケーションホストappHostプロパティが追加されました。appHostを使用すると、拡張機能開発者はVS Codeがホストされている環境(デスクトップ、GitHub Codespaces、github.dev、vscode.devなど)を判別できます。

ノートブックレンダラーのRendererContext.workspace.isTrusted

ノートブックレンダラーに渡されるコンテキストオブジェクトの新しいworkspace.isTrustedプロパティにより、拡張機能の作成者は現在のワークスペースが信頼されているかどうかを確認できます。

import type { ActivationFunction } from 'vscode-notebook-renderer';

export const activate: ActivationFunction<void> = (ctx) => {
  return {
    renderOutputItem: (outputInfo, element) => {
      if (ctx.workspace.isTrusted) {
        // Render normally. Still take precautions to avoid script injection and
        // only enable as much functionality as your renderer needs.
      } else {
        // Only render safe content. Always make sure it has been properly sanitized.
      }
    }
  }
};

プラットフォーム固有の拡張機能

プラットフォーム固有の拡張機能(拡張機能の作成者が異なるプラットフォーム(Windows、macOS、Linux)用に個別の拡張機能バージョンを作成できるようにするもの)の開発を進めています。この機能についてマーケットプレイスチームと協力し、ソリューションを最終決定しました。このマイルストーンでは実装を開始し、まもなく拡張機能の作成者に提供する予定です。更新情報やフィードバックについては、issue #23251をフォローしてください。

更新された codicon

以下の新しいアイコンがcodiconライブラリに追加されました。

An example of updated codicons

  • folder-library
  • run-errors

ウォークスルーコントリビューションの更新

ウォークスルーのステップメディアとしてテーマ対応SVGを使用

ウォークスルーのステップで、mediaオブジェクト内にsvgプロパティを指定できるようになりました。より優れたスケーリングサポートに加えて、SVGはテーマトークンへのアクセスを提供し、メディアがワークベンチの残りの部分と視覚的に調和できるようにします。詳細については、Webビューコンテンツのテーマ設定に関するガイドをご覧ください。

ウォークスルーの対象となるファイルの宣言

ウォークスルーは、特定のウォークスルーが適用されるファイルタイプをリストするオプションのfeaturedForパラメーターをサポートするようになりました。これらのファイルがワークスペースフォルダーで見つかった場合、ウォークスルーはより高い視覚的優先度でレンダリングされます。

タスクのデフォルトグループAPI

TaskGroupisDefaultプロパティが確定しました。拡張機能はタスクを取得し、そのタスクのgroupisDefaultプロパティを読み取って、そのグループのデフォルトタスクであるかどうかを判断できるようになりました。

デバッガー拡張機能の作成

「DebugSessionOptions」の新しい「managedByParent」プロパティ

新しいフラグmanagedByParentDebugSessionOptions型に追加されました。startDebugging APIに渡されると、disconnectrestartなどのライフサイクルリクエストが、新しく作成されたセッションに送信されるか、その親セッションに送信されるかを制御します。

Debug Adapter Protocolの「showUser」プロパティ

launchリクエストが失敗した場合、VS Codeはデバッグアダプターからの応答で送信されたshowUserプロパティを尊重するようになりました。showUserプロパティが提供され、falseの場合、VS Codeはエラーを含むモーダルダイアログを表示しませんshowUserプロパティが欠落しているかtrueの場合は、以前と同様にエラーダイアログを表示します。

他のDebug Adapter Protocol (DAP) リクエストについては変更はありません。showUsertrueの場合、エラーは通知を使用して表示されます。それ以外の場合、ユーザーには何も表示されません。

VS Codeは「noDebug」デバッグセッションのブレークポイントを登録しなくなりました

DAPのlaunchリクエストのnoDebugプロパティがtrueに設定されている場合、VS Codeはブレークポイント登録DAPリクエスト(setBreakpointssetExceptionBreakpointssetDataBreakpointssetFunctionBreakpointssetInstructionBreakpoints)を呼び出さなくなります。

VS CodeはDAP「setExpression」リクエストをサポートするようになりました

デバッグアダプターがsetExpressionリクエストを実装している場合(supportsSetExpression機能がtrueの場合)、VS Codeは2つの状況でsetExpressionを使用します。

  • VARIABLESビューとWATCHビューで変数の値を変更する場合、デバッグアダプターがsetVariableリクエストをサポートせず(supportsSetVariable機能がないかfalse)、変数にevaluateNameプロパティがあり、編集可能である場合(VariablePresentationHintreadOnly属性がtrueでない場合)。
  • WATCHビューで代入可能な式の値を変更する場合、ウォッチ式が編集可能である場合(VariablePresentationHintreadOnly属性がtrueでない場合)。

DAPエラーメッセージにおける「launch.jsonを開く」ボタンの抑制

Debug Adapter Protocolでは、ErrorResponseMessageが、メッセージに関する追加情報が見つかるurlと、URLを開くためのUIとしてユーザーに表示されるurlLabelを返すことを許可しています。VS Codeがモーダルダイアログでユーザーにメッセージを表示する際、urlLabelをキャプションとしたボタンが表示されます。このリリースより前は、VS Codeはlaunch.jsonを開くとキャプションされたボタンも追加していました。メッセージのurlが「command」スキーム(例えばcommand:myExtension.fixError)を使用する場合、このボタンは追加されなくなりました。

Debug Adapter Protocol

新しい「memory」イベントのリリース

memoryイベントは完成し、Debug Adapter Protocolのバージョン1.49と対応するnpmモジュールで利用可能になりました。デバッグアダプターがinitializeリクエストのsupportsMemoryEvent機能に対してtrueの値を受け取った場合、デバッグアダプターはmemoryイベントを発行して、特定のメモリ範囲が更新されたことを示すことができます。

提案された拡張API

各マイルストーンには新しい提案された API があり、拡張機能の作成者はそれらを試すことができます。いつものように、皆様のフィードバックをお待ちしております。提案された API を試すには、次の手順を実行する必要があります。

  • 提案APIは頻繁に変更されるため、Insiders版を使用する必要があります。
  • 拡張機能のpackage.jsonファイルに次の行が必要です: "enableProposedApi": true
  • 最新バージョンのvscode.proposed.d.tsファイルをプロジェクトのソース場所にコピーします。

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

型階層のサポート

拡張機能がシンボルのスーパークラスとサブクラスを提供できるTypeHierarchyProviderのAPI提案があります。このAPIは試用可能で、問題や提案があれば、VS Codeリポジトリに入力できます。

どこでもターミナルを作成

提案されたターミナル位置APIにより、パネルとエディター領域の両方でターミナル分割を作成できます。

ターミナルが「操作された」かどうかのクエリとイベント

Terminal.stateとwindow.onDidChangeTerminalStateの新しい提案APIにより、ターミナルが「操作された」かどうかをクエリできるようになりました。操作とは、データがプロセスに送信されたことを意味し、様々な理由で発生する可能性がありますが、主なものはキーボード入力です。

QuickPickItemsのボタン

QuickPickItemにボタンを追加し、処理するための提案APIがあります。これにより、拡張機能がQuick Pickとのより豊かなユーザーインタラクションを提供できるようになることを期待しています。

Buttons in QuickPickItems

ぜひ試してみて、ご意見をお聞かせください。注意点として、Quick Pickのスクロール位置に関する既知の問題が現在存在しており、この新しい提案APIによってこの問題が悪化する可能性があると考えています。この問題に対処するための適切なAPIセットに取り組んでいます。イシューでご意見をお聞かせください

テストタグ

テストタグは、テストを整理する方法と、実行可能なテストを示す方法の両方を提供する提案APIです。

エラー以外のテスト出力

テストAPIはテスト失敗メッセージをサポートしていますが、以前はエラー以外の出力を特定のテストケースと関連付ける方法がありませんでした。オプションのTestItemlocationTestRun.appendOutputメソッドに渡すことで、これを実現する方法を評価しています。ご意見がございましたら、issue #129201にフィードバックをお願いいたします!

インライン補完プロバイダー: オートコンプリートウィジェットとのインタラクション

InlineCompletionContextに、オートコンプリートウィジェットで現在選択されている提案の詳細を含む新しいフィールドselectedCompletionInfoが追加されました。また、ユーザーがオートコンプリートウィジェットで選択された項目を変更するたびに、InlineCompletionItemProvidersはインライン提案を要求されます。インライン提案が選択された提案項目を拡張する場合、その拡張は斜体で表示されます。

エンジニアリング

RHEL7およびCentos7ディストリビューションのサポートを修正

VS Codeバージョン1.53では、より新しいElectronバージョンを使用するためにビルドイメージを更新し、ネイティブモジュールのCXXABI要件の変更により、一部のディストリビューションでrpmパッケージが破損する原因となりました (issue #115784)。Electron v13への更新により、ネイティブモジュールをランタイムと同じコンパイラツールチェーンでビルドできるようになりました。具体的には、現在Clangを使用し、ランタイムのlibcxxを静的にリンクしています。これにより、バイナリサイズを約10MBというわずかな増加に抑えつつCXXABI要件をバイパスし、これらのディストリビューションのサポートを復活させることができました。Insidersでのテストにご協力いただき、ありがとうございました。

ドキュメント

VS CodeにおけるJulia

Juliaプログラミング言語のVS Codeにおけるサポートを説明する新しいトピック「Visual Studio CodeにおけるJulia」が、Julia拡張機能と共に利用可能です。Julia拡張機能には、コード補完、コードナビゲーション、デバッグなどの豊富な言語機能に加え、統合されたREPLとプロットナビゲーターが含まれています。

Julia extension

Azure Machine Learning

Azure Machine Learning拡張機能がAzure Machine Learningクラウドベースの機械学習モデルをVS Codeから直接操作できるようにする方法について、VS CodeにおけるAzure Machine Learningの概要を読むことができます。

注目すべき修正点

  • 82489: 「AltGr」キー使用時のキーボード入力の誤り
  • 115945: ツールバーがドッキングされている場合にデバッグツールバーのコマンドが欠落する
  • 118196: デバッグセッション再起動時にargs-listの要素が更新されない
  • 121201: iPadでメニュー選択が正しくレンダリングされない
  • 124128: デバッグ停止時に拡張機能開発ウィンドウが閉じられない
  • 125259: デバッグ開始前にlaunch.jsonが保存されない
  • 126102: SkipFilesがスキップ対象ファイルを一時的に開いてしまい、速度低下を引き起こす
  • 126911: 拡張機能デバッグ: デバッグセッション停止時にウィンドウが閉じない
  • 128484: debug: 起動失敗時のモーダルダイアログを無効にするオプション
  • 129019: 閉じた状態で開始したツリービューは内容を表示するために再度更新(または再開)が必要
  • 129469: 設定エディターの入力ボックスを大きくできる
  • 129645: 設定UIでコードブロックのシンタックスハイライトを有効にする
  • 129844: markdownEnumDescriptionsが設定UIでマークダウンの`##`を削除せず、settings.jsonでも##を削除しない
  • 130265: Nodeデバッガーが未処理のPromise拒否で停止しない

ありがとうございます

最後に、今月 VS Code に貢献してくださった以下の皆様に、心からの感謝を申し上げます。

問題追跡への貢献者

vscodeへの貢献者

vscode-generator-codeへの貢献者

vscode-js-debugへの貢献者

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

debug-adapter-protocolへの貢献者

language-server-protocolへの貢献者

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

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

monaco-languages への貢献