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

2022年10月 (バージョン 1.73)

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

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


Visual Studio Code 2022年10月リリースへようこそ。このバージョンには多くの更新が含まれており、皆様に気に入っていただければ幸いです。主なハイライトは次のとおりです。

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

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

アクセシビリティ

新しいオーディオキュー

タスクやターミナルで役立つ新しいオーディオキューが追加されました。

  • タスク完了 - タスクが完了したことを通知する音 (audioCues.taskCompleted 設定で制御)。
  • タスク失敗 - タスクが失敗したときに鳴る音 (audioCues.taskFailed)。
  • ターミナルクイックフィックス - 現在の行でクイックフィックスが利用可能な場合 (audioCues.terminalQuickFix)。

スクリーンリーダーモードでの単語の折り返し

スクリーンリーダーエクスペリエンスの低下を防ぐため、VS Code をスクリーンリーダーモードで実行している場合、単語の折り返しが無効になっていました。これは修正され、editor.wordWrap 経由で有効にできます。

アクセシビリティ設定タグ

アクセシビリティ関連の設定の検出性を向上させるために、accessibility タグが利用できるようになりました。

基本設定: アクセシビリティ設定を開く コマンドは、@tag:accessibility フィルターで設定エディターを開きます。

Workbench

検索ビューの結果ツリービューでフォルダーを右クリックすると、コンテキストメニューに2つの新しいオプションが追加されました。

  • フォルダーに検索を制限する を選択すると、選択したフォルダーパスが 含めるファイル テキストボックスに追加されます。このテキストボックスにパスを追加すると、検索結果がリストされたパスまたはパターンに一致するものに限定されます。

    Using Restrict Search to Folder

    テーマ: GitHub Dark Dimmed (vscode.dev でプレビュー)

  • 検索からフォルダーを除外する を選択すると、選択したフォルダーパスが 除外するファイル テキストボックスに追加されます。ここにパスを追加すると、リストされたパスまたはパターンに一致する検索結果が除外されます。

    Using Exclude Folder from Search

    テーマ: GitHub Dark Dimmed (vscode.dev でプレビュー)

コマンドセンターモードのショートカット

コマンドセンターに新しい上部セクションが追加され、ファイルへの移動、コマンドの実行などが簡単にできるようになりました。

この短いモードリストにはキーバインディングのヒントも表示されるため、コマンドセンターを経由せずに、最もよく使用するモード (たとえば ファイルへ移動) に直接ジャンプできます。

コマンドセンターUIは既定ではタイトルバーに表示されませんが、ウィンドウ: コマンドセンター (window.commandCenter) 設定またはタイトルバーを右クリックして コマンドセンター をチェックすることで有効にできます。

設定エディターのワークスペース信頼とポリシーインジケーター

制限付きモードのワークスペース、または組織のポリシー下で管理されているために適用されない設定は、そのステータスを表示するためにインジケーターを使用するようになりました。ユーザーは制限付きモードのワークスペースでもワークスペース設定を読み書きできますが (これは settings.json ファイルを使用して常に可能でした)、制限付きワークスペースで使用する設定の最終値を計算する際には、ワークスペース設定値は考慮されません。

また、デフォルトのライトテーマにもいくつかの調整が加えられ、インジケーター領域でのcodiconのレンダリングがより鮮明になり、フォーカス境界線がよりタイトになりました。

Restricted workspace settings demo showing keyboard navigation and toggling a checkbox even when the setting is restricted

アウトラインのデフォルトの折りたたみ状態

アウトラインビューのアイテムのデフォルトの折りたたみ状態を制御する新しい設定 outline.collapseItems が追加されました。デフォルト値は false で、アウトラインのアイテムはデフォルトで展開されます。true に設定すると、アウトラインのアイテムはデフォルトで折りたたまれます。この設定は言語ごとに設定でき、ノートブックでも機能します。

「表示」メニューの再編成

