2021年4月 (バージョン 1.56)

Update 1.56.1: このアップデートでは、以下のセキュリティissue (問題)に対応しています。

Update 1.56.2: このアップデートでは、以下のissue (問題)に対応しています。

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


Visual Studio Code 2021年4月リリースへようこそ。VS Codeチームは今月、いくつかの長期的なアップデートに取り組んできました。今後の情報については、プレビュー機能セクションをご覧ください。このリリースに含まれるハイライトをいくつかご紹介します。

これらのリリースノートをオンラインで読むには、Updatescode.visualstudio.com)にアクセスしてください。

ライブ配信に参加しませんか?5月11日(火)午前8時(太平洋時間)、VS Codeチームのライブストリームで、このリリースの新機能のデモをご覧いただき、ライブで質問をしてください(ロンドン時間午後4時)。

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

ワークベンチ

アクションホバーのフィードバックの改善

ワークベンチ全体のアクションに対するマウスホバーフィードバックを変更し、クリック可能なアクションに関するUXを改善しました。

Actions hover feedback is improved with a background color.

無題のエディターのヒント

多くの新規ユーザーが、VS Codeの言語サポートを最大限に活用するためには言語を設定する必要があることに気づいていないことに気づきました。この問題を解決するために、ユーザーが正しい言語モードを設定するのに役立つように、無題のエディターにヒントを導入しました。無題のヒントは、上級ユーザーには役に立たない可能性があるため、入力を開始するとすぐに消えるか、非表示にするを選択して、今後ヒントが表示されないようにすることができます。

Untitled editor shows an untitled hint

デフォルトのカスタムエディターとノートブックの解決

リソースのデフォルトエディターであるべきだと主張するエディターが2つある場合(たとえば、画像ビューアーと画像エディター)、競合を解決するためのプロンプトが表示されます。

以下の短いビデオでは、ユーザーがPNGファイルを開き、それが2つのエディターに関連付けられています。通知により、ユーザーはLuna Paint Image Editorを使い続けるか、新しいデフォルトを構成できます。ユーザーは新しいデフォルトを構成し、バイナリHex Editorを使い始めます。

A image editor is opened and the user is prompted with a notification to configure their default editor or keep the current one

更新されたカスタムダイアログ

"window.dialogStyle": "custom"を使用して有効にできるカスタムダイアログスタイルを更新しました。VS Codeは背景を暗くして、ダイアログに焦点が当たりやすくし、アクションが複数ある場合は、セカンダリボタンのスタイルを使用するようになりました。

An example of a custom dialog with a dimmed background and secondary buttons

製品アイコンテーマ: Fluent Icons

次のカラートークンを使用して、セカンダリボタンのスタイルをテーマできます。

  • button.secondaryBackground
  • button.secondaryForeground
  • button.secondaryHoverBackground

自動更新は有効な拡張機能のみ

現在有効になっている拡張機能のみを自動更新するようにVS Codeを設定できるようになりました。

Auto update only enabled extensions

テーマ: GitHub Light Theme

ターミナル

プロファイルの改善

前回のイテレーションでは、ターミナルプロファイルを導入しました。ターミナルは、terminal.integrated.defaultProfile.<platform>設定でデフォルトプロファイルを設定することをサポートするようになりました。

環境とアイコンのサポートもプロファイルシステムに追加されました。

"terminal.integrated.profiles.windows": {
  "PowerShell": {
    "source": "PowerShell",
    "overrideName": true,
    "icon": "terminal-powershell",
    "env": {
      "TEST_VAR": "value"
    }
  }
},
"terminal.integrated.defaultProfile.windows": "PowerShell",

今後は、これらの設定がデフォルトのターミナル構成を切り替えるための推奨される方法となり、terminal.integrated.shellおよびterminal.integrated.shellArgs設定は非推奨となりました。

新しいターミナルピッカー

プロファイルと設定ショートカットは、ドロップダウンから新しい+ボタンのドロップダウンに移動しました。

When selected, the dropdown button displays a menu

これにより、デフォルト以外のプロファイルに基づいて新しい分割ターミナルを作成することもサポートされます。

新しいキーバインド

