2022年10月 (バージョン 1.73)
更新 1.73.1: この更新では、以下の問題に対処しています。
ダウンロード: Windows: x64 Arm64 | Mac: ユニバーサル Intel シリコン | Linux: deb rpm tarball Arm snap
Visual Studio Code の2022年10月リリースへようこそ。このバージョンでは、皆様に気に入っていただけるであろう多くの更新が含まれています。主なハイライトをいくつかご紹介します。
- 検索のフォルダーを含める/除外する - ツリービューで検索に含める/除外するフォルダーを素早く設定。
- コマンドセンターモードのショートカット - 最近使用したファイルリストの前に頻繁に使用するモードを表示。
- マージエディターの改善 - 競合を自動マージする結合オプションにアクセス。
- Markdown の自動リンク更新 - ファイルや画像のリンクを名前変更/移動時に更新。
- その他のオーディオキュー - タスク完了または失敗、ターミナルクイックフィックスが利用可能。
- vscode.dev の保護されたブランチワークフロー - 保護されたブランチへのコミット時に新しいブランチを作成。
- 新しい Python 拡張機能 - isort、Pylint、Flake8 用の新しいスタンドアロン拡張機能。
- 開発コンテナテンプレート - 既存のテンプレートに基づいて新しい開発コンテナを作成。
これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com の 更新 にアクセスしてください。
Insiders: 新機能をいち早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。
アクセシビリティ
新しいオーディオキュー
タスクとターミナルをサポートする新しいオーディオキューが追加されました。
- タスク完了 - タスクが完了したことを通知する音 (
audioCues.taskCompleted設定で制御)。 - タスク失敗 - タスクが失敗したときに通知する音 (
audioCues.taskFailed)。 - ターミナルクイックフィックス - 現在の行でクイックフィックスが利用可能な場合 (
audioCues.terminalQuickFix)。
スクリーンリーダーモードでのワードラップ
スクリーンリーダーモードで VS Code を実行すると、スクリーンリーダーの体験が低下するのを防ぐためにワードラップが無効になっていました。これが修正され、editor.wordWrap を介して有効にできるようになりました。
アクセシビリティ設定タグ
アクセシビリティ関連の設定の検出性を向上させるために、accessibility タグが利用できるようになりました。
設定: アクセシビリティ設定を開く コマンドは、@tag:accessibility フィルターを適用した設定エディターを開きます。
Workbench
検索からフォルダーを含める/除外する
検索ビューの結果ツリービューでフォルダーを右クリックすると、コンテキストメニューに2つの新しいオプションが追加されました。
-
検索をフォルダーに限定 を選択すると、選択したフォルダーパスが 含めるファイル テキストボックスに追加されます。このテキストボックスにパスを追加すると、検索結果はリストされたパスまたはパターンに一致するものに限定されます。

テーマ: GitHub Dark Dimmed (プレビューは vscode.dev)
-
検索からフォルダーを除外 を選択すると、選択したフォルダーパスが 除外するファイル テキストボックスに追加されます。ここにパスを追加すると、リストされたパスまたはパターンに一致する検索結果はすべて除外されます。

テーマ: GitHub Dark Dimmed (プレビューは vscode.dev)
コマンドセンターモードのショートカット
コマンドセンターに新しいトップセクションが追加され、ファイルのナビゲート、コマンドの実行などが簡単にできるようになりました。
この短いモードリストにはキーバインディングのヒントも表示されるため、コマンドセンターを経由せずに最も頻繁に使用するモード (たとえば ファイルへ移動) に直接ジャンプできます。
コマンドセンター UI はデフォルトではタイトルバーに表示されませんが、ウィンドウ: コマンドセンター (window.commandCenter) 設定またはタイトルバーを右クリックして コマンドセンター をチェックすることで有効にできます。
設定エディターのワークスペース信頼とポリシーインジケーター
制限モードのワークスペースや組織ポリシーによって管理されているために適用されない設定には、そのステータスを示すインジケーターが表示されるようになりました。ユーザーは制限モードのワークスペースでもワークスペース設定を読み書きできますが (これは settings.json ファイルを使用すれば常に可能でした)、制限されたワークスペースで使用する設定の最終値を計算する際には、ワークスペース設定値は考慮されません。
デフォルトのライトテーマにもいくつかの調整が加えられ、インジケーター領域でのcodiconの描画がより明確になり、フォーカス境界線がよりタイトになりました。