VS Code のメニューバーの「表示」メニューでは、最後のグループがエディターアクションの増え続けるリストでした。メニューの増加と機能のバランスをとるため、主に外観に関連する項目を 外観 サブメニューに移動しました。単語の折り返しスティッキースクロール のオプションは、メニューの下部の元の位置に残されています。

Updated View menu with Appearance submenu expanded

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

入力UIの角丸

テキスト入力、テキストエリア、ドロップダウンはすべて、以前のリリースでボタンに適用された同じスタイルに合わせて、角が丸く表示されるようになりました。

Text input with rounded corners in the Search input box

クイックピックリストスタイルの更新

クイックピックUIで使用されるリストスタイルは、角丸と左右のマージンの増加により、軽く更新されました。

リストビューのcodiconを更新

フラットリストビューとツリーリストビューで、リストタイプを表すためにより読みやすいcodiconが使用されるようになりました。

セカンダリサイドバーのフォアグラウンドカラー

セカンダリサイドバーは一般的にプライマリサイドバーのテーマ設定を模倣しますが、すべてのテーマキーが適切に認識されていませんでした。セカンダリサイドバーは、"sideBar.foreground" テーマキーを適切に使用するようになりました。

下の図では、エクスプローラーがある右側のプライマリサイドバーと、アウトラインビューがある左側のセカンダリサイドバーの両方が、同じピンクのフォアグラウンドカラーを使用しています。

Secondary Side Bar with a pink foreground color matching the Primary Side Bar

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

「折りたたみ範囲が多すぎます」通知の廃止

パフォーマンス上の理由から、エディターに表示される折りたたみ範囲の数を5000に制限しています。この制限は、editor.foldingMaximumRegions 設定で構成できます。以前は、この制限を超えるとVS Codeが通知を表示していましたが、現在はステータスバーの言語ステータスホバーにその情報が表示されます。

Folding limit warning in the language status

デフォルトの折りたたみプロバイダー

通常、ある言語に対して複数の折りたたみプロバイダーがアクティブな場合、VS Code は結果をマージしようとします。範囲が競合する場合は、一部の範囲は破棄されます。さらに、すべての折りたたみプロバイダーが他のプロバイダーと組み合わせられるわけではありません。

新しい editor.defaultFoldingProvider 設定を使用すると、使用する折りたたみプロバイダーを選択できます。プロバイダーの名前は、それを貢献する拡張機能の拡張機能ID ({publisher}.{extension}) です。

次の例では、(架空の) 拡張機能 aeschli.better-folding からの折りたたみプロバイダーを JavaScript のデフォルトとして設定しています。

    "[javascript]": {
            "editor.defaultFoldingRangeProvider": "aeschli.better-folding"
    }

出力チャンネルごとのログレベル設定

開発者: ログレベルを設定... コマンドを使用して、ログ出力チャンネルごとにログレベルを設定できるようになりました。これは、特定のログ出力チャンネルからのみより多くのログを表示したい場合に役立ちます。このコマンドは、まず出力チャンネルのリストを表示し、1つを選択すると、ログレベルを設定するよう求められます。

Developer: Set Log Level command dropdown list of output channels

コマンドラインから拡張機能ごとにログレベルを設定することもできます。これは、特定の拡張機能からより多くのログを表示したい場合に役立ちます。たとえば、次のスクリプトを使用すると、Git 拡張機能からのログ出力チャンネルのデフォルトのログレベルを debug に設定して VS Code を起動できます。

code --log vscode.git:debug

新しい list.collapseAllToFocus ツリービューコマンド

新しいコマンド list.collapseAllToFocus を使用すると、現在フォーカスされているツリーアイテムを再帰的に折りたたむことができます。これは、ルートではないツリーアイテムのすべての子を折りたたみたい場合に便利です。このコマンドにはデフォルトのキーバインディングはありませんが、キーボードショートカットエディター (⌘K ⌘S (Windows, Linux Ctrl+K Ctrl+S)) を介して独自のキーボードショートカットを追加できます。

