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

"コードへのパイプ"言語検出(拡張子なしファイルの検出のデモンストレーション)

テーマ: 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拡張機能のパフォーマンス問題を解決するために実装されました。

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

オートコンプリートでのインライン候補

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

この機能を使用するには、サジェストプレビューが有効になっている必要があります ("editor.suggest.preview": true)。

更新されたピークビュー

ピークビューを視覚的に刷新し、他のエディタービューと統一しました。

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

ウィンドウのリロード後の再接続が高速化

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

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

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

この新しい実装による速度向上は、ターミナルの数、ハードウェア、ターミナルのバッファサイズ、ターミナルで何が起こっていたかなど、多くの要因に依存します。完全なターミナルバッファの復元の概算では、約5~10倍の速度向上が期待できます。

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

デバッグ

WATCHビューで値を設定する

コンテキストメニューの値の設定アクションを使用して、WATCHビューで監視対象の式の値を設定できるようになりました。

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

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

UIの軽微な改善

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

  • すでに実行中のデバッグセッションの別のインスタンスを開始する場合、誤って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プログラムをデバッグするために古いデバッガーが必要な場合は、[非推奨] Node Debugまたは[非推奨] 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 Storeが、より従来のアプリケーションタイプやインストーラーをサポートできるようになります。Windows Insiderプログラムを通じてすでにWindows 11をテストしている場合は、Storeで検索することで、VS Codeの最新リリースを今すぐインストールできます。インストールすると、当社のウェブサイトからユーザーインストールとして利用できるものと同じVS Codeが利用でき、アップデートはこれまでと同様にアプリ内で処理されます。

ノートブック

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

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

[Link text](#_header-slug)

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

大規模な出力に対するパフォーマンスの向上

ノートブックで大規模な出力を扱う方法を最適化し、パフォーマンスを大幅に向上させました。

舞台裏では、VS Codeはノートブックの出力をUint8Arraysを使用してバイナリデータとして保存します。以前は、拡張機能ホストプロセスとレンダラープロセス間で出力データを転送する際、データはまず数値の配列に変換され、その後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倍以上のサイズです!転送する余分なバイトが非常に多く、受信側は再びUint8Arrayに変換するためにその文字列をJSONとして解析する必要があります。この解析は、数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.enabledtypescript.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)において、検索文字列を引用符で囲むことでファジー検索結果を除外する機能を追加しました。

これが特に役立つシナリオ

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

結果の「ごちゃごちゃ感」を減らしたい場合

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

拡張機能への貢献

Jupyter

行ごとの実行

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

デバッグ

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

Jupyterキーマップ

Jupyterの従来のキーバインディングは、独立したJupyterキーマップ拡張機能に抽出されました。Marketplaceから別のノートブックキーバインディングのセットを使用したい場合は、この拡張機能を無効にすることができます。

Python

テストインターフェースの刷新

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

Running tests with the new Python Test Explorer

エディターからターミナルでPythonファイルを実行・デバッグする

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

GitHub Pull Requests and Issues

GitHub Pull Requests and Issues拡張機能で、すべてのコメントを展開・折りたたみできる待望の機能が利用可能になりました。すべてのコメントは、GitHub Pull Requests: Expand All CommentsおよびGitHub Pull Requests: Collapse All Commentsコマンドで展開・折りたたむことができます。また、展開・折りたたみ状態を制御する設定githubPullRequests.commentExpandStateもあります。最後に、コメントUI内からすべてのコメントを折りたたむこともできます。

Collapse all pull request comments button

すべての新機能とアップデートについては、拡張機能の0.30.0リリースの完全な変更履歴をご覧ください。

拡張機能作成

Web拡張機能

VS Codeがブラウザで実行されている場合、拡張機能はブラウザ内で実行されている拡張機能ホストに読み込まれます。「ウェブ拡張機能ホスト」はブラウザによって制約されており、拡張機能はローカルファイルシステムやプラットフォーム機能にアクセスできません。拡張機能開発者がVS Code for 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などの異なるプラットフォーム向けに個別の拡張機能バージョンを作成できる)について、進展がありました。イシュー #23251では、マーケットプレイスチームと協力してこの機能に取り組み、解決策を最終決定しました。このマイルストーンでは、実装を開始し、間もなく拡張機能作成者に提供する予定です。更新情報やフィードバックについては、イシュー #23251をフォローしてご提供ください。

更新された codicon

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

An example of updated codicons

  • folder-library
  • run-errors

ウォークスルー貢献の更新

ウォークスルーのステップメディアとしてテーマ設定可能なSVGの使用

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

ウォークスルーに関心のあるファイルの宣言

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

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

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

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

「DebugSessionOptions」に新しい「managedByParent」プロパティを追加

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

デバッグアダプタープロトコルの「showUser」プロパティ

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

その他のデバッグアダプタープロトコル(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を開く」ボタンの抑制

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

デバッグアダプタープロトコル

新しい「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により、ターミナルが「操作された」かどうかをクエリできるようになりました。操作とは、プロセスにデータが送信されたことを意味し、さまざまな理由で発生する可能性がありますが、主なものはキーボード入力です。

QuickPickItemのボタン

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

Buttons in QuickPickItems

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

テストタグ

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

エラー以外のテスト出力

テストAPIはテスト失敗メッセージをサポートしていますが、これまで特定テストケースにエラー以外の出力を関連付ける方法がありませんでした。この問題を解決するため、オプションのTestItemlocationTestRun.appendOutputメソッドに渡す方法を検討しています。何かご意見がありましたら、イシュー #129201にフィードバックをお願いします!

インライン補完プロバイダー:オートコンプリートウィジェットとの相互作用

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

エンジニアリング

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

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

ドキュメント

VS CodeでのJulia

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

Julia extension

Azure Machine Learning

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

注目すべき修正点

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