アウトラインのデフォルト折りたたみ状態
新しい設定 outline.collapseItems が追加され、アウトラインビューのアイテムのデフォルトの折りたたみ状態を制御します。デフォルト値は false で、アウトラインアイテムはデフォルトで展開されています。デフォルトでアウトラインアイテムを折りたたむには true に設定します。この設定は言語ごとに設定でき、ノートブックでも機能します。
表示メニューの再編成
VS Code のメニューバーの表示メニューでは、最後のグループがエディターアクションのリストが拡大していました。メニューと機能のバランスをとるため、主に外観に関連する項目を 外観 サブメニューに移動しました。ワードラップ と スティッキースクロール のオプションは、メニューの元の位置 (下部) に残されています。

テーマ: GitHub Light Default (プレビューは vscode.dev)
入力UIの角丸
テキスト入力、テキストエリア、ドロップダウンはすべて、以前のリリースでボタンに適用されたのと同じスタイルに合わせて、角丸で表示されるようになりました。

クイックピックリストスタイルの更新
クイックピック UI で使用されるリストスタイルは、角丸と左右マージンの増加により、軽く刷新されました。
リストビュー用の更新された codicons
フラットリストビューとツリーリストビューは、リストタイプを表すためにより読みやすいcodiconsを使用するようになりました。
セカンダリサイドバーのフォアグラウンドカラー
セカンダリサイドバーは一般的にプライマリサイドバーのテーマ設定を模倣しますが、すべてのテーマキーが適切に拾われていませんでした。セカンダリサイドバーは "sideBar.foreground" テーマキーを適切に使用するようになりました。
以下は、エクスプローラーを伴う右側のプライマリサイドバーと、アウトラインビューを伴う左側のセカンダリサイドバーの両方が、同じピンクのフォアグラウンドカラーを使用している例です。

テーマ: GitHub Light Default (プレビューは vscode.dev)
「フォールディング範囲が多すぎます」通知の廃止
パフォーマンス上の理由から、エディターに表示されるフォールディング範囲の数は5000に制限されています。この制限は editor.foldingMaximumRegions 設定で構成できます。制限を超えると、以前は VS Code が通知を表示していましたが、現在はステータスバーの言語ステータスホバーでその情報が表示されます。

デフォルトの折りたたみプロバイダー
通常、言語に対して複数の折りたたみプロバイダーがアクティブな場合、VS Core は結果をマージしようとします。範囲が競合する場合は、一部の範囲は破棄されます。さらに、すべての折りたたみプロバイダーを他のプロバイダーと組み合わせることはできません。
新しい editor.defaultFoldingProvider 設定を使用すると、使用する折りたたみプロバイダーを選択できます。プロバイダーの名前は、それを提供する拡張機能の拡張機能 ID ({publisher}.{extension}) です。
以下の例では、(仮の) 拡張機能 aeschli.better-folding の折りたたみプロバイダーを JavaScript のデフォルトとして設定しています。
"[javascript]": {
"editor.defaultFoldingRangeProvider": "aeschli.better-folding"
}
出力チャンネルごとのログレベル設定
開発者: ログレベルを設定... コマンドを使用して、ログ出力チャンネルごとにログレベルを設定できるようになりました。これは、特定のログ出力チャンネルからのみより多くのログを表示したい場合に便利です。このコマンドは、まず出力チャンネルのリストを表示し、1つを選択すると、ログレベルを設定するように促されます。

コマンドラインから拡張機能ごとにログレベルを設定することもできます。これは、特定の拡張機能からより多くのログを表示したい場合に便利です。たとえば、以下のスクリプトを使用すると、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回インポートされています。

文字レベルでの競合なしで競合を解決できる場合、結合を承認 オプションが表示され、自動的に競合を解決するために使用できます。
以下のビデオでは、両方のシンボルが同じインポートステートメントにインポートされています。

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

差分アルゴリズムの改善
マージエディターのデフォルトの差分アルゴリズムが変更されました。新しい差分アルゴリズムはマージシナリオに最適化されています。一般的なケースでは、ハンクの数が最小限に抑えられ、挿入位置が最適化されます。新しいアルゴリズムが問題を引き起こす場合は、設定 "mergeEditor.diffAlgorithm": "smart" を使用して以前のアルゴリズムに戻すことができます (デフォルトは現在 experimental です)。
以下のスクリーンショットは、挿入の改善を示しています。両方の差分は正しいですが、新しい動作は挿入されたテキストをより明確に強調表示していることに注意してください。
以前の動作

新しい動作

新しい差分アルゴリズムは現在、マージエディターでデフォルトで有効になっています。通常の差分エディターでも新しい差分アルゴリズムを使用したい場合は、"diffEditor.diffAlgorithm": "experimental" を設定できます。
競合をナビゲートする
競合カウンターをクリックして、次の未処理の競合にジャンプできるようになりました。