マージエディター

今月のマイルストーンでは、マージエディターの洗練を続け、今回の更新にはいくつかのバグ修正と新機能が含まれています。

両側を受け入れると競合が追加される

このリリースでは、Incoming を受け入れるCurrent を受け入れる の両方を常に選択できるようになりました。両方のオプションが選択された場合、マージエディターは対応する変更行を追加します。

下の短いビデオでは、両方の行が受け入れられるため、RelativePattern が2回インポートされています。

A screen recording of how both sides are accepted

競合が文字レベルで競合なく解決できる場合、結合を受け入れる オプションが表示され、これを使用して競合を自動的に解決できます。

下のビデオでは、両方のシンボルが同じインポートステートメントにインポートされています。

A screen recording of how a combination is accepted

ベースに対する差分装飾

ベースビューが開かれると、現在フォーカスされている側とベース間の差分が表示されます。この差分ビューは、IncomingCurrent の変更をよりよく理解するために使用できます。

A screen recording of how a diff between incoming, current, and base is shown

差分アルゴリズムの改善

マージエディターのデフォルトの差分アルゴリズムが変更されました。新しい差分アルゴリズムはマージシナリオに最適化されています。一般的なケースでは、ハンクの数が最小化され、挿入位置が最適化されます。新しいアルゴリズムが問題を引き起こす場合、"mergeEditor.diffAlgorithm": "smart" 設定を使用して以前のアルゴリズムに戻すことができます (デフォルトは現在 experimental です)。

次のスクリーンショットは、挿入の改善を示しています。どちらの差分も正しいですが、新しい動作では挿入されたテキストがより明確に強調表示されます。

以前の動作

The old behavior highlights across both the new and existing text

新しい動作

The new behavior highlights just the new text

新しい差分アルゴリズムは、現在マージエディターでのみデフォルトで有効になっています。通常の差分エディターでも新しい差分アルゴリズムを使用したい場合は、"diffEditor.diffAlgorithm": "experimental" を設定できます。

競合間を移動する

競合カウンターをクリックして、次の未処理の競合にジャンプできるようになりました。

Clicking the conflict counter jumps to the next conflict

言語

ファイルの移動や名前変更時に、Markdown内のリンクや画像を誤って破損させてしまうことにうんざりしていませんか?新しい markdown.updateLinksOnFileMove.enabled 設定を試してみてください!

この新しい設定を有効にすると、VS Code エクスプローラーでファイルが移動または名前変更されたときに、VS Code は Markdown 内のリンクと画像を自動的に更新します。

Markdown file links are updated on file move and rename

影響を受けるファイルの種類は、markdown.updateLinksOnFileMove.include を使用して制御できます。デフォルトでは、すべてのMarkdownファイルと一般的な画像ファイル形式で有効になっています。

新しい Markdown: ワークスペース内のファイルへのリンクを挿入 および Markdown: ワークスペースから画像を挿入 コマンドを使用すると、ファイルピッカーを使用してMarkdownにリンクや画像をすばやく挿入できます。

これらのコマンドは、Markdownファイルにリンクや画像を追加するための単なる1つのオプションであることを忘れないでください。この目的のためにMarkdownパス補完を使用したり、さらにリンクや画像を挿入するためにVS Code のエクスプローラーからファイルをドラッグアンドドロップすることもできます。

組み込みのMarkdown検証機能が、未使用または重複するリンク定義を通知できるようになりました。この機能は markdown.validate.enabled で有効にできます。

An warning about a duplicate link definition

これらのエラーをより詳細に制御したい場合は、これらの markdown.validate 設定を使用して、エラーを無効にする (ignore) か、その重大度を変更する (warning, error) ことができます。

  • markdown.validate.duplicateLinkDefinitions.enabled
  • markdown.validate.unusedLinkDefinitions.enabled

重複または未使用のリンク定義を削除するためのクイックフィックスも利用できます。

