VS Codeのエージェントモードを拡張するには、を試してください!

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

アップデート 1.56.1: このアップデートでは、これらのセキュリティ問題に対処しています。

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

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


Visual Studio Code の2021年4月リリースへようこそ。VS Code チームは今月、いくつかの長期間にわたる更新に取り組んでいます。今後の機能については「プレビュー機能」セクションをご覧ください。このリリースに含まれる主なハイライトは以下のとおりです。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com更新 にアクセスしてください。

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

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画像エディターを使い続けるか、新しいデフォルトを設定するかを選択できます。ユーザーはそうしてバイナリ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選択貼り付けコマンド

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

ターミナルワークスペースのシェル権限が変更されました

プロファイル関連の今後の変更をサポートするため、.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

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

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

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改善

停止コマンドと切断コマンドの代替動作

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

このリリースでは、デバッグツールバーからコマンドをトリガーする際に Alt 修飾子を押すことで、この動作を切り替えることができるようになりました。動作を変更することで、launch タイプデバッグセッションではデバッグ対象を実行したままに、attach タイプデバッグセッションではデバッグ対象を終了させることが可能になります。デフォルトコマンドで Alt を使用する以外に、launchattach の両方のデバッグセッションで、コマンドパレットから Debug: StopDebug: Disconnect の両方のコマンドにアクセスすることも可能です。

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

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

ユーザーがデバッグを開始したいが、デバッグサポートを提供する必要な言語拡張機能(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

PowerShell 用インライン値サポート拡張機能を使用すると、PowerShell スクリプトのデバッグ中にインライン値を取得できます。

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

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

JavaScriptデバッグ

いつものように、変更の完全なリストはvscode-js-debug変更ログで見つけることができます。

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

ヒューリスティックに基づいて、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.preview.typographer 設定により、組み込みのMarkdownプレビューでスマートクォートとシンプルなタイポグラフィック置換を有効にできます。

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

Smart quotes and text replacement in the Markdown preview

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

shellscriptとして認識されるファイルの増加

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

制限

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

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

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

TypeScript 4.3

このリリースでは、今後のTypeScript 4.3リリースに対するサポートを引き続き改善しています。TypeScript 4.3 の新しい言語機能と改善点については、TypeScript ブログで詳しく読むことができます。ここでは、TypeScript 4.3 で可能になったエディターの改善点をいくつかご紹介します。

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

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

ワークスペースの信頼

前回のマイルストーンのリリースノートでは、特に拡張機能作成者向けのWorkspace Trustに関する作業についてお伝えしました。このマイルストーンでは、拡張機能APIとユーザーエクスペリエンスの両方で大きな進展がありました。とはいえ、Workspace Trustはこのリリースでは引き続き無効化されていますが、ぜひ試してみてフィードバックをいただければ幸いです。

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

Workspace Trust startup dialog

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

Workspace Trust の開発状況を追跡し、issue #106488 でフィードバックを提供できます。

拡張機能への貢献

リモート開発

フル機能の開発環境としてコンテナ、リモートマシン、またはLinux 用 Windows サブシステム (WSL) を使用できるリモート開発拡張機能の作業は継続中です。

1.56の主な機能ハイライトは以下の通りです。

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

新しい拡張機能の機能とバグ修正については、リモート開発リリースノートで学ぶことができます。

GitHub プルリクエストと課題

プルリクエストとイシューの作業、作成、管理を可能にするGitHub Pull Requests and Issues拡張機能の作業は引き続き進行中です。

すべての新機能と更新の詳細については、拡張機能の0.26.0リリースの完全な変更ログをご覧ください。

拡張機能作成

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

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

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

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

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

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

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

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

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

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

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

ほとんどのWebビューにiframeが使用されるようになりました

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

デスクトップ版VS Codeを<iframe>バックのウェブビューを使用するように移行することをしばらく検討していました。この変更により、デスクトップとウェブの間で、拡張機能により一貫したウェブビュー環境が提供されます。また、<webview>から移行することで、Electronのサンドボックス化の取り組みにも役立ちます。

このイテレーションでは、ほとんどのウェブビューをiframeを使用するように切り替えました。<webview> タグは、Findウィジェットを有効にするウェブビューのみで使用されており、さらにエンジニアリング作業を進めた後、それらもiframeを使用するように移行する予定です。

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

Webビューの検査が簡単に

<iframe>-backed webviewsの明確な利点の1つは、それらがはるかに検査しやすくなったことです。

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

Inspecting a webview in its own developer tools window

<iframe> に基づくウェブビューでは、代わりに VS Code の標準開発者ツール (開発者: 開発者ツールの切り替え) を使用してウェブビューを検査できます。

Inspect a webview in the main developer tools window

これにより、複数のウェブビューを簡単に検査できます。また、ウェブビューが閉じても開発者ツールが閉じられることはなくなりました。

さらに、ウェブビュー内で発生する例外やコンソールメッセージが、トップレベルの開発者ツールコンソールに表示されるようになりました。

Exceptions from a webview printed in the main developer tools

開発者ツールを使用して、ウェブビューのコンテキストで式を評価することもできます。VS Codeの開発者ツールをDeveloper: Toggle Developer Toolsで開いた後、コンソールを開き、コンテキストセレクターからウェブビューのactive-frameを選択します。

Selecting the current scope of the debug console

全体として、VS Codeの標準開発者ツールを使用できることで、Webビューのより良い開発体験が提供されるはずです。

CodeActionTriggerKind

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

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

プロバイダーは triggerKind を使用して、Code Actions の要求方法に応じて異なる結果セットを返すことができます。たとえば、自動的にトリガーされるリファクタリング Code Action プロバイダーは、Code Action の電球が表示される頻度を制限するために、正確な現在の選択範囲に対してのみリファクタリングを返す場合があります。しかし、Code Actions が明示的に要求された場合、同じプロバイダーは、現在の位置でユーザーが関心を持つ可能性のあるすべてのリファクタリングを表示しようと自動的に現在の選択範囲を拡張する場合があります。

更新された codicon

当社のcodicon ライブラリに以下の新しいアイコンを追加しました。

  • arrow-swap
  • コピー
  • debug-line-by-line
  • filter-filled
  • person-add
  • terminal-bash
  • terminal-cmd
  • terminal-debian
  • terminal-linux
  • terminal-powershell
  • terminal-tmux
  • terminal-ubuntu
  • ワンド

List displaying updated codicons with their names

キーバインディングラベルの色

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

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

以下のカスタマイズが可能です。

  • keybindingLabel.background: キーバインディングラベルの背景色。キーバインディングラベルはキーボードショートカットを表すために使用されます。
  • keybindingLabel.foreground: キーバインディングラベルの前景色。キーバインディングラベルはキーボードショートカットを表すために使用されます。
  • keybindingLabel.border: キーバインディングラベルの境界線の色。キーバインディングラベルはキーボードショートカットを表すために使用されます。
  • keybindingLabel.bottomBorder: キーバインディングラベルの下部境界線の色。キーバインディングラベルはキーボードショートカットを表すために使用されます。

Workspace Trust 拡張機能 API

前回のマイルストーンでは、Workspace Trustという機能に関して取り組んできた作業について言及しました。拡張機能作者の皆様には、更新情報についてissue #120251を注視していただくようお願いしましたが、引き続きそのようにお願いいたします。以下の情報と更新もそのissueで見つけることができます。

このマイルストーンでは、Workspace Trust 拡張機能 API を提案段階から安定版に移行しました。これにより、拡張機能を Workspace Trust にオンボーディングするためのガイドの最初のカットをリリースすることができました。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 の「Workspace Trust Extension Guide」を確認し、拡張機能に適切な 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に名前が変更され、そのメソッドもそれに合わせて名前が変更されました。
  • TestItemsは、vscode.test.createTestItemで呼び出される管理対象オブジェクトになりました。
  • テスト結果は、TestController.runTests の内部または外部で呼び出すことができる標準的な vscode.test.createTestResults メソッドによって作成されるようになりました。

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

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

ArrayBuffersとWebビュー間の転送改善

現在のVS Codeバージョンでは、型付き配列をWebビューに送信したり、Webビューから受信したりする際に、いくつかの癖があります。

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

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

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

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

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

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

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の更新

このマイルストーンでは、Insidersでのテストとセルフホストに関わった皆様のおかげで、Electron 12をVS Codeにバンドルするための探索が完了しました。これはElectronの主要なリリースであり、Chromium 89.0.4389.114とNode.js 14.16.0が含まれています。

Electronサンドボックスの進捗

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

具体的には

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

Service Worker がウェブビューでリソースを読み込むようになりました

デスクトップ版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
}

