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

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

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

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


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

これらのリリースノートをオンラインで読むには、code.visualstudio.comUpdatesにアクセスしてください。

ライブにご参加ください。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色まで構成できます。

この機能を実装したのは、有名なBracket Pair Colorizer拡張機能(CoenraadS氏作)のパフォーマンスの問題に対処するためです。

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

オートコンプリートでのインラインサジェスト

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

この機能を使用するには、サジェストプレビューを有効にする必要があります("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デバッグ

レガシーノードデバッガーは廃止

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起動タイプを使用できます。

async関数とNode.js内部でのステップ実行を改善

デバッガーのskipFilesを設定して、Node.jsの内部など、特定のコードへのステップインを回避できます。Node.jsの内部は、async関数をステップ実行するときによくヒットする可能性があります。

ただし、Node.jsは「ブラックボックス化」されたスクリプトを処理する場合、常に正しい動作を示すとは限らないため、今回のイテレーションでは、デバッガーに「合成ブラックボックス化」を導入しました。これにより、特にasync関数をステップ実行する場合に、Node.jsプログラムを操作する際の信頼性が大幅に向上するはずです。

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

インストーラー

サポートされているファイルタイプに対してVS Codeをデフォルトで登録

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

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

Windows 11上のMicrosoft Store

今後のWindows 11では、新しいMicrosoft Storeがより従来のアプリケーションタイプとインストーラーをサポートできるようになります。Windows Insidersプログラムを通じてWindows 11をすでにテストしている場合は、ストアで検索することで、最新リリースの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倍以上のサイズです!これは転送する余分なバイト数が多く、受信者はその文字列を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ノートブックで行ごとに実行機能をサポートするようになりました。これは、セルのコードを1行ずつ実行できるシンプルなデバッグモードです。試してみるには、選択したカーネルとしてipykernel v6以降がインストールされていることを確認し、行ごとに実行ボタンを選択します。

デバッグ

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

Jupyterキーマップ

Jupyterクラシックキーバインドを個別のJupyter Keymap拡張機能に抽出しました。別のノートブックキーバインドセットを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: すべてのコメントを展開およびGitHub Pull Requests: すべてのコメントを折りたたむコマンドを使用して展開および折りたたむことができます。展開/折りたたみ状態を制御する設定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 モジュールのサポートも含まれています。

Visual Studio Code for the Web をまだご覧になっていない場合は、GitHub リポジトリの <> Code タブで '.' (ピリオドキー) を押すと、Web ベースの VS Code が起動し、ソースコードを閲覧および編集できます。

コマンドの短いタイトル

commands contribution point を使用すると、拡張機能は、タイトル、カテゴリ、アイコンなどのコマンドの UI プロパティを定義できます。一方、メニューはコマンドを表示する「場所」であり、メニューはコマンドの UI プロパティの一部または全部を表示する場合があります。たとえば、アイコンのみを表示するメニューもあれば、タイトルまたはカテゴリとタイトルを表示するメニューもあります。拡張機能の作成者として、グローバルメニューとローカルメニューの両方で適切に機能するコマンドタイトルを考えるのは難しい場合があります。たとえば、コマンドパレットはコンテキストメニューよりも多くの単語を表示できます。

異なるタイトルを許可するために、新しい shortTitle プロパティが追加されました。これにより、コマンドは、UI に応じて適切に機能する短いタイトルを提供できます。たとえば、コマンドパレットでは Notebook: Clear All Cell Output、ノートブックツールバーでは短い Clear All などです。

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

.env 名前空間に、アプリケーションホスト appHost プロパティが含まれるようになりました。appHost を使用すると、拡張機能の開発者は VS Code がホストされている環境を特定できます。例としては、desktop、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) 用に個別の拡張機能バージョンを作成できるようにする、プラットフォーム固有の拡張機能の開発を進めてきました。この機能に関して Marketplace チームと協力しており、ソリューションを最終決定しました。今月のマイルストーンでは、実装を開始し、間もなく拡張機能の作成者に提供する予定です。更新情報やフィードバックを提供するには、issue #23251 をフォローしてください。

更新された codicon

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

An example of updated codicons

  • folder-library
  • run-errors

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • デバッグアダプターが setVariable リクエスト (supportsSetVariable capability がないか false) をサポートしておらず、変数が evaluateName プロパティを持ち、編集可能 (VariablePresentationHintreadOnly 属性が true ではない) な場合、VARIABLES ビューと WATCH ビューで変数の値を変更する場合。
  • WATCH ビューで、ウォッチ式が編集可能 (VariablePresentationHintreadOnly 属性が true ではない) な場合、割り当て可能な式の値を変更する場合。

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

Debug Adapter Protocol では、Message of an ErrorResponseurl を返すことを許可しています。url にはメッセージに関する追加情報があり、urlLabel はユーザーに URL を開くための UI として表示されます。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 capability に値 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

ぜひ試してみて、ご意見をお聞かせください。注意すべき点の 1 つは、Quick Pick の スクロール位置に関する既知の問題が現在あり、この新しい提案された API によって増幅されると考えています。この問題に対処するための適切な API セットに取り組んでいます。ご意見をお聞かせください。issue で議論に参加してください。

テストタグ

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

エラー以外のテスト出力

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

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

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

エンジニアリング

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

VS Code バージョン 1.53 では、ビルドイメージを更新して新しい Electron バージョンを使用するようにしました。これにより、一部のディストリビューションで rpm パッケージを破損させるネイティブモジュールの CXXABI 要件が変更されました issue #115784。Electron v13 への更新により、ランタイムと同じコンパイラツールチェーンを使用してネイティブモジュールをビルドできるようになりました。具体的には、Clang を使用し、ランタイムから libcxx を静的にリンクするようになりました。これにより、バイナリサイズがわずか約 10 MB 増加するだけで 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: デバッグセッションを再起動しても、args-list の要素が更新されない
  • 121201: iPad でのメニュー選択が正しくレンダリングされない
  • 124128: デバッグが停止しても、拡張機能開発ウィンドウが閉じられない
  • 125259: デバッグが開始前に launch.json を保存しない
  • 126102: SkipFiles は一時的にスキップするファイルを開き、速度低下を引き起こす
  • 126911: 拡張機能のデバッグ: デバッグセッションを停止してもウィンドウが閉じられない
  • 128484: デバッグ: 起動失敗時にモーダルダイアログを無効にするオプション
  • 129019: 閉じた状態で開始されたツリービューは、コンテンツを表示するために別の更新 (または再オープン) が必要
  • 129469: 設定エディターの入力ボックスを大きくすることができる
  • 129645: 設定 UI でのコードブロック構文のハイライトを有効にする
  • 129844: markdownEnumDescriptions が設定 UI で markdown <backtick>##<backtick> を削除せず、settings.json で ## を削除しない
  • 130265: Node デバッガーが未処理の Promise rejection でブレークしない

謝辞

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

Issue 追跡への貢献

vscode への貢献

vscode-generator-code への貢献

vscode-js-debug への貢献

vscode-pull-request-github への貢献

debug-adapter-protocol への貢献

language-server-protocol への貢献

monaco-editor への貢献

monaco-html への貢献

monaco-languages への貢献