Markdownのリンク出現箇所強調表示は、現在のドキュメントでカーソル下のリンクが使用されているすべての場所を示します。

Highlighting all occurrences of a link

カーソルがドキュメントの最初のリンク上にあるとき、First Header へのすべてのリンクとヘッダー自体が、ドキュメント内およびドキュメントの右側のガターで強調表示されることに注目してください。

この機能はデフォルトでオフになっています。有効にするには、markdown.occurrencesHighlight.enabled 設定をオンにしてください。

新しいRazor構文ハイライト文法

VS Code には、Razor ファイルの構文ハイライト用の、新しくより適切にメンテナンスされたRazor文法が搭載されました。新しい文法は積極的にメンテナンスされており、古い文法に存在した問題を修正しています。

Web 用 VS Code

ブランチ作成と保護ワークフローの改善

Web 用 VS Code で GitHub または Azure Repos リポジトリにいる場合、保護されたブランチにコミットすると、現在のブランチが保護されていることが通知され、新しいブランチを作成するよう促されるようになりました。

このフローは、以下の設定も尊重します。

  • git.branchPrefix は、ブランチ名のクイック入力を設定済みのプレフィックスで事前に入力することを可能にします。
  • "git.branchProtectionPrompt": "alwaysCommitToNewBranch" を設定すると、保護されたブランチにコミットしようとしたときにプロンプトをスキップし、新しいブランチを作成するためのクイック入力に直接進むことができます。

さらに、新しいブランチを作成する際に、"remoteHub.switchToCreatedBranch": "always" を設定することで、新しく作成されたブランチに切り替えるかどうかのプロンプトをバイパスできます。

上記のすべては、デスクトップ版 VS Code で GitHub リポジトリ または Azure Repos 拡張機能を使用する場合にも適用されます。

Webでのローカライズの改善

数ヶ月前、私たちは Web 用 VS Code のローカライズに取り組み始めました。これまで、VS Code コアと拡張機能マニフェスト内で静的に宣言された文字列を持つ拡張機能はローカライズ可能でした。今回のイテレーションでは、パズルの最後のピースである拡張機能コード内の文字列を完成させました。これは、先月提案したローカライズAPIの最終化によるものです。

私たちがすべての拡張機能でこの新しいAPIを引き続き採用するにつれて、VS Code のさらなるローカライズに注目してください。拡張機能の作者である場合は、vscode-l10n リポジトリで新しいAPIの詳細を学ぶことができます。

拡張機能への貢献

Python

isort拡張機能への移行

2022年5月のリリースで、Python拡張機能と連携してインポートをソートする新しいisort拡張機能を発表しました。たとえば、ファイルを開いたときにインポートがisort標準に従っていない場合、エラー診断が表示され、インポート順序を修正するためのコードアクションが提供されます。このリリースでは、Python拡張機能に組み込まれたisortサポートの代わりに、スタンドアロンのisort拡張機能を使用するように移行しており、Python拡張機能と同時に自動的にインストールされます。

Pylanceでの自動インポートがデフォルトでオフに

Pylanceで自動インポートが最初に実装されて以来、たとえば提案が誤って受け入れられた場合に、インポートがファイルに自動的に追加されることがいかに紛らわしく、時には煩わしいかについて多くのフィードバックが寄せられていました。このリリースから、Pylanceを使用する際にパッケージがデフォルトで自動的にインポートされなくなります。Pythonプロジェクトで自動インポートを再度有効にしたい場合は、"python.analysis.autoImportCompletions": true を設定することで可能です。

PylintおよびFlake8拡張機能の推奨

以前のリリースで、Language Server Protocol (LSP) を介してPython拡張機能と連携し、リンティングを提供する新しいPylintおよびFlake8拡張機能を発表しました。このリリースでは、Python拡張機能に組み込まれているPylintおよびFlake8機能を引き続き使用している場合、これらの新しい拡張機能をインストールするように促す通知が表示されます。

A notification recommending the Pylint extension with a button to install it

リモート開発

