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月リリースへようこそ。今回のバージョンでは、多くのアップデートがあり、きっと気に入っていただけると思います。主なハイライトは以下のとおりです。
- 検索に含める/除外するフォルダー - ツリービューで含める/除外するフォルダーをすばやく設定します。
- コマンドセンターモードのショートカット - 最近使ったファイルリストの前に、よく使うモードを表示します。
- マージエディターの改善 - コンフリクトを自動マージする組み合わせオプションにアクセスします。
- Markdownの自動リンク更新 - ファイルと画像リンクは、名前変更/移動時に更新されます。
- オーディオキューの追加 - タスク完了または失敗、ターミナルクイックフィックスが利用可能。
- vscode.dev での保護されたブランチのワークフロー - 保護されたブランチにコミットするときに新しいブランチを作成します。
- 新しいPython拡張機能 - isort、Pylint、Flake8用の新しいスタンドアロン拡張機能。
- Dev Containerテンプレート - 既存のテンプレートに基づいて新しいDev Containerを作成します。
これらのリリースノートをオンラインで読みたい場合は、Updates(code.visualstudio.com)をご覧ください。
Insiders: 最新機能をいち早く試したいですか?Insidersビルドをダウンロードして、最新アップデートをいち早くお試しください。
アクセシビリティ
新しいオーディオキュー
タスクとターミナルを支援する新しいオーディオキューが追加されました。
- タスク完了 - タスクが完了したことを知らせる音 (
audioCues.taskCompleted
設定で制御)。 - タスク失敗 - タスクが失敗したときに鳴る音 (
audioCues.taskFailed
)。 - ターミナルクイックフィックス - 現在の行でクイックフィックスが利用可能な場合 (
audioCues.terminalQuickFix
)。
スクリーンリーダーモードでのワードラップ
スクリーンリーダーのエクスペリエンスが低下するのを防ぐため、スクリーンリーダーモードでVS Codeを実行している場合、ワードラップは無効になっていました。これは修正され、editor.wordWrap
で有効にできるようになりました。
アクセシビリティ設定タグ
アクセシビリティ関連の設定を見つけやすくするために、accessibility
タグが利用できるようになりました。
設定: アクセシビリティ設定を開くコマンドは、@tag:accessibility
フィルターを設定エディターで開きます。
ワークベンチ
検索に含める/除外するフォルダー
検索ビューの結果のツリービューでフォルダーを右クリックすると、コンテキストメニューに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で使用されるリストスタイルが、角を丸くし、左右のマージンを大きくして、わずかにリフレッシュされました。
リストビューのcodiconを更新
フラットリストとツリーリストビューは、リストタイプを表すためにより判読しやすいcodiconを使用するようになりました。
セカンダリサイドバーの前景色
セカンダリサイドバーは、一般的にプライマリサイドバーのテーマを模倣していますが、すべてのテーマキーが適切に取得されているわけではありませんでした。セカンダリサイドバーは、"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)) を使用して独自のキーボードショートカットを追加できます。
マージエディター
このマイルストーンでは、マージエディターの改良を続け、このアップデートにはいくつかのバグ修正といくつかの新機能が含まれています。
両方のサイドを受け入れるとコンフリクトが追加される
今回のリリースでは、受信側を受け入れると現在の状態を受け入れるの両方を常に選択できます。両方のオプションを選択すると、マージエディターは対応する変更行を追加します。
下の短いビデオでは、両方の行が受け入れられるため、RelativePattern
が2回インポートされます。
文字レベルでコンフリクトなしでコンフリクトを解決できる場合、組み合わせを受け入れるオプションが表示され、コンフリクトを自動的に解決するために使用できます。
下のビデオでは、両方のシンボルが同じインポートステートメントにインポートされます。
ベースに対する差分装飾
ベースビューが開くと、現在フォーカスされているサイドとベースの間に差分が表示されます。この差分ビューは、受信側と現在の状態の変更をよりよく理解するために使用できます。
差分アルゴリズムの改善
マージエディターのデフォルトの差分アルゴリズムが変更されました。新しい差分アルゴリズムは、マージシナリオ向けに最適化されています。一般的なケースでは、ハンクの数が最小限に抑えられ、挿入位置が最適化されます。新しいアルゴリズムで問題が発生する場合は、"mergeEditor.diffAlgorithm": "smart"
設定を使用して、以前のアルゴリズムに戻すことができます (デフォルトは現在experimental
)。
次のスクリーンショットは、挿入の改善を示しています。両方の差分は正しいですが、新しい動作は挿入されたテキストをより明確に強調表示していることに注意してください。
以前の動作
新しい動作
新しい差分アルゴリズムは、現在マージエディターでのみデフォルトで有効になっています。通常の差分エディターでも新しい差分アルゴリズムを使用する場合は、"diffEditor.diffAlgorithm": "experimental"
を設定できます。
コンフリクト間をナビゲート
コンフリクトカウンターをクリックして、次の未処理のコンフリクトにジャンプできるようになりました。
言語
ファイルの名前変更/移動時のMarkdownの自動リンク更新
ファイルの名前変更や移動時に、Markdownのリンクや画像を誤って壊してしまうことにうんざりしていませんか?新しいmarkdown.updateLinksOnFileMove.enabled
設定をお試しください!
この新しい設定を有効にすると、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.enabled
markdown.validate.unusedLinkDefinitions.enabled
重複または未使用のリンク定義を削除するためのクイックフィックスもあります。
Markdownのリンク出現箇所の強調表示
Markdownのリンク出現箇所の強調表示は、カーソル下のリンクが現在のドキュメントで使用されているすべての場所を示します。
ドキュメントの最初のリンクにカーソルを合わせると、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機能をまだ使用している場合、これらの新しい拡張機能をインストールするように促す通知が表示されます。
リモート開発
リモート開発拡張機能を使用すると、コンテナー、リモートマシン、または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イテレーション計画をご覧ください。エディターツールのハイライトをいくつか紹介します。
- 未使用のものを削除せずにインポートをソートする新しいインポートのソートコマンド。
- returnステートメントで定義へ移動を実行すると、関数宣言にジャンプするようになりました。
- パフォーマンスが向上するはずの新しいデフォルトのファイルウォッチャーに切り替えました。
TypeScript 4.9 nightlyビルドの使用を開始するには、TypeScript Nightly拡張機能をインストールしてください。
設定プロファイル
過去数か月間、コミュニティから最も要望の多かった機能の1つである、VS Codeでの設定プロファイルのサポートに取り組んできました。この機能は、workbench.experimental.settingsProfiles.enabled
設定を介してプレビューで利用できます。ぜひお試しいただき、vscodeリポジトリでissueを作成するか、issue #116740にコメントしてフィードバックをお寄せください。
同期されたプロファイルデータの表示
同期アクティビティ (リモート) ビューで、各プロファイルに対して同期されたデータを確認できるようになりました。これは、各プロファイルに対してどのようなデータが同期されているかを理解するのに役立ちます。
注: この機能は現在、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を試す手順は次のとおりです。
- 試したい提案を見つけて、その名前を
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タイプの1つをレンダリングするようにフォールバックできます。
この提案のエントリーポイントは、新しい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
は、送信されたテレメトリーイベント、適切なテレメトリー設定チェック、および個人情報 (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 版ユーザーに限定して、機能の安定性を確認する予定です。
Open with Code Insiders アクションは、Windows ファイルエクスプローラーのフォルダーとファイルのコンテキストメニューで利用可能になります。
注目すべき修正
- 151019 デバッグホバーがホバー時に非表示になる
- 153852 提案: Extension API を高速化するために ES5 クラス互換性を削除
- 156104 URLリンククリック時にポートが既に静的にフォワードされている場合は、ポートを自動フォワードしない
- 158921 設定が別の場所で変更された場合のインジケーターのホバーコンテンツがオーバーフローする
ありがとうございました
最後になりましたが、VS Code に貢献してくださった皆様に、心より感謝申し上げます。
Issue tracking
Issue tracking への貢献
- 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 ピッカーを表示する際の非同期処理の修正 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)
- 存在しない
runTests
API への参照を修正 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
- シンプルなブラウザ 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*" コマンド群がケバブケースを尊重するように修正 (resolves #158667) PR #158672
- @pingren (Ping): macOS で monaco editor の user-select を有効化 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): コマンドセンターの信号機 (traffic lights) の位置を修正 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 をクローズ,透過的な転送フォルダー URI を修正 PR #164415
vscode-pull-request-github
への貢献
- @hoontae24: feat: github enterprise のコピーヘッドリンクに upstream の origin を追加 PR #4028
- @Thomas1664: チェックセクションの UI を修正 PR #4059
- @yin1999 (A1lo): fix: ssh プロトコル upstream に ssh url を使用するように修正 PR #3853
vscode-dev-chrome-launcher
への貢献
- @mirdaki: 安定版または Insiders 版ビルドを設定するオプションを追加 PR #20
- @infinitepower18 拡張機能設定に説明を追加し、空白アイコンを修正 PR #18