に参加して、VS Code の AI 支援開発について学びましょう。

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

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

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

ダウンロード: Windows: x64 Arm64 | Mac: ユニバーサル 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をダウンロードして、利用可能になり次第、最新の更新を試すことができます。

Workbench

改善されたアクションホバーフィードバック

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

Actions hover feedback is improved with a background color.

無題のエディターヒント

多くの新規ユーザーが、VS Codeの完全な言語サポートを得るために言語を設定する必要があることを認識していないことが分かりました。この問題を解決するために、ユーザーが正しい言語モードを設定できるように、無題のエディターのヒントを導入しました。この無題のヒントは上級ユーザーには役に立たない可能性があるため、入力し始めるとすぐに消えるか、表示しないを選択すると、二度とヒントが表示されなくなります。

Untitled editor shows an untitled hint

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

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

以下の短いビデオでは、ユーザーが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

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

タスク

アップグレードに伴うタスク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

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プレビューのタイポグラファーサポート

新しい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設定でベルが有効になっていて、ターミナルベルがトリガーされると、ベルアイコンが表示されます。

タスクの状態もまもなくサポートする予定であり、タブをアクティブにしなくてもタスクの実行状態が一目でわかるようになります。

ウェルカムページのウォークスルー

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

制限

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

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

私たちは皆さんがRemote Repositories (RemoteHub)を試してくださることを大変楽しみにしており、皆様のご意見やフィードバックを心待ちにしています。この旅はまだ始まったばかりですので、開発を続けるにつれて機能セットが拡大し、制限が縮小することをご期待ください。また、サポートされるプロバイダーのセットも拡大していく予定です。GitHubは私たちがサポートする最初のプロバイダーであり、Azure Reposも近日中に登場します。

TypeScript 4.3

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

  • overrideのサポート。overrideキーワードを追加するためのクイックフィックスもあります。
  • import文の補完。これは自動インポートに似ていますが、インポート文自体を入力する点が異なります。
  • 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の開発状況は、イシュー #106488で追跡し、フィードバックを提供できます。

拡張機能への貢献

リモート開発

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

1.56の主要な機能は以下のとおりです。

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

新しい拡張機能の機能とバグ修正については、Remote Developmentリリースノートで確認できます。

GitHub Pull Requests and Issues

GitHub Pull Requests and Issues拡張機能の作業が続いており、プルリクエストとイシューの作業、作成、管理が可能です。

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

拡張機能作成

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

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

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

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

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

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

Call to Action: 拡張機能が仮想ワークスペースを処理できるかどうかを確認し、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を使用するようになりました

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

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

今回のイテレーションでは、大部分のWebビューをiframeを使用するように切り替えました。<webview>タグは、検索ウィジェットを有効にするWebビューでのみ使用されており、さらに少しのエンジニアリング作業の後、それらもiframeを使用するように移行する予定です。

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

Webビューの検査が簡単に

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

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

Inspecting a webview in its own developer tools window

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

Inspect a webview in the main developer tools window

これにより、複数のWebビューを簡単に検査できます。Webビューが閉じても開発者ツールが閉じなくなるという利点もあります。

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

Exceptions from a webview printed in the main developer tools

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

Selecting the current scope of the debug console

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

CodeActionTriggerKind

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

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

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

更新された 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
  • wand

List displaying updated codicons with their names

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

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

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

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

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

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

前回のマイルストーンで、Workspace Trustという機能に取り組んでいたことをお伝えしました。拡張機能の作成者には、更新情報についてイシュー #120251に注目するように依頼し、引き続きそうしています。以下の情報と更新もそのイシューで見つけることができます。

このマイルストーンでは、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コンテキストキーを使用して、コマンドやビューを宣言的に非表示にすることができます。

Call to Action: イシュー #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の一部を最終化する予定でしたが、改善に注力し、最終化を来月に延期しました(イシュー #122208で追跡)。今回のイテレーションで行われたAPIの変更は主に以下のとおりです。

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

これらの変更により、生のテスト出力を表示したり、拡張機能がテストの読み込みエラーを示すことができるなど、いくつかの追加機能がもたらされました。これらの変更は、今後の追加機能の堅固な基盤を提供し、既存の拡張機能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'
});

Debug Adapter Protocol

例外ブレークポイントが通常のブレークポイントとより適切に整合するようになりました

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

再起動要求でデバッグ構成の変更を反映できるようになりました

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

デバッガを切断し、デバッグ対象を停止状態に保つ

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

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

エンジニアリング

Electron 12へのアップデート

今回のマイルストーンでは、Electron 12をVS Codeにバンドルする探求を終えました。テストとInsidersでのセルフホスティングに携わってくださった皆様に感謝いたします。これは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をコンテキスト認識型にしました。

Webビュー内のリソースの読み込みにService Workerが使用されるようになりました

デスクトップ版VS Codeでは、WebビューはService Workerを使用してローカルリソースを読み込むようになりました。Web版VS Codeでは常にService Workerが使用されていましたが、以前のデスクトップ版VS CodeはElectronプロトコルを使用していました。

デスクトップ版でサービスワーカーを使用することで、デスクトップとウェブ間でのウェブビューの動作をより良く整合させることができます。また、いくつかの厄介なバグの修正にも役立ち、約1000行のコードを削除することができました。

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

  • Webビューがリソースを読み込む方法について仮定を置いている拡張機能

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

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

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

    サービスワーカーはこのリクエストを見ることができないため、これをサポートしなくなりました。これはWebではすでにそうであり、このパターンは一般的ではないと考えています。

    推奨される修正方法は、iframeを使用せず、HTMLファイルの内容をWebビューにインラインで含めることです。

コードベースで暗黙的なオーバーライドは無効

間もなくリリースされる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パッケージマニフェストスキーマを採用しました。これにより、x86x64arm64用のユーザーおよびシステムインストーラーを単一のマニフェストに統合できます。ユーザーは、パッケージをインストールする際、またはwinget CLI設定を使用する際に、--scopeパラメーターを使用してユーザーおよびシステムインストーラーを選択できます。

ドキュメント

更新された入門ビデオ

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

Intro to Debugging in VS Code video

新しいC++ビデオ

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

VS Codeの背景にある物語とテクノロジー

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

パートナー拡張機能

Azure Machine Learning

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

Microsoft Azure Machine Learning extension

注目すべき修正点

  • 108559: RunInTerminalがワークスペース設定の指定された統合ターミナルを使用しないバグ
  • 118282: Debugger Step Over into 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への貢献者

© . This site is unofficial and not affiliated with Microsoft.