Remote Development 拡張機能を使用すると、コンテナー、リモートマシン、またはWindows Subsystem for Linux (WSL) をフル機能の開発環境として使用できます。このリリースのハイライトは次のとおりです。

  • 開発コンテナーテンプレート - 既存のテンプレートに基づいて開発コンテナーをすばやく作成します。
  • 開発コンテナー機能 - 事前パッケージ化された機能を含めることで、開発コンテナーに機能を追加します (または独自の機能を作成することもできます!)。
  • 開始フォルダーなしで新しい開発コンテナーを作成します。

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

GitHubプルリクエストとイシュー

プルリクエストとイシューの作業、作成、管理を可能にするGitHub Pull Requests and Issues拡張機能の開発は継続されています。その他のハイライトについては、拡張機能の0.54.0 リリース の変更履歴を確認してください。

プレビュー機能

TypeScript 4.9

この更新には、近日公開されるTypeScript 4.9リリースへのサポートが含まれています。TypeScriptチームが現在取り組んでいることの詳細については、TypeScript 4.9イテレーション計画を参照してください。エディターツールの主なハイライトは次のとおりです。

TypeScript 4.9 のナイトリービルドの使用を開始するには、TypeScript Nightly 拡張機能をインストールしてください。

設定プロファイル

ここ数ヶ月、コミュニティから最も要望の多かった機能の1つである VS Code の 設定プロファイル のサポートに取り組んできました。この機能は workbench.experimental.settingsProfiles.enabled 設定を介してプレビューで利用できます。ぜひ試してみて、vscode リポジトリで課題を作成するか、課題 #116740にコメントすることでフィードバックをお寄せください。

同期されたプロファイルデータの表示

同期アクティビティ (リモート) ビューで、各プロファイルで同期されているデータを確認できるようになりました。これは、各プロファイルでどのようなデータが同期されているかを理解するのに役立ちます。

Sync Activity (Remote) view showing history of Profiles

注意: この機能は現在、VS Code のInsidersリリースでのみ利用可能です。

拡張機能作成

ワークスペース編集にメタデータを提供する

ワークスペース編集を適用するAPIにより、拡張機能は、たとえばその編集がリファクタリングであることを示すメタデータを提供できるようになりました。この追加メタデータは、エディターおよびリファクタリング後の自動保存 (設定: files.refactoring.autoSave) で尊重されます。

MarkdownStringとウェブビューで実行できるコマンドを制限する

MarkdownString 内のコマンドリンクは、VS Code のホバーメッセージや IntelliSense の詳細でカスタムのインタラクションを作成するのに便利な方法です。ウェブビューもコマンドリンクを使用して、ウェブビューから直接 VS Code コマンドをトリガーできます。しかし、コマンドリンクはセキュリティを考慮して設計されていない多くのコマンドを含め、任意のコマンドを実行するために使用できるため、危険な場合もあります。このため、コマンドリンクはデフォルトで無効になっており、拡張機能によって明示的に有効にする必要があります。

このオールオアナッシングのアプローチは機能しますが、拡張機能の作者にセキュリティ上の負担をかけすぎていることも判明しました。コマンドリンクを使用する必要がある拡張機能は、表示するコンテンツに安全なコマンドのみが含まれていることを検証する必要があります。これは忘れやすく、間違えやすい点です。

これを改善するために、拡張機能が信頼できるコマンドのサブセットのみを有効にできる新しいコマンドリンク有効化APIを導入しています。

MarkdownString では、isTrusted プロパティが実行可能なコマンドの許可リストを受け入れるようになりました (他のすべてのコマンドはブロックされます)。

const md = new vscode.MarkdownString(
  `A command link: [Open setting](command:workbench.action.openSettings)`
);

// Set trusted commands instead of enabling all commands
md.isTrusted = { enabledCommands: ['workbench.action.openSettings'] };

ウェブビューでは、WebviewOptions.enableCommandUris プロパティが単純な true/false ではなく、有効なコマンドのリストになりました。