言語
Markdown のファイル名変更/移動時の自動リンク更新
ファイルの移動や名前変更時に、Markdown 内のリンクや画像を誤って壊してしまうことにうんざりしていませんか?新しい markdown.updateLinksOnFileMove.enabled 設定を試してみてください!
この新しい設定を有効にすると、VS Code エクスプローラーでファイルが移動または名前変更されたときに、VS Code は Markdown 内のリンクと画像を自動的に更新します。

markdown.updateLinksOnFileMove.include を使用して、影響を受けるファイルの種類を制御できます。デフォルトでは、すべての Markdown ファイルと一般的な画像ファイル形式で有効になっています。
Markdown リンク挿入コマンド
新しい Markdown: ワークスペース内のファイルへのリンクを挿入 および Markdown: ワークスペースから画像を挿入 コマンドを使用すると、ファイルピッカーを使用して Markdown にリンクや画像を素早く挿入できます。
これらのコマンドは、Markdown ファイルにリンクや画像を追加するための1つのオプションにすぎないことを忘れないでください。Markdown パス補完を使用したり、VS Code のエクスプローラーからファイルをドラッグアンドドロップしてリンクや画像を挿入することもできます。
Markdown の未使用および重複するリンク定義の診断
組み込みの Markdown 検証機能が、未使用または重複するリンク定義を警告できるようになりました。この機能は markdown.validate.enabled で有効にできます。

これらのエラーをより細かく制御したい場合は、これらの markdown.validate 設定を使用して、これらのエラーを無効にする (ignore) か、重大度を変更する (warning、error) ことができます。
markdown.validate.duplicateLinkDefinitions.enabledmarkdown.validate.unusedLinkDefinitions.enabled
重複または未使用のリンク定義を削除するクイックフィックスもあります。
Markdown リンク出現箇所の強調表示
Markdown のリンク出現箇所の強調表示は、カーソル下のリンクが現在のドキュメントのどこで使われているかをすべて表示します。

ドキュメントの最初のリンクにカーソルを合わせると、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 機能を引き続き使用している場合、これらの新しい拡張機能をインストールするように促す通知が表示されます。

リモート開発
リモート開発拡張機能を使用すると、コンテナー、リモートマシン、または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 イテレーションプランをご覧ください。エディターツールリングの主なハイライトは次のとおりです。
- 未使用のインポートを削除せずにソートする新しい インポートのソート コマンド。
- return 文で 定義へ移動 を実行すると、関数宣言にジャンプするようになりました。
- パフォーマンスが向上するはずの 新しいデフォルトのファイルウォッチャーに切り替えます。
TypeScript 4.9 ナイトリービルドの使用を開始するには、TypeScript Nightly 拡張機能をインストールしてください。
設定プロファイル
この数か月間、コミュニティからの最も人気のある要望の1つであるVS Codeでの設定プロファイルのサポートに取り組んできました。この機能は、workbench.experimental.settingsProfiles.enabled設定を介してプレビューで利用できます。ぜひ試して、vscodeリポジトリに問題を作成するか、issue #116740にコメントしてフィードバックをお寄せください。
同期されたプロファイルデータの表示
同期アクティビティ (リモート) ビューで、各プロファイルで同期されるデータを確認できるようになりました。これは、各プロファイルでどのようなデータが同期されるかを理解するのに役立ちます。

注: この機能は現在、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 のすべてのインスタンスで共有されます。
現在、通常のWebviewとWebviewビューの両方が、一貫したオリジンを維持しようとしています。次のイテレーションでは、カスタムエディターとノートブック 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 を試す手順は次のとおりです。
- 試したい提案を見つけて、その名前を
package.json#enabledApiProposalsに追加します。 - 最新のvscode-dtsを使用して、
vscode-dts devを実行してください。これにより、対応するd.tsファイルがワークスペースにダウンロードされます。 - これで提案に対してプログラミングできます。
提案された 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() } の形式をとります。mime は text/html や image/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 に限定し、確信を得る予定です。

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