オーバーライドキーワードにはいくつかの利点があります。

  • コードを読んだときに、メソッドが基底クラスのメソッドをオーバーライドしていることを知らせてくれます。

  • 基底クラスに存在しないメソッドをオーバーライドしようとするとエラーになります。これは、基底クラスでメソッド名を変更したが、サブクラスでメソッド名を更新し忘れたことによるエラーを捕捉するのに役立ちます。

このイテレーションでは、コードベースでオーバーライドキーワードを採用し、コアVS Codeとすべての組み込み拡張機能の両方で--noImplicitOverrideを有効にしました。この作業のほとんどを自動化しましたが、この変更により、コードがプロパティを誤って再宣言しているケースや、継承パターンが不明瞭なケースをいくつか発見するのに役立ちました。

この新しい厳格なルールは、将来の一般的なプログラミングミスを捕捉するのにも役立つはずです。

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

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

ドキュメント

更新された入門ビデオ

VS Codeの入門ビデオが更新されました。ビデオは、入門拡張機能の使用から、デバッグバージョン管理といったVS Codeの機能まで多岐にわたります。

Intro to Debugging in VS Code video

新しいC++ビデオ

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

VS Code の歴史と技術

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

パートナー拡張機能

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 に貢献してくださった以下の皆様に、心からの感謝を申し上げます。

問題追跡への貢献者

vscodeへの貢献者

vscode-eslintへの貢献者

vscode-json-languageserviceへの貢献

vscode-vsceへのコントリビューション

debug-adapter-protocolへの貢献者

vscode-js-debugへの貢献者

vscode-generator-codeへの貢献者