const options: vscode.WebviewOptions = {
  enableCommandUris: ['workbench.action.openSettings']
};

セキュリティを向上させるため、コマンドリンクを使用するすべての拡張機能がこの新しい、より制限的なAPIを採用することを強く推奨します。

ウェブビューとウェブビュービューの一貫したオリジン

ウェブビューの読み込み時間を改善するため、特定のタイプのウェブビューのすべてのインスタンスで一貫したオリジンを維持するように努めています。これには主に2つの利点があります。

  • ウェブビューはキャッシュをより効果的に利用できます。これにより、ローカルリソースの読み込みが速くなるはずです。

  • ウェブビューは、オリジンごとにパーティション分割されるローカルストレージやその他のWeb APIを使用できます。

    ウェブビューのすべてのインスタンスが同じオリジンで実行されるようになったため、ローカルストレージなどのAPIを使用している場合、リソースごとにドキュメント固有のデータ/状態をパーティション分割するようにしてください。たとえば、localStorage.setItem('scrollPosition', 100) は、すべてのウェブビューインスタンスで scrollPosition を100に設定します。個々のリソースのスクロール位置を設定したい場合は、キーにリソースIDも含める必要があります: localStorage.setItem(myDocUri, JSON.stringify({scrollPosition: 100 }))

    また、ドキュメントの内容などの重要なデータを保存するために、localStorage や類似の API を決して使用しないでください。VS Code はウェブビューの一貫したオリジンを維持するために最善を尽くしますが、オリジンが変更されないことを保証することはできません。

    多くの場合、上記の2つの問題を処理してくれるウェブビュー状態APIを使用すべきです。

オリジンは、各拡張機能とウェブビューのタイプごとにランダムに生成されます。同じオリジンがウェブビューのすべてのインスタンスで共有されます。

現在、通常のウェブビューウェブビュービューの両方が一貫したオリジンを維持しようとしています。次のイテレーションでは、カスタムエディターとノートブックウェブビューにもこれを採用する予定です。

Debug Adapter Protocol

新しい 'startDebugging' リバースリクエスト

現在、VS Code は複数の同時デバッグセッションをサポートしていますが、Debug Adapter Protocol (DAP) は単一のセッションのみを扱います。つまり、プログラム的に新しいデバッグセッションを作成することはDAPの一部ではなく、DAPまたはデバッグアダプターの外側、通常はデバッグアダプターを含むデバッグ拡張機能で行うことしかできません。結果として、子プロセスを自動的にデバッグするなどのマルチセッション機能は、非VS Code DAPクライアントでは容易に利用できません。これは、通常、デバッグアダプターのみを使用し、VS Code固有のデバッグ拡張機能を使用しないためです。

この状況を改善するため、DAPに新しいリバースリクエスト startDebugging を追加しました。これにより、拡張機能はデバッグアダプターの**内部から**新しいデバッグセッション (呼び出し元と同じタイプ) を作成できます。クライアント機能 supportsStartDebuggingRequest は、クライアントが startDebugging をサポートしていることをデバッグアダプターに示します。

10月のリリースでは、VS Code は startDebugging を実装しました。

提案されたAPI

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

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

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

静的ノートブックのプリロード

新しい notebookPreload 提案された貢献ポイントにより、拡張機能は特定のタイプのノートブックに読み込まれるスクリプトを貢献できます。

{
    "contributes": {
        "notebookPreload": [
            {
                "type": "jupyter-notebook", // Type of notebook for the preload script
                "entrypoint": "./path/to/preload.js"
            }
        ]
    }
}

この貢献ポイントは、contribNotebookStaticPreloads APIの提案によって制御されます。拡張機能はプリロードを使用して、ノートブックのJavaScript環境でグローバルを読み込んだり定義したりできます。

プリロードスクリプトは、activate 関数をエクスポートするJavaScriptモジュールである必要があります。すべてのプリロードは、すべてのレンダラースクリプトの前に評価されます。