注目すべき修正点
- 151019 デバッグホバーがホバー時に非表示になる
- 153852 提案: 拡張機能 API を高速化するために ES5 クラスの互換性を削除
- 156104 URL リンククリック時にポートがすでに静的に転送されている場合、ポートを自動転送しない
- 158921 他で変更された設定のインジケーターホバーコンテンツがオーバーフローする
ありがとうございます
最後に、VS Codeの貢献者の皆様に心からの感謝を申し上げます。
問題追跡
問題追跡への貢献者
- John Murray (@gjsjohnmurray)
- Simon Chan (@yume-chan)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
- RedCMD (@RedCMD)
vscodeへの貢献者
- @andrewbranch (Andrew Branch): [typescript-language-features]
removeUnusedImportsコマンドを追加 PR #161654 - @babakks (Babak K. Shandiz): 🐛 CWD ピッカーを表示するための await のない呼び出しを修正 PR #163220
- @Balastrong (Leonardo Montini): 空のファイルに貼り付けたときにインデントを自動検出 PR #156282
- @Brikaa (Omar Brikaa): 水平スクロール用のキーボードショートカットを追加 PR #162992
- @CyrilOtheninGirard (Cyril OG): Bash シェル統合 -- PROMPT_COMMAND が配列の場合、終了コードが復元されない PR #158091
- @daiyam (Baptiste Augrain): feat: 使用する折りたたみプロバイダーを選択 PR #157434
- @dsanders11 (David Sanders)
- 存在しない
runTestsAPI への参照を修正 PR #162543 - 一致しないフラグメントが #top の場合、webview を上部にスクロール PR #164070
- 存在しない
- @dtivel (Damon Tivel): 拡張機能署名検証サービスを追加 PR #162285
- @gjsjohnmurray (John Murray)
outline.collapseItemsを追加し、アウトラインが予期せず折りたたまれる問題を修正 (#_53262) PR #158650- プロパティ記述の正しい設定を参照 (#_162663) PR #162665
- @hughlilly (Hugh Lilly):
src/vs/workbench/contrib/terminal/common/terminalConfiguration.tsの記述におけるカンマの誤りを修正 PR #164401 - @jacekkopecky (Jacek Kopecký)
- 保存を要求する前に未保存のエディターをチェック PR #159318
- カーソル位置のずれを修正 PR #159325
- @jakebailey (Jake Bailey)
- typescript protocol.d.ts に依存しない PR #163365
- typescript/lib/protocol への忘れられた参照を削除 PR #163585
- 'undefined' が tsserver.web.js に入らないようにする PR #164064
- @jannisspeer: Snakefile を Python として分類しないように変更 PR #162749
- @jeanp413 (Jean Pierre)
- ターミナルエディターをデタッチしても vscode.window.onDidCloseTerminal イベントが発生しない問題を修正 PR #154546
- simple browser webview が復元時に再利用されない問題を修正 PR #163389
- OSX の特権ポートの無効化を修正 PR #163890
- ツリーアイテムのラベルに改行があるとラベルが読みにくくなる問題を修正 PR #163995
- 拡張機能の無効化ボタンの右側にボーダーラディウスがない問題を修正 PR #164109
- @joshaber (Josh Abernathy): プレビュー有効コンテキストを追加、パート2 PR #163682
- @jsjoeio (Joe Previte): fix: process.execArgv を保持 PR #161853
- @laurentlb (Laurent Le Brun): 「機能貢献」の列名を更新 PR #162844
- @marrej (Marcus Revaj): # applyEdit() に正しい応答を提供 PR #162430
- @mrienstra (Michael Rienstra): yarn バージョンの強制 PR #162610
- @mustard-mh (Huiwen): #161565 を修正 PR #161567
- @nikita-r (Nikita R.): "_WordPart_" ファミリーのコマンドがケバブケースを尊重するように変更 ( #158667 を解決) PR #158672
- @pingren (Ping): macOS で monaco エディターのユーザー選択を有効にする PR #156755
- @qingpeng9802 (Qingpeng Li):
es5ClassCompatパフォーマンス問題を解決 PR #155390 - @r3m0t (Tomer Chachamu)
- 拡張機能開発者が QuickPick/InputBox で valueSelection を設定できるようにする PR #157022
- 拡張機能によってテスト項目が更新されたときにテストツリーをフィルタリング PR #162169
- @sean-mcmanus (Sean McManus): language-configuration.json を更新 PR #163182
- @stephen-ullom (Stephen Ullom): コマンドセンターのトラフィックライト位置を修正 PR #164246
- @StephenChips (Dongcai Huang): FreePortOutputRegex を修正 PR #162323
- @unm4ever (BK0717): __vsc_prior_prompt2 を追加 PR #156140
- @w1redch4d (Swapnadeep Som): 埋め込みコード内の HTML スタイルコメントに関する問題を修正 PR #160981
- @yamachig (yamachi): 開いている文字で自動囲み閉じが行われる問題を修正 PR #147187
- @yiliang114 (易良): fix: #164414 をクローズし、透過伝送 folder-uri を修正 PR #164415
vscode-pull-request-githubへの貢献者
- @hoontae24: feat: github enterprise のコピーヘッドリンクにアップストリームのオリジンを追加 PR #4028
- @Thomas1664: チェックセクションの UI 修正 PR #4059
- @yin1999 (A1lo): fix: ssh プロトコルアップストリームに ssh url を使用 PR #3853
vscode-dev-chrome-launcher への貢献
- @mirdaki: stable または insiders ビルドを設定するオプションを追加 PR #20
- @infinitepower18 説明を追加し、拡張機能設定の空白アイコンを修正 PR #18