ターミナルには、今回のリリースでいくつかの新しいデフォルトキーバインドがあります。

  • 前のターミナルに移動 - Ctrl+PageUp (macOS Cmd+Shift+])
  • 次のターミナルに移動 - Ctrl+PageDown (macOS Cmd+shift+[)
  • ターミナルタブビューにフォーカス - Ctrl+Shift+\ (macOS Cmd+Shift+\) - ターミナルタブのプレビュー

いつものように、これらのデフォルトキーバインドは削除したり、キーバインドシステムを介してカスタムキーバインドを追加したりできます。

Linux 選択ペーストコマンド

新しいコマンドworkbench.action.terminal.pasteSelectionは、Linuxで選択クリップボードからターミナルに貼り付けるために利用できます。

ターミナルワークスペースシェルのアクセス許可が変更されました

プロファイルに関連する今後の変更をサポートするために、.vscode/settings.jsonにターミナル設定が存在する場合に表示されるプロンプトは削除され、ワークスペース設定の使用をオプトインする設定が優先されました。これは信頼できないワークスペースでは危険な可能性があることに注意してください。

"terminal.integrated.allowWorkspaceConfiguration": true

ワークスペースの信頼がデフォルトで有効になっている場合、これを削除してそのシステムを使用します。

タスク

Tasks 0.1.0 の削除とアップグレード

Tasks 2.0.0 は3年以上利用可能で正常に動作しており、tasks 0.1.0 はその間ずっと非推奨となっていました。Node.jsフリーレンダラーの目標に照らして、tasks 0.1.0 はNode.jsフリーの世界に持ち込まれるのではなく、削除されました。0.1.0タスクを含むフォルダーを開くと、自動的にバージョン2.0.0にアップグレードされます。

Tasks upgrade notification

ターミナルタブに「タスク」プレフィックスなし

新しいターミナルタブ機能を使用する場合、「タスク」プレフィックスはターミナル名に追加されなくなります。代わりに、タスクは利用可能なスペースを有効活用するために「ツール」アイコンで示されます。

Tasks as terminal tabs

eslint-stylish とのマッチングの改善

$eslint-stylish 問題マッチャーは、複数行の問題をより正確にマッチングします。

デバッグ

ブレークポイントビューの改善

データブレークポイントのアクセスタイプが表示される

データブレークポイントの場合、VS Codeはブレークポイントビューの名前の横にアクセスタイプ(「読み取り」、「書き込み」、または「アクセス」)を表示するようになりました。

The Breakpoints view shows the access types "Read", "Write" and "Access" being rendered next to the breakpoint name

例外ブレークポイントのステータス/エラーレポートの改善

例外ブレークポイントの場合、VS Codeはブレークポイントビューに個々の検証ステータスと詳細な理由を表示するようになりました。例外ブレークポイントを検証できない場合(たとえば、条件に構文エラーが含まれている場合)、グレー表示になり、ホバーすると対応するエラーメッセージが表示されます。

The Breakpoints view shows disabled exception breakpoints that on hover show the error message

その他のUI改善

停止および接続解除コマンドの代替動作

デバッグセッションは通常、デバッグ: 停止およびデバッグ: 接続解除コマンドを使用して停止されます。デバッグセッションのタイプがlaunchの場合、停止コマンドはセッションを停止するだけでなく、デバッギーも終了します。attachタイプのデバッグセッションの場合、接続解除コマンドがあり、デバッグを停止し、デバッギーの実行を再開します。

今回のリリースでは、デバッグツールバーからコマンドをトリガーする際にAlt修飾キーを押すことで、この動作を反転させることができるようになりました。動作を変更すると、launchタイプのデバッグセッションでデバッギーを実行したままにしたり、attachタイプのデバッグセッションでデバッギーを終了したりすることができます。デフォルトのコマンドでAltキーを使用する以外に、デバッグ: 停止デバッグ: 接続解除の両方のコマンドに、launchattachの両方のデバッグセッションのコマンドパレットからアクセスすることもできます。

代替動作は、この機能をオプトインしたデバッグ拡張機能でのみ利用できます。

不足しているデバッグ拡張機能のインストールフローの改善

ユーザーがデバッグを開始したいが、デバッグサポートを提供する必要な言語拡張機能(PythonやJavaなど)をインストールしていない場合のフローを改善しました。このような場合、VS Codeは適切な拡張機能をインストールするようにユーザーにプロンプトを表示するようになりました。

VS Code prompts to install the Python extension if it is missing

コールスタック列の停止インジケーター

VS Codeは、デバッギーが行で停止するたびに、コールスタック列インジケーターをレンダリングするようになりました。これは、プログラムが現在行のどこで停止しているかを特定するのに役立つはずです。

An code execution is stopped and a column indicator is rendered in the middle of a line

一部の言語でデフォルトでインライン値

VS CodeのデバッガーUIは、ソースコードをステップ実行するときにエディターにインラインで変数値を表示するインライン値をサポートしています。この機能はVS Codeコアの一般的な実装に基づいており、すべての言語に完全に適合するとは限らず、基になるソース言語を理解していないため、誤った値を表示することもあります。これらの理由から、この機能はデフォルトでは有効になっていませんでした。

新しいデバッガー拡張機能APIにより、言語拡張機能が正しいインライン値サポートを提供できるようになり、改善されたインライン値機能がデフォルトで有効になりました。

この機能を有効にするには、debug.inlineValues設定に新しい(デフォルト)値autoが追加されました。autoに設定すると、インライン値は「改善されたインライン値」サポートがある言語に対して自動的に有効になります。

Debugger for Java拡張機能は、APIを採用した最初のデバッガー拡張機能の1つです。下のスクリーンショットでは、Java変数の正確な値が使用箇所のすぐ横に表示されています。

Java extension displaying inline values in the editor while debugging

Inline Values support for PowerShell拡張機能を使用すると、PowerShellスクリプトをデバッグしながらインライン値を取得できます。

ブレーク時にデバッグビューを表示

debug.openDebug設定のデフォルト値がopenOnDebugBreakになったため、ブレークポイントにヒットするたびに、VS Codeはデバッグビューを開きます。デバッグビューは、最初のセッション開始時にも表示されます。

JavaScript デバッグ

いつものように、変更の完全なリストはvscode-js-debug changelogにあります。

ブレークポイント診断ツールの発見可能性の向上

ヒューリスティックに基づいて、ブレークポイントがバインドされにくい問題をユーザーが抱えている可能性があることを検出した場合、VS Codeはブレークポイント診断ツールを開くことを提案する通知を表示します。

Notification that reads "It looks like you might be having trouble with breakpoints, would you like to open our diagnostic tool?"

このプロンプトは、その有効性と積極性を実験しているため、最初はユーザーの一部にのみ表示されます。

プライベートクラスフィールドのサポート

プライベートクラスフィールドがデバッガーで表示および検査できるようになりました。

ノートブック

行番号の切り替え

現在のセッションでセルツールバーからセル行番号を一時的に切り替えたり、notebook.lineNumbers設定を使用してすべてのノートブックの行番号の表示/非表示を変更したりできるようになりました。

Toggle line number of a cell

ファイルタイプごとのセルツールバーの位置

セルツールバーの位置は、notebook.cellToolbarLocation設定を介してファイルタイプごとにカスタマイズできるようになりました。たとえば、GitHub Issueノートブックの場合はセルツールバーを右側に配置し、Jupyterノートブックの場合は左側に配置できます。

Markdownセルでの数式サポート

ノートブックMarkdownセル内で数式を使用できるようになりました。

Math being rendered in a Jupyter notebook

VS Codeは、数式をレンダリングするためにKaTeXを使用します。Markdownセルに数式を埋め込む方法は2つあります。

  • 単一のドル記号を使用する: $...$。これにより、インライン数式が作成されます。
  • 二重ドル記号を使用する: $$...$$。これにより、中央揃えのブロック数式が作成されます。

実験的なノートブックマークアップレンダラーAPIを使用して数式サポートを実装しました。このAPIの最終的な目標は、拡張機能がノートブックでのMarkdownのレンダリングを拡張できるようにすることです。

言語

Markdownプレビュータイポグラファーサポート

新しいmarkdown.preview.typographer設定を使用すると、組み込みのMarkdownプレビューで、スマートクォートと単純なタイポグラフィの置換を有効にできます。

下の例では、(c)などのMarkdownテキストが、プレビューで著作権記号©に自動的に置き換えられます。

Smart quotes and text replacement in the Markdown preview

markdown.preview.typographer設定はデフォルトで無効になっています。

シェルスクリプトとして認識されるファイルが増えました

.xsessionおよび.xprofileファイル名拡張子を持つファイルは、自動的にシェルスクリプトとして認識されます。

プレビュー機能

ターミナルタブ

ターミナルのタブはプレビュー機能として利用可能であり、次の設定で有効にできます。

"terminal.integrated.tabs.enabled": true

The tabs view is a split pane to the right of two split terminals. It contains icons and labels for each terminal instance.

有効にすると、新しいタブビューは、少なくとも2つのターミナルがある場合にのみデフォルトで表示されます。単一のターミナルの場合、タブは次のようにパネルタイトルに「インライン」表示されます。

Terminal tab inlined into the panel title for a single terminal

各タブは、コンテキストメニューからいくつかの操作をサポートしています。

Right-clicking on a tab displays a menu

分割およびターミナル終了は、ホバーで利用できます。

Hovering the tab item shows inline action icons

新しいタブの動作をエクスプローラーの動作に合わせるように努めてきました。その他の動作をいくつかご紹介します。

  • 空白スペースをダブルクリックすると、新しいターミナルが作成されます。
  • サッシをダブルクリックすると、タブビューの幅が、すべてのタイトルを切り捨てずに表示する「理想的な」サイズと、アイコンのみを表示する狭いビューの間で切り替わります。
  • タブは、terminal.integrated.tabs.location設定を使用して左側に移動できます。
  • その他のさまざまな構成設定は、terminal.integrated.tabsの下で利用できます。

ターミナルステータス

タブとともに、ターミナルのステータスの概念を導入しました。ターミナルには多くのステータスがあり、それぞれがターミナルが一時的に置かれる可能性のある状態を表し、最も重大度の高いステータスがタブの横に表示されます。ステータスアイコンは、タブビューのターミナルタイトルの右側に表示されます。ホバーすると、ステータスの詳細と関連付けられたアクションが表示されます。

On a tab associated with a terminal that requires a relaunch, a yellow triangle with an exclamation mark is to the right of the terminal title

今のところ、これらの状態がサポートされています。

  • 再起動が必要: 拡張機能がターミナルの環境を変更したい場合、警告アイコンステータスが使用されます。
  • 接続解除: ターミナルがプロセスとの接続を失うと、プラグアイコンステータスが使用されます。
  • ベル: terminal.integrated.enableBell設定でベルが有効になっている場合にベルアイコンが表示され、ターミナルベルがトリガーされます。

タスクの実行ステータスがタブをアクティブ化しなくても一目でわかるように、タスクステータスを近日中にサポートする予定です。

ようこそページウォークスルー

ステップの説明とステップのメインコンテンツの両方でMarkdownを許可するように、[はじめに]ページにコンテンツを配置するためのwalkthroughsコントリビューションを拡張しました。[はじめに]ページへの拡張機能のコントリビューションは実験的な機能であり、"workbench.welcomePage.experimental.extensionContributions": true,で有効にできます。

下の短いビデオでは、Luna Paint拡張機能についてユーザーに教えるためのウォークスルーの例を示しています。

Stepping through the Luna Paint extension's walkthrough contribution

アクティビティバーとパネルのカスタムホバーサポート

このマイルストーンでは、アクティビティバーとパネルのカスタムホバーの実験的サポートを追加しました。workbench.experimental.useCustomHover設定を使用してカスタムホバーを有効にできます。

Custom hover in Activity Bar and Panel

テーマ: GitHub Light Theme 製品アイコンテーマ: Fluent Icons

リモートリポジトリ (RemoteHub)

このリリースの一部として、新しい組み込み拡張機能であるRemote Repositories (RemoteHub)のプレビューを開始しました。これにより、リポジトリをローカルにクローンしたり持ったりすることなく、VS Code内から直接GitHubリポジトリを即座にブラウズ、検索、編集、コミットできます。現在、VS CodeのInsidersエディションでのみ利用可能です。

はじめに

開始するには、コマンドパレットからリモートリポジトリを開く...コマンドを実行します。そこから、任意のGitHub URLを貼り付けるか、特定のリポジトリまたはプルリクエストを検索するように選択できます。

Open Remote Repository picker

テーマ: Amethyst Dark Theme

URLを入力するか、リポジトリまたはプルリクエストを選択すると、VS Codeはそのリポジトリの新しいワークスペースを開きます。ステータスバーの左側にあるリモートステータスインジケーターは、接続されているリモートプロバイダー名(リモートリポジトリの場合はGitHubなど)を示します。

Remote Repositories Demo showing various source control operations

テーマ: Amethyst Dark Theme

機能

  • リポジトリをクローンしたり、ローカルにリポジトリを持ったりすることなく、任意のGitHubリポジトリを即座に開きます。
  • 任意のGitHubリポジトリを簡単に編集して貢献できます - 変更をGitHubに直接コミットしたり、プルリクエストを開いたりできます。
  • 別の環境で続行 - 別の環境で続行...コマンド(コマンドパレットまたはリモートインジケータークイックピッカーメニューからアクセス可能)を使用します。
    • リポジトリをローカルにクローンする
    • リポジトリをコンテナにクローンする - Dev Containers拡張機能が必要です
  • ローカルリポジトリでの作業と同様の使い慣れたユーザーインターフェースを提供します(*以下の「制限事項」を参照)。
    • エクスプローラー - ファイルとフォルダーを開く、コピー、移動、名前変更、削除
    • 検索 - 高速な全文検索*
    • ソース管理 - 変更をステージングおよびコミットしたり、他の多くのソース管理アクションを実行したりできます
    • タイムラインビュー - 差分サポート付きのファイル履歴を表示
    • クイックオープン - 開くファイルをすばやく見つける
    • リモートインジケーター - リモートリポジトリが接続されているプロバイダー(例: GitHub)を表示
  • 異なるブランチで同時に作業する - 各リモートブランチは個別のワークツリー(Git用語)として扱われます。つまり、行った変更はそのブランチに分離されます。PRをチェックアウトしたり、新しい作業項目を開始したりするために新しいブランチに切り替えるためだけに、変更を一時退避する必要はありません。前のブランチに戻ると、変更はまだそこにあります。
  • GitHub Pull Requests and Issues拡張機能をインストールし、プルリクエストをすばやく表示、探索、チェックアウトし、issueを表示して作業を開始します。

制限事項

  • 制限された言語インテリジェンス - 多くの言語サーバーは、まだこの仮想化された環境を理解していません。TypeScriptは、リモートリポジトリの単一ファイルインテリジェンスをサポートしています。
  • 制限された拡張機能サポート - 言語サーバーと同様に、多くの拡張機能はリモートリポジトリでは動作しません。拡張機能はオプトアウトでき、仮想ワークスペースではアクティブ化されません。詳細については、以下の拡張機能の作成セクションを参照してください。
  • 検索 - 全文検索には、正確なテキストマッチングのための事前構築されたインデックスが必要です。それ以外の場合は、GitHubのファジーデフォルトブランチのみのネイティブ検索にフォールバックします。
  • ターミナル - サポートされていません。開いているターミナルはすべてローカルファイルシステム上にあります。
  • デバッグ - サポートされていません。
  • タスク - サポートされていません。

ご意見をお聞かせください

Remote Repositories (RemoteHub)をぜひお試しいただき、ご意見やフィードバックをお待ちしております。私たちはこの旅を始めたばかりですので、開発を続けるにつれて、機能セットが拡大し、制限事項が縮小することを期待してください。また、サポートされるプロバイダーのセットも拡大していきます。GitHubは、私たちがサポートしている最初のプロバイダーであり、Azure Reposが間もなく登場します。

TypeScript 4.3

このリリースでは、今後のTypeScript 4.3リリースに対するサポートが引き続き改善されています。TypeScript 4.3の新機能と改善点については、TypeScriptブログをご覧ください。以下は、TypeScript 4.3で有効になるエディターの改善点の一部です。

  • overrideのサポート。overrideキーワードを追加するためのクイックフィックスもあります。
  • インポートステートメントの補完。これは自動インポートのようなものですが、インポートステートメント自体に入力しています。
  • JSDoc @linkタグのサポート。

TypeScript 4.3ナイトリービルドの使用を開始するには、TypeScript Nightly拡張機能をインストールするだけです。フィードバックを共有し、TypeScript 4.3でバグが発生した場合はお知らせください。

ワークスペースの信頼

前回のマイルストーンのリリースノートでは、拡張機能作成者向けのワークスペースの信頼に関する作業を共有しました。拡張機能APIとユーザーエクスペリエンスの両方で、このマイルストーンで大きな進歩を遂げました。そうは言っても、ワークスペースの信頼はこのリリースでは無効のままになりますが、ぜひ試してみてフィードバックを提供してください。

security.workspace.trust.enabled設定で機能を有効にできます。有効にすると、VS Codeでフォルダーを開くときに次のダイアログが表示されます。

Workspace Trust startup dialog

このダイアログは、ユーザーが早期に決定を下し、決定の影響を理解できるようにするために重要です。機能を理解したら、security.workspace.trust.startupPrompt設定を使用して、ダイアログを表示するタイミングをカスタマイズできます。

ワークスペースの信頼の開発をフォローし、issue #106488でフィードバックを提供できます。

拡張機能への貢献

リモート開発

Remote Development extensions(リモート開発拡張機能)の作業が継続されています。これにより、コンテナ、リモートマシン、またはWindows Subsystem for Linux (WSL) をフル機能の開発環境として使用できます。

1.56の機能ハイライトには、以下が含まれます。

  • コンテナボリュームにリポジトリをクローンするときの新しいボリュームビュー。
  • リモートに接続されている場合のローカルターミナルの警告。
  • Dev Containers拡張機能で開始するときにDocker Desktopをインストールするプロンプト。

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

GitHub Pull Requests and Issues

GitHub Pull Requests and Issues拡張機能の作業が継続されています。これにより、プルリクエストとissueの作業、作成、管理を行うことができます。

すべての新機能と更新の詳細については、拡張機能のchangelog for the 0.26.0リリースをご覧ください。

拡張機能の作成

拡張機能が仮想ワークスペースをサポートするかどうかを定義する

新しいRemote Repositories拡張機能を使用すると、GitHubから直接コンテンツを含むフォルダーを開くことができます。これは、仮想ファイルシステムを提供し、その上にワークスペースを開くことによって行われます。他の拡張機能も同様です。ftpサーバー、クラウドストレージ、またはデータベースからコンテンツを提供し、これらをVS Codeのユーザーにファイルとしてシームレスに提供します。

仮想ファイルシステム機能はしばらくの間存在していましたが、すべての拡張機能がワークスペースファイルがディスク上に物理的に存在しない仮想ワークスペースでの実行をサポートできるわけではないことがわかりました。このため、拡張機能が仮想ワークスペースでの実行をサポートするかどうかを通知するためのサポートを追加しました。拡張機能がオプトアウトした場合、仮想ワークスペースに対してVS Codeによってアクティブ化されず、ユーザーはこの拡張機能からのエラーが表示されなくなります。

拡張機能は、以下に示すようにpackage.jsonで仮想ワークスペースのセットアップをオプトアウトします。

{
  "capabilities": {
    "virtualWorkspaces": false
  }
}

目標は、できるだけ多くの拡張機能が仮想ワークスペースでの実行をサポートすることです。ただし、特に拡張機能がファイルが物理的に存在することを前提とするコンポーネントを使用している場合は、常に可能であるとは限りません。Virtual Workspaces guide(仮想ワークスペースガイド)は、拡張機能が仮想ワークスペースをサポートする方法を文書化しています。

行動喚起: 拡張機能が仮想ワークスペースを処理できるかどうかを確認し、package.jsonvirtualWorkspaces機能を適宜設定してください。

拡張機能が新しいvirtualWorkspacesプロパティを採用するまで、移行期間があります。それまでは、virtualWorkspaces機能をfalseに設定する必要があると思われる拡張機能の内部リストを管理します。これは、拡張機能がNode.js fsモジュールを使用しているかどうか、したがってファイルシステムに直接アクセスしているかどうかを分析に基づいて行われました。ただし、拡張機能の作成者は、拡張機能がvirtualWorkspaces機能をサポートしているかどうかを評価するのに最適な立場にあります。採用状況を追跡するために、次の追跡 issue #122836を作成しました。拡張機能がリストにあり、virtualWorkspaces機能を導入している場合は、上記のissueにコメントを追加してください。

リモートインジケーターメニュー

拡張機能は、リモートインジケーターメニューにコントリビュートできるようになりました。

Remote indicator on the left of the Status bar

statusBar/remoteIndicatorメニューコントリビューションポイントは、リモートインジケーターメニューにコマンドを追加します。

"contributes": {
    "menus": {
        "statusBar/remoteIndicator": [
        {
          "command": "remote-wsl.newWindow",
          "when": "!remoteName && isWindows",
          "group": "remote_10_wsl_0_local@1"
        }
    ]},
    "commands": [
      {
        "command": "remote-wsl.newWindow",
        "title": "New WSL Window",
        "category": "Remote-WSL"
      }
    ]
}

メニューがプロバイダーに基づいてエントリをソートできるようにするには、groupが特定の構文に従う必要があります。

リモートからのコマンドの場合: remote_${orderOfGroups}_${remoteName)_${internalGrouping}@${orderInGroup}

仮想ファイルシステムからのコマンドの場合: virtualfs_${orderOfGroups}_${fileScheme)_${internalGrouping}@${orderInGroup}

  • orderOfGroupsは、グループをソートするために使用される2桁の数字です
  • remoteNameは、remoteAuthorityの最初の部分です (wsl, ssh, ...)
  • fileSchemeは、仮想ファイルシステムのURIスキーマです
  • internalGroupingは、各コントリビューションで自由に使用できます
  • orderInGroupは、グループ内のエントリをソートするために使用されます

例: remote_10_wsl_1-open@1

ほとんどのwebviewでiframeが使用されるようになりました

webview APIが最初に導入されて以来、Electronのwebviewタグを使用してwebviewを実装してきました。ただし、Webでは、VS Codeのwebviewは、<webview>が利用できないため、代わりに標準の<iframe>要素を使用して実装されています。

デスクトップ版のVS Codeを<iframe>ベースのwebviewを使用するように移行することをしばらく検討してきました。この変更により、拡張機能はデスクトップとWebの間でより一貫性のあるwebview環境を提供できるようになります。<webview>からの移行は、Electronサンドボックス化の取り組みにも役立ちます。

今回のイテレーションでは、ほとんどのwebviewをiframeを使用するように切り替えました。<webview>タグは、検索ウィジェットを有効にするwebviewにのみ使用されるようになり、もう少しエンジニアリング作業を行った後、iframeを使用するように移行する予定です。

この変更によって問題が発生することはありませんが、<iframe>要素と<webview>要素の動作が異なるコーナーケースがいくつかあります。拡張機能を簡単にテストして、すべてが期待どおりに動作することを確認してください。

webviewの検査が容易になりました

<iframe>ベースのwebviewの明確な利点の1つは、検査がはるかに簡単になったことです。

以前にwebviewを操作したことがある場合は、webviewの内容を検査するために開発者: Webview開発者ツールを開くコマンドを使用する必要があったことを覚えているかもしれません。これにより、webview専用の新しい開発者ツールパネルが開きます。

Inspecting a webview in its own developer tools window

<iframe>ベースのwebviewを使用すると、代わりにVS Codeの標準開発者ツール (開発者: 開発者ツールを切り替える) を使用してwebviewを検査できます。

Inspect a webview in the main developer tools window

これにより、複数のwebviewを簡単に検査できます。また、webviewが消えても、開発者ツールは閉じなくなりました。

さらに、webview内で発生する例外とコンソールメッセージが、トップレベルの開発者ツールコンソールに出力されるようになりました。

Exceptions from a webview printed in the main developer tools

また、開発者ツールを使用して、webviewのコンテキストで式を評価することもできます。開発者: 開発者ツールを切り替えるを使用してVS Code開発者ツールを開いた後、コンソールを開き、コンテキストセレクターからwebviewのactive-frameを選択します。

Selecting the current scope of the debug console

全体として、VS Codeの標準開発者ツールを使用できることで、webviewの開発エクスペリエンスが向上するはずです。

CodeActionTriggerKind

CodeActionContextの新しいtriggerKindプロパティは、CodeActionProviderからコードアクションが要求される理由を追跡します。このプロパティの可能な値は次のとおりです。

  • Invoke - コードアクションは、キーボードショートカットまたはコマンドのいずれかで、明示的に要求されました。
  • Automatic - コードアクションは、明示的なユーザーアクションなしで要求されました。これには、ドキュメントの内容が変更されたときにコードアクションを要求することが含まれます。

プロバイダーは、triggerKindを使用して、コードアクションが要求される方法に応じて、さまざまな結果のセットを返すことができます。たとえば、自動的にトリガーされるリファクタリングコードアクションプロバイダーは、コードアクションライトバルブが表示される頻度を制限するために、現在の選択範囲と完全に一致するリファクタリングのみを返す場合があります。ただし、コードアクションが明示的に要求された場合、同じプロバイダーは、ユーザーが現在の場所に関心を持つ可能性のあるすべてのリファクタリングを表示するために、現在の選択範囲を自動的に展開する場合があります。

更新されたcodicon

次の新しいアイコンをcodiconライブラリに追加しました。

  • arrow-swap
  • copy
  • debug-line-by-line
  • filter-filled
  • person-add
  • terminal-bash
  • terminal-cmd
  • terminal-debian
  • terminal-linux
  • terminal-powershell
  • terminal-tmux
  • terminal-ubuntu
  • wand

List displaying updated codicons with their names

キーバインドラベルの色

コマンドに関連付けられたキーバインドがある場合、キーバインドラベルが表示されます。キーバインドラベルの使用例には、以下が含まれます(ただし、これらに限定されません)。

  • コマンドパレット
  • キーボードショートカットエディター
  • キーボードショートカットレコーダーモーダル
  • 拡張機能のマーケットプレイスページの「機能コントリビューション」セクション

次のカスタマイズが利用可能です。

  • keybindingLabel.background: キーバインドラベルの背景色。キーバインドラベルは、キーボードショートカットを表すために使用されます。
  • keybindingLabel.foreground: キーバインドラベルの前景色。キーバインドラベルは、キーボードショートカットを表すために使用されます。
  • keybindingLabel.border: キーバインドラベルのボーダー色。キーバインドラベルは、キーボードショートカットを表すために使用されます。
  • keybindingLabel.bottomBorder: キーバインドラベルのボトムボーダー色。キーバインドラベルは、キーボードショートカットを表すために使用されます。

ワークスペースの信頼拡張機能API

前回のマイルストーンでは、ワークスペース信頼と呼ばれる機能について取り組んできたことをお伝えしました。拡張機能の作者の皆様には、issue #120251 での更新情報を注視していただくようお願いしており、引き続きお願いしております。以下の情報と更新も、その issue でご確認いただけます。

今回のマイルストーンでは、ワークスペース信頼拡張機能 API を提案から安定版に移行しました。これにより、ワークスペース信頼に拡張機能をオンボーディングするためのガイドの最初の草案をリリースすることができました。API は小さいので、簡単に見ていきましょう。

package.jsonuntrustedWorkspaces 機能を使用して、信頼されていないワークスペースで完全、部分的、または非サポートを提供するために拡張機能を宣言できます。

次の例では、拡張機能が信頼されていないワークスペースで完全にサポートされていることを宣言しています。この場合、拡張機能は信頼されていないワークスペースで有効になります。

"capabilities": {
  "untrustedWorkspaces": {
    "supported": true
  }
}

次の例では、拡張機能が信頼されていないワークスペースでサポートされていないことを宣言しています。この場合、拡張機能は信頼されていないワークスペースで無効になります。

"capabilities": {
  "untrustedWorkspaces": {
    "supported": false
  }
}

3 番目のオプションは、limited サポートを宣言することです。limited オプションを選択すると、3 つのツールが提供されます。

まず、ワークスペースで構成できる設定があり、ワークスペースの値を適用するにはワークスペースが信頼されている必要がある場合、untrustedWorkspaces オブジェクトの restrictedConfigurations 配列プロパティを使用して設定を含めることができます。そうすることで、VS Code は、拡張機能が VS Code ワークスペース構成 API を使用してこれらの設定値を読み取るときに、これらの制限された設定のワークスペース値を無視します。

次の例では、信頼されていないワークスペースで制限される設定を宣言しています。

"capabilities": {
  "untrustedWorkspaces": {
    "supported": "limited",
    "restrictedConfigurations": [
      "markdown.styles"
    ]
  }
}

次に、現在のワークスペースが信頼されているかどうかをプログラムで確認およびリッスンすることもできます。次の API を使用します。

export namespace workspace {
  /**
   * When true, the user has explicitly trusted the contents of the workspace.
   */
  export const isTrusted: boolean;
  /**
   * Event that fires when the current workspace has been trusted.
   */
  export const onDidGrantWorkspaceTrust: Event<void>;
}

最後に、when 句で isWorkspaceTrusted コンテキストキーを使用して、コマンドまたはビューを宣言的に非表示にすることもできます。

アクションのお願い: issue #120251 の「ワークスペース信頼拡張機能ガイド」を確認し、拡張機能に適した untrustedWorkspaces.supported 値を設定してください。

提案された拡張機能API

すべてのマイルストーンには、新しい提案された API が付属しており、拡張機能の作者はそれらを試すことができます。いつものように、皆様からのフィードバックをお待ちしております。提案された API を試すために行う必要があることは次のとおりです。

  • 提案された API は頻繁に変更されるため、Insiders ビルドを使用する必要があります。
  • 拡張機能の package.json ファイルに "enableProposedApi": true という行が必要です。
  • vscode.proposed.d.ts ファイルの最新バージョンをプロジェクトのソースの場所にコピーします。

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

ネイティブノートブック

ネイティブノートブック API の大部分を最終決定に向けて準備しています。数多くの小さな調整と、いくつかの大きな変更も行いました。

ノートブックシリアライザー

NotebookSerializer API を追加しました。これは、「バイト」を NotebookData に、またはその逆に変換する簡単な方法を提供します。この API を実装すると、ノートブックは、バックアップ、元に戻す、ダーティステートなどの機能を無料で利用できます。拡張機能の作者は、この新しい API を採用し、以前のコンテンツプロバイダーベースの API を使用しないことをお勧めします。

ノートブックコントローラー

ノートブックコントローラー API は、カーネルプロバイダー API に代わるものです。ノートブックコントローラーは、ノートブックの実行エンジンを提供し、ノートブックの出力を生成します。ノートブックは、複数のコントローラーを提供することも、何も提供しないこともでき、VS Code ではユーザーがコントローラーを選択できます。代わりに、拡張機能は、ドメインモデルの要求に応じて、コントローラーを自由に作成、変更、および削除できます。

ノートブックセルステータスバー

NotebookCellStatusBarItemProvider API は、createCellStatusBarItem メソッドに代わるものです。これにより、拡張機能は、ラベル、アイコン、およびコマンド付きの項目を、すべてのセルエディターの下部にあるステータスバーに提供できます。これは、他の多くの VS Code 拡張機能 API と同じプロバイダーパターンに従います。

テスト

今月は新しいテスト API のサブセットを最終決定する予定でしたが、改良に重点を置き、最終決定を来月に延期しました。issue #122208 で追跡されています。今回のイテレーションで行われた API の変更は主に次のとおりです。

  • TestProviderTestController に名前が変更され、そのメソッドもそれに応じて名前が変更されました。
  • TestItem は、vscode.test.createTestItem によって呼び出される管理オブジェクトになりました。
  • テスト結果は、標準の vscode.test.createTestResults メソッドを通じて作成されるようになり、TestController.runTests の内外から呼び出すことができます。

これらの変更により、未加工のテスト出力を表示する機能や、拡張機能がテストのロードエラーを示す機能など、いくつかの追加機能が追加されました。これらの変更は、今後の追加機能の強固な基盤を提供し、既存の拡張機能 API により緊密に沿ったものになると考えています。

また、既存の Test Explorer UI 拡張機能で動作する任意のアダプターがネイティブ VS Code テストに自動的にプラグインできるようにする Test Adapter Converter 拡張機能も作成しました。コンバーター拡張機能は現在手動でインストールできますが、間もなく Test Explorer UI と統合され、既存のユーザーとアダプターがネイティブテストにシームレスに移行できるようになります。

ウェブビューとの間での ArrayBuffer の転送の改善

現在のバージョンの VS Code では、型付き配列をウェブビューとの間で送受信する場合、いくつかの癖があります。

  • UInt8Array などの型付き配列は、非常に非効率的にシリアル化されます。これにより、数メガバイトのデータを転送する必要がある場合にパフォーマンスの問題が発生する可能性があります。
  • 送信された型付き配列は、受信側で正しい型として再作成されません。UInt8Array を送信すると、受信者は代わりに UInt8Array のデータ値を持つ汎用オブジェクトを取得します。

これらの問題はどちらもバグですが、既存の動作に依存する拡張機能を破壊する可能性なしに修正することもできません。同時に、新しく作成された拡張機能が現在の紛らわしく非効率的な動作を望む理由はまったくありません。

したがって、既存の拡張機能については既存の動作を維持したまま、新しい拡張機能をより正しい動作にオプトインさせることにしました。これは、拡張機能の package.jsonengines を調べることによって行われます。

"engines": {
  "vscode": "^1.57.0",
}

拡張機能が VS Code 1.57 以降をターゲットにしている場合、型付き配列は受信側で再作成され、ウェブビューとの間での大きな型付き配列の転送がはるかに効率的になるはずです。

この動作をテストして、期待どおりに動作しない場合、または既存のコードに予期しない回帰が発生する場合はお知らせください。

TerminalOptions.message

この新しい提案により、拡張機能はプロセスが起動する前にターミナルにメッセージを表示できます。

vscode.window.createTerminal({
  message: '\x1b[3;1mSome custom message\x1b[0m'
});

デバッグアダプタープロトコル

例外ブレークポイントが通常のブレークポイントとより適切に連携

setExceptionBreakpoints リクエストは、オプションで他の set*Breakpoints リクエストと同様に Breakpoint の配列を返すことができるようになりました。これにより、クライアントは個々の例外ブレークポイントまたはフィルターの検証エラーメッセージを表示できます。今回のリリース以降、VS Code はこれらのエラーをブレークポイントビューに表示します。

再起動リクエストがデバッグ構成の変更を反映可能に

restart リクエストは、新しいオプションパラメーター arguments を取るようになり、クライアントは起動またはアタッチ構成の最新バージョンを渡すことができます。この追加により、デバッグアダプターは、デバッグ構成からの最新の値でセッションを再起動できます。

デバッガーを切断し、デバッグ対象を中断状態のままにする

disconnect リクエストは、デバッグセッションを終了し、デバッグ対象の実行を続行するか、終了するために使用されます。デバッガーが切断された後、デバッグ対象を中断状態に保つための新しいオプションがあります。これにより、新しいセッションでデバッグを再開することが可能になります。

この機能を実装するデバッグアダプターは、supportSuspendDebuggee 機能を使用してそのサポートを発表する必要があります。クライアントは、新しいオプション引数 suspendDebuggeedisconnect リクエストに渡すことで、この機能を使用できます。

エンジニアリング

Electron 12 のアップデート

今回のマイルストーンでは、Electron 12 を VS Code にバンドルする調査を完了しました。Insiders でのテストとセルフホスティングにご協力いただいた皆様に感謝いたします。これは Electron のメジャーリリースであり、Chromium 89.0.4389.114 および Node.js 14.16.0 が付属しています。

Electron サンドボックスの進捗状況

今回のマイルストーンでは、Electron の サンドボックス および コンテキスト分離 機能を有効にする準備を VS Code ウィンドウに対して継続的に行いました。

具体的には

  • サンドボックス化されたレンダラーで VS Code ウィンドウにアクセスするために必要なすべての環境プロパティを変更しました。
  • 可能な特定のケースで iframe を選択的に有効にすることにより、カスタムエディターの webview の代わりに iframe 要素に切り替えることを検討しています。
  • レンダラーにあるネイティブモジュールまたは Node.js 要件の一部を他のプロセスに移動するか、完全に削除することができました。
  • windows-process-tree をコンテキスト対応にしました。

サービスワーカーがウェブビューでリソースをロードするために使用されるようになりました

デスクトップ版 VS Code では、ウェブビューはサービスワーカーを使用してローカルリソースをロードするようになりました。ウェブ版 VS Code は常にサービスワーカーを使用していましたが、以前のデスクトップ版 VS Code は Electron プロトコル を使用していました。

デスクトップバージョンでサービスワーカーを使用することで、デスクトップとウェブの間でウェブビューの動作をより適切に調整できます。また、いくつかの厄介なバグを修正し、約 1000 行のコードを削除することができました。

この変更は、ほとんどのウェブビュー拡張機能には影響を与えないはずですが、いくつかのエッジケースで問題が発生する可能性があります。

  • ウェブビューがリソースをロードする方法について仮定する拡張機能

    拡張機能が vscode-webview-resource: プロトコルを直接使用していたり、リソース URI に関する他の仮定をハードコーディングしていたりすると、機能しなくなる可能性があります。

    代わりに、リソースの URI を作成するには、常に .asWebviewUri を使用するようにしてください。また、返される URI の形式は将来変更される可能性があることに注意してください。

  • iframe の src をディスク上の HTML ファイルを指すように設定する拡張機能

    サービスワーカーはこのリクエストを確認できないため、サポートされなくなりました。これはすでにウェブの場合に当てはまっており、このパターンは一般的ではないと考えています。

    推奨される修正方法は、iframe を使用せず、代わりに HTML ファイルの内容をウェブビューにインライン化することです。

コードベースで暗黙的なオーバーライドが無効になりました

今後の TypeScript 4.3 リリースでは、サブクラスのメソッドがスーパークラスのメソッドをオーバーライドすることをコンパイラーに伝える新しい override キーワード が導入されます。また、スーパークラスのメソッドをオーバーライドするすべてのメソッドで override キーワードを使用する必要がある新しい --noImplicitOverride フラグもあります。

class Foo {
   foo() {...}
}

class SubFoo extends Foo {
    foo() { ... } // Error when noImplicitOverride is enabled: missing override specifier
}

override キーワードにはいくつかの利点があります。

  • コードを読んでいるときに、メソッドが基本クラスからオーバーライドされていることを警告します。

  • 基本クラスに存在しないメソッドをオーバーライドしようとするとエラーになります。これは、基本クラスでメソッドの名前を変更したが、サブクラスでメソッド名を更新するのを忘れた場合に発生するエラーをキャッチするのに役立ちます。

今回のイテレーションでは、コードベースで override キーワードを採用し、コア VS Code とすべての組み込み拡張機能の両方で --noImplicitOverride を有効にしました。この作業の大部分を自動化しましたが、この変更は、コードがプロパティを誤って再宣言していたり、継承パターンが不明確であったりするいくつかのケースをキャッチするのに役立ちました。

この新しい厳密性ルールは、将来、一般的なプログラミングミスをキャッチするのにも役立つはずです。

Windows インストーラーが Windows パッケージマネージャーに統合

Windows パッケージマネージャー パブリッシングパイプラインを更新して、arm64 用のユーザーおよびシステムインストーラーを公開し、v1 パッケージマニフェストスキーマ を採用しました。これにより、x86x64、および arm64 用のユーザーおよびシステムインストーラーを単一のマニフェストに統合できます。ユーザーは、パッケージを インストール する際、または winget CLI 設定 を使用する際に、--scope パラメーターを使用してユーザーインストーラーとシステムインストーラーを選択できます。

ドキュメント

入門ビデオの更新

VS Code の 入門ビデオ が更新されました。ビデオの範囲は、はじめに拡張機能の使用 から、デバッグバージョン管理 などの VS Code の機能にまで及びます。

Intro to Debugging in VS Code video

新しい C++ ビデオ

C++ 拡張機能 チームが、IntelliSense の構成、C++ プロジェクトのビルドとデバッグの方法を説明する一連の 入門ビデオ を作成しました。

VS Code の背後にあるストーリーとテクノロジー

VS Code の歴史と基盤となるテクノロジーについては、VS Code エンジニアの Ben Pasero への このインタビュー で読むことができます。Ben は、VS Code の初期の頃や、macOS、Windows、Linux で VS Code を実行できるようにするアプリケーションフレームワークとして Electron を使用することについて語っています。

パートナー拡張機能

Azure Machine Learning

Azure Machine Learning 拡張機能を使用すると、機械学習ワークフロー用の強力なクラウドコンピューティングリソースを作成および管理できます。リモート機能を使用すると、安全で監査可能、かつ準拠した方法でコンピューティングリソースにシームレスに 接続 できます。

Microsoft Azure Machine Learning extension

注目すべき修正

  • 108559: RunInTerminal がワークスペース設定バグから指定された統合ターミナルを使用しない
  • 118282: デバッガーステップオーバーが skipFiles に入る
  • 118731: ブラウザウィンドウとタブを非同期的に開くときに Safari のポップアップブロッカーを回避する方法を調査する
  • 119340: 未キャッチの例外ブレークポイントが有効になっている場合、デバッグなしで実行が終了しない
  • 121347: バックアップから復元するとファイルが文字化けする
  • 119059: カスタムテキストエディター: バックアップを復元すると 2 つのエディターが開く
  • 120245: CSS: !important 補完が壊れている
  • 120393: webgl コンテキストロスの処理を改善する
  • 120435: emmet.extensionsPath の有効なパスチェックを削除する
  • 120882: エクスプローラーにファイルを貼り付けても、エディターでそのファイルが開かなくなった
  • 121148: デバッグドロップダウンに重複した起動構成が表示される
  • 120277: ファイル検索ペインの水平スクロールバーが小さすぎて、スクロール方向が間違っている

謝辞

最後になりましたが、今月 VS Code に貢献してくださった以下の皆様に心から感謝申し上げます。

Issue トラッキングへの貢献

vscode への貢献

vscode-eslint への貢献

vscode-json-languageservice への貢献

vscode-vsce への貢献

debug-adapter-protocol への貢献

vscode-js-debug への貢献

vscode-generator-code への貢献