ノートブックのレンダラーがすべての出力アイテムにアクセス可能に

カスタムノートブックレンダラーは、現在レンダリングしている出力アイテムのすべてのMIMEデータにアクセスできるようになりました。レンダラーがメインの出力アイテムを適切にレンダリングできないと判断した場合、このAPI提案により、代わりに他のMIMEタイプのいずれかをレンダリングするようにフォールバックできます。

この提案のエントリポイントは、新しい OutputItem._allOutputItems プロパティです。このプロパティは、現在の出力アイテムに含まれるすべてのMIMEタイプの順序付きリストです。リスト内の各アイテムは { mime, getItem() } の形式です。mimetext/htmlimage/png などのMIMEタイプであり、getItem() 関数はそのMIMEタイプの OutputItem へのプロミスを返します。

レンダラーがこの新しいAPIを使用する方法を次に示します。

async function renderOutputItem(outputInfo, element, signal) {
  const didRender = tryRenderMainItem(outputInfo, element);

  if (!didRender) {
    // Fallback to render `text/html`
    const htmlItem = await outputInfo._allOutputItems
      .find(item => item.mime === 'text/html')
      ?.getItem();
    if (htmlItem) {
      // Here we can either render the 'text/html' item ourselves
      // or delegate to another renderer.
      const renderer = await ctx.getRenderer('vscode.builtin-renderer');
      if (renderer) {
        return renderer.renderOutputItem(htmlItem, element, signal);
      }
    }
  }
}

ぜひこの提案を試して、ご意見をお聞かせください!

拡張機能テレメトリーAPI

テレメトリーのベストプラクティスをさらに推進し、拡張機能に提供されているテレメトリー機能を強化するため、このイテレーションでは提案された telemetryLogger APIが導入されます。このAPIを使用すると、拡張機能は、コア送信ロジックとして機能する TelemetryAppender (これはApplication Insightsまたは別のデータ記録サービスを利用して実装されます) を提供できます。この TelemetryAppender は、テレメトリーをログに記録するために使用すべきクラスである TelemetryLogger をインスタンス化するために使用されます。

TelemetryLogger は、送信されたテレメトリーイベントを表示するための共有出力チャネル、適切なテレメトリー設定チェック、および個人を特定できる情報のクリーンアップを提供します。さらに、VS Code APIを利用してスローされたエラーは、より良いエラー診断のためにアペンダーにログ記録されます。

テレメトリーサンプルに簡単な例があります。フィードバックは課題 #160090で提供できます。

ログ出力チャンネル

前回のマイルストーンで、ロギング専用の出力チャネルを作成するための LogOutputChannel APIの提案を導入しました。今回のイテレーションでは、これに logLevel プロパティと onDidChangeLogLevel イベントを追加しました。logLevel プロパティは出力チャネルの現在のログレベルを表し、onDidChangeLogLevel イベントは出力チャネルのログレベルが変更されたときに発生します。

/**
 * A channel for containing log output.
 */
export interface LogOutputChannel extends OutputChannel {

    /**
     * The current log level of the channel.
     * Defaults to application {@link env.logLevel application log level}.
     */
    readonly logLevel: LogLevel;

    /**
     * An {@link Event} which fires when the log level of the channel changes.
     */
    readonly onDidChangeLogLevel: Event<LogLevel>;
    ...
    ...
}

また、アプリケーションの現在のログレベルを表すために、logLevel プロパティと onDidChangeLogLevel イベントを env 名前空間に追加しました。このイベントはアプリケーションのログレベルが変更されたときに発生します。

export namespace env {
  /**
   * The current log level of the application.
   */
  export const logLevel: LogLevel;

  /**
   * An {@link Event} which fires when the log level of the application changes.
   */
  export const onDidChangeLogLevel: Event<LogLevel>;
}

エンジニアリング

入力レイテンシの最適化

