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

アップデート 1.73.1: このアップデートでは、これらのissueに対処しています。

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


Visual Studio Code 2022年10月リリースへようこそ。今回のバージョンでは、多くのアップデートがあり、きっと気に入っていただけると思います。主なハイライトは以下のとおりです。

これらのリリースノートをオンラインで読みたい場合は、Updatescode.visualstudio.com)をご覧ください。

Insiders: 最新機能をいち早く試したいですか?Insidersビルドをダウンロードして、最新アップデートをいち早くお試しください。

アクセシビリティ

新しいオーディオキュー

タスクとターミナルを支援する新しいオーディオキューが追加されました。

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

スクリーンリーダーモードでのワードラップ

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

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

アクセシビリティ関連の設定を見つけやすくするために、accessibilityタグが利用できるようになりました。

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

ワークベンチ

検索ビューの結果のツリービューでフォルダーを右クリックすると、コンテキストメニューに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 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)) を使用して独自のキーボードショートカットを追加できます。

マージエディター

このマイルストーンでは、マージエディターの改良を続け、このアップデートにはいくつかのバグ修正といくつかの新機能が含まれています。

両方のサイドを受け入れるとコンフリクトが追加される

今回のリリースでは、受信側を受け入れる現在の状態を受け入れるの両方を常に選択できます。両方のオプションを選択すると、マージエディターは対応する変更行を追加します。

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

A screen recording of how both sides are accepted

文字レベルでコンフリクトなしでコンフリクトを解決できる場合、組み合わせを受け入れるオプションが表示され、コンフリクトを自動的に解決するために使用できます。

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

A screen recording of how a combination is accepted

ベースに対する差分装飾

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

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エクスプローラーでファイルが移動または名前変更されたときに、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文法が用意されています。新しい文法は積極的にメンテナンスされており、古い文法に存在していた問題を修正しています。

VS Code for the Web

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

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

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

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

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

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

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

数か月前、VS Code for the 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拡張機能の推奨

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

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

リモート開発

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

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

新しい拡張機能の機能とバグ修正については、リモート開発リリースノートをご覧ください。

GitHub Pull Requests and Issues

GitHub Pull Requests and Issues拡張機能の作業が継続されています。この拡張機能を使用すると、プルリクエストとIssueの作業、作成、管理を行うことができます。その他のハイライトについては、拡張機能のchangelog for the 0.54.0リリースをご覧ください。

プレビュー機能

TypeScript 4.9

このアップデートには、近日公開予定のTypeScript 4.9リリースのサポートが含まれています。TypeScriptチームが現在取り組んでいる内容の詳細については、TypeScript 4.9イテレーション計画をご覧ください。エディターツールのハイライトをいくつか紹介します。

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

設定プロファイル

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

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

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

Sync Activity (Remote) view showing history of Profiles

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

拡張機能の作成

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

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

MarkdownStringおよびWebビューで実行できるコマンドの制限

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

Webビューの場合、WebviewOptions.enableCommandUrisプロパティは、単純なtrue/falseではなく、有効なコマンドのリストにすることができます。

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

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

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

Webビューのロード時間を改善するために、特定のタイプのWebビューのすべてのインスタンスに対して一貫したオリジンを維持しようとするようになりました。これには主に2つの利点があります。

  • Webビューはキャッシュをより有効に活用できます。これは、ローカルリソースのロードが高速になるはずであることを意味します。

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

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

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

    多くの場合、Webビュー状態APIを使用する必要があります。これらのAPIは、上記の両方の問題を処理します。

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

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

Debug Adapter Protocol

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

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

この状況を改善するために、新しいリバースリクエストstartDebuggingをDAPに追加しました。これにより、拡張機能はデバッグアダプター内から (呼び出し元と同じタイプの) 新しいデバッグセッションを作成できます。クライアント機能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タイプの1つをレンダリングするようにフォールバックできます。

この提案のエントリーポイントは、新しい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は、送信されたテレメトリーイベント、適切なテレメトリー設定チェック、および個人情報 (PII) のクリーニングを確認するための共有出力チャネルを提供します。さらに、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>;
    ...
    ...
}

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

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.5msの改善が見られても、平均的なハードウェアでは2ms程度の改善となる可能性があります。

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

VS Codeのレンダラープロセスは、UI、つまりカーソルの点滅、入力、保存などの処理を担っています。レンダラープロセスでパフォーマンスの問題が発生すると、ユーザーに直接影響し、ユーザーエクスペリエンスの低下につながります。レンダラープロセスのパフォーマンス問題を特定しやすくするために、レンダラープロセスを自動的にプロファイルする新しい設定 application.experimental.rendererProfiling が追加されました。この設定は、プロファイリングを有効にする場合は on、無効にする場合は off に設定できます。有効にすると、レンダラープロセスに負荷がかかっている状態が検出された際に、数秒間プロファイリングが実行されます。プロファイル結果は分析、匿名化された後、調査のために送信されます。プロファイリングの実行状況は、ウィンドウログで確認できます。

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

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

今後のリリースでは、VS Codeのセットアップ時に、Open with Code - Insiders コンテキストメニューエントリが、Windows 11 コンテキストメニューにデフォルトで追加されます (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 提案: Extension API を高速化するために ES5 クラス互換性を削除
  • 156104 URLリンククリック時にポートが既に静的にフォワードされている場合は、ポートを自動フォワードしない
  • 158921 設定が別の場所で変更された場合のインジケーターのホバーコンテンツがオーバーフローする

ありがとうございました

最後になりましたが、VS Code に貢献してくださった皆様に、心より感謝申し上げます

Issue tracking

Issue tracking への貢献

vscode への貢献

vscode-pull-request-github への貢献

vscode-dev-chrome-launcher への貢献

  • @mirdaki: 安定版または Insiders 版ビルドを設定するオプションを追加 PR #20
  • @infinitepower18 拡張機能設定に説明を追加し、空白アイコンを修正 PR #18