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

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

更新 1.73.1: この更新では、以下の問題に対処しています。

ダウンロード: Windows: x64 Arm64 | Mac: ユニバーサル Intel シリコン | 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 で使用されるリストスタイルは、角丸と左右マージンの増加により、軽く刷新されました。

リストビュー用の更新された codicons

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

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

セカンダリサイドバーは一般的にプライマリサイドバーのテーマ設定を模倣しますが、すべてのテーマキーが適切に拾われていませんでした。セカンダリサイドバーは "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 Core は結果をマージしようとします。範囲が競合する場合は、一部の範囲は破棄されます。さらに、すべての折りたたみプロバイダーを他のプロバイダーと組み合わせることはできません。

新しい 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) か、重大度を変更する (warningerror) ことができます。

  • 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

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

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

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

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

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

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

ウェブにおけるローカライゼーションの改善

数か月前、私たちは VS Code for Web のローカライゼーションに取り組み始めました。これまで、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 拡張機能の推奨

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

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

リモート開発

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

  • Dev Container テンプレート - 既存のテンプレートに基づいて Dev Container を素早く作成。
  • Dev Container Features - プレパッケージされた機能を含めることで、Dev Container に機能を追加 (または独自に作成!)。
  • 開始フォルダーなしで新しい Dev Container を作成。

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

GitHub Pull Requests and Issues

プルリクエストとイシューの作成、管理、作業ができる 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リポジトリに問題を作成するか、issue #116740にコメントしてフィードバックをお寄せください。

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

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

Sync Activity (Remote) view showing history of Profiles

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

拡張機能作成

ワークスペース編集のためのメタデータの提供

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

MarkdownString および Webview で実行できるコマンドの制限

MarkdownStringコマンドリンクは、VS Code のホバーメッセージや IntelliSense の詳細でカスタムのインタラクションを作成するのに役立つ方法です。Webview もコマンドリンクを使用して、Webview から直接 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'] };

Webview の場合、WebviewOptions.enableCommandUris プロパティは、単純な true/false ではなく、有効なコマンドのリストにできるようになりました。

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

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

WebviewとWebviewビューの一貫したオリジン

Webview の読み込み時間を改善するために、特定の種類の Webview のすべてのインスタンスに対して一貫したオリジンを維持するように努めています。これには2つの主な利点があります。

  • Webview はキャッシングをより活用できます。これにより、ローカルリソースの読み込みが速くなるはずです。

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

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

    また、ローカルストレージや同様の API を使用して、ドキュメントの内容などの重要なデータを保存しないでください。VS Code は Webview の一貫したオリジンを維持するために最大限の努力を払いますが、オリジンが変わらないことを保証することはできません。

    多くの場合、上記のすべての問題を処理するWebview 状態 API を使用する必要があります。

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

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

Debug Adapter Protocol

新しい「startDebugging」逆リクエスト

現在、VS Code は複数の同時デバッグセッションをサポートしていますが、デバッグアダプタープロトコル (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 を利用してスローされたエラーは、より良いエラー診断のためにアペンダーに記録されます。

テレメトリーサンプルに簡単な例があり、issue #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

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