VS Code のサイズが大きくなるにつれて、キー入力時のアクティビティ量も増加しました。今回のイテレーションでは、エディターで入力するときに正確に何が起こるのか、そしてキー入力が画面にレンダリングされるまで何を遅延できるのかについて、徹底的な調査を行いました。この調査の主な成果は次のとおりです。

  • エディターでのキー入力が画面にレンダリングされるまで、可能な限り多くの作業を遅延させるためのいくつかの変更が行われました。これにより、IntelliSense が表示されていない場合の入力レイテンシが約15%削減され、IntelliSense が再フィルタリングされている場合はさらに高い削減効果が見込まれます。
  • 現在、入力レイテンシを手動で測定し、このサブミリ秒*レベルで最適化するための、より洗練された手法を持っています。
  • 入力レイテンシのサンプルを追跡し、報告するのに役立つ作業中の変更があります。これにより、維持し改善するための具体的な数値が得られるでしょう。

これは、この取り組みのほんの始まりに過ぎず、次のリリースにはさらに多くの変更が加えられる予定です。

* これらの数値は、テストに使用されるハードウェアに大きく依存します。強力なハードウェアでの0.5ミリ秒の改善は、平均的なハードウェアでは2ミリ秒になる可能性があります。

自動レンダラープロファイリング

VS Code のレンダラープロセスは、その UI を担当します。点滅するカーソル、入力機能、保存を保証します。レンダラープロセスにおけるパフォーマンスの問題は、ユーザーに目に見え、悪いエクスペリエンスにつながります。レンダラープロセスにおけるパフォーマンスの問題を特定し、修正するのに役立つように、新しい設定 application.experimental.rendererProfiling を追加しました。これは、レンダラープロセスを自動的にプロファイリングするために使用できます。この設定は、プロファイリングを有効にするには on に、無効にするには off に設定できます。有効にすると、レンダラープロセスは「負荷がかかっているように見える」たびに数秒間プロファイリングされ、その後プロファイルが分析、匿名化されて検査のために送信されます。ウィンドウログを使用して、プロファイリングプロセスを追跡できます。

この機能は、まだ学習と調整中であるため、デフォルトでは現在オフになっていることに注意してください。ぜひ試してみて、ご意見をお聞かせください。

Windows 11コンテキストメニュー

このリリースでは、VS Code のセットアップは、既定で Insiders 向けに Windows 11 コンテキストメニューOpen with Code - Insiders コンテキストメニューエントリを追加します。以前 Insiders のインストール時にコンテキストメニューを有効にしていたユーザーの場合、古いスタイルのメニュー Shift + F10 に表示されていたエントリは、最新の Insiders に更新すると新しいエントリに置き換えられます。その他のユーザーは、セットアップウィザードでこのメニューエントリを有効にするために Insiders を再インストールしてオプトインする必要があります。メニューエントリの開発中に発生した問題のため、すべての Windows 11 ユーザー向けの安定版リリースにプッシュする前に、この機能をいくつかのマイルストーンの間 Insiders に限定して自信を深める予定です。

VS Code Install dialog with option to add Open with Code - Insiders action

Open with Code Insiders アクションは、Windows ファイルエクスプローラーのフォルダーおよびファイルコンテキストメニューで利用できるようになります。

Windows 11 folder context menu

注目すべき修正点

  • 151019 デバッグホバーがホバー時に非表示になる
  • 153852 提案: 拡張機能APIを高速化するためにES5クラス互換性を削除する
  • 156104 URLリンククリック時に、ポートが既に静的に転送されている場合は自動転送しない
  • 158921 「他の場所で変更された設定」インジケーターのホバーコンテンツがオーバーフローする

ありがとうございます

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

問題追跡

問題追跡への貢献者

vscodeへの貢献者

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

vscode-dev-chrome-launcherへの貢献

  • @mirdaki: stableまたはinsidersビルドを設定するオプションを追加 PR #20
  • @infinitepower18 拡張機能設定での説明追加と空白アイコンの修正 PR #18