エージェント型開発を探求する -

2022年1月(バージョン 1.64)

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

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

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


Visual Studio Codeの2022年1月リリースへようこそ。このバージョンには多くのアップデートが含まれています。主なハイライトは以下の通りです。

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

このバージョンの新機能のハイライトを、VS Codeチームのリリースパーティーでご覧ください。YouTubeチャンネルでイベントの録画を見ることができます。

Insiders: 新機能をできるだけ早く試したいですか?ナイトリービルドのInsidersをダウンロードして、利用可能になった最新のアップデートを試すことができます。

ワークベンチ

新しいサイドパネル

このマイルストーンでは、ワークベンチ内のサイドバーと反対側に新しい領域「サイドパネル」を導入しました。ここには、サイドバーや下部パネルのビューを配置できます。下部パネルをエディターの左右に移動するのとは異なり、新しいサイドパネルは下部パネルと同時に使用できるため、一度により多くのビューセットを表示できます。

サイドパネルを使用するには、ビューをそこに移動する必要があります。最も多くの要望が寄せられた機能の一つに基づき、アウトラインビューなどをサイドバーからサイドパネルに移動したい場合があるでしょう。ビューをドラッグ&ドロップしてサイドパネルに移動できます。サイドパネルが開いていない場合、下部パネルと同様に、エディター領域の端にビューをドラッグするとサイドパネルが開きます。

以下の短いビデオでは、アウトラインビューを右にドラッグ&ドロップしてサイドパネルを作成しています。ユーザーはサイドバーのビュー(ここではグローバル検索ビュー)を切り替えながら、アウトラインビューを表示したままにできます。

または、コマンドパレットから「Move View(ビューの移動)」コマンドを使用することもできます。これを選択すると利用可能なビューのドロップダウンが表示されます。ビューを選択した後、新しいパネル/サイドバー/サイドパネルエントリを作成するか、エクスプローラーやソース管理などの既存の場所にビューを配置するかを選択できます。

Move View command view locations dropdown

ビューアイコンをつかむことで、パネル、サイドバー、サイドパネルの間でビューをドラッグ&ドロップできます。ビューアイコンを右クリックして「Reset Location(場所をリセット)」を選択すると、ビューの場所をデフォルトに戻すことができます。

View context menu with Reset Location command

すべてのビューのレイアウトをデフォルトに戻したい場合は、コマンドパレットから「Views: Reset View Locations(ビューの場所をリセット)」を実行できます。

パネル位置の置換

上記で述べたように、新しいサイドパネルはパネルを左右に移動するのと同様の機能を提供しますが、元のパネルの内容全体を移動する必要がないという点で改善されています。パネル間でのビューのドラッグ&ドロップとともに、新しいサイドパネルは下部パネルを移動するオプションを置き換えるものとなります。

そのため、workbench.panel.defaultLocation設定および「Move Panel(パネルの移動)」コマンドを非推奨とし、以下の類似コマンドを推奨します。

  • Move Views From Panel To Side Panel (workbench.action.movePanelToSidePanel)
  • Move Views From Side Panel To Panel (workbench.action.moveSidePanelToPanel)

古い「Move Panel」コマンドは、同様の動作を提供する新しいコマンドに再マッピングされています。このマッピングがあっても、キーバインドを新しいコマンドに更新することをお勧めします。

以下は、下部パネル全体をサイドパネルに移動し、元のパネル位置に戻す様子です。

パネルの配置

もう一つの人気のある機能リクエストに応え、パネル配置(Panel Alignment)という新しいレイアウトオプションを追加しました。このオプションでは、下部パネルがウィンドウ全体でどれだけの幅を占めるかを設定できます。4つのオプションがあります。

  • Center(中央) - 従来の動作。パネルはエディター領域の幅のみを占めます。
  • Left(左) - パネルはウィンドウの左端からエディター領域の右端まで広がります。
  • Right(右) - パネルはウィンドウの右端からエディター領域の左端まで広がります。
  • Justify(両端揃え) - パネルはウィンドウの全幅に広がります。

どのオプションでも、アクティビティバーはウィンドウの端とみなされることに注意してください。

これらのオプションは、View(表示) > Appearance(外観) > Align Panel(パネルの配置)メニュー、または新しい「Set Panel Alignment to...(パネルの配置を設定)」コマンドから設定できます。

レイアウト制御のカスタマイズ

これらすべての新しいレイアウトオプションにより、レイアウト設定の発見と使いやすさを向上させる方法を模索してきました。その結果、タイトルバーに実験的な「Configure Layout(レイアウトを構成)」ボタンが追加されました。これは、window.titleBarStyle設定がcustom(WindowsとmacOSのデフォルト)であり、workbench.experimental.layoutControl.enabledtrueに設定されている場合にのみ表示されます。ボタンの表示は実験的なものですが、手動で有効にしたい場合は、設定エディター(⌘, (Windows, Linux Ctrl+,))でこれらの設定値を適用してください。

Configure Layout button on the title bar

メニューの内容は現在調整中ですが、現在はサイドバー、パネル、サイドパネルの切り替えが可能です。さらに、新しいコマンド「Customize Layout(レイアウトのカスタマイズ)」のエントリがあります。このコマンドは、レイアウト構成のあらゆる側面を1か所で制御できる新しいインタラクティブなQuick Pick体験をトリガーします。

ぜひ試していただき、フィードバックがあればissue #137633までお寄せください。

設定エディター

設定エディターの検索で、文字列や列挙型(enum)設定の検索時に値の一致も対象になりました。

Settings editor pulling up results where the enum value matches the query

新しい検索アルゴリズムでは単語一致も優先されます。つまり、JavaとJavaScriptの両方の拡張機能がある場合、「java」を検索するとJavaの設定が最初に表示されます。

Settings editor search showing Java results before JavaScript ones when searching "java"

最後に、設定エディター内のドロップダウン(files.autoSaveなど)やリストウィジェット(files.associationsなど)がタッチスクリーンデバイスで動作するようになりました。

設定同期

設定同期(Settings Sync)が「ユーザータスク」の同期をサポートしました。

Settings Sync User Tasks

デフォルトの設定同期マシン名に、Web版VS Codeのブラウザ名と製品名が含まれるようになりました。

Settings Sync default machine name including browser and product names

エクスプローラー: 取り消しの確認と無効化

ファイルエクスプローラーでは長らく、ファイルやフォルダーの編集(名前変更、切り取り/コピー/貼り付け、移動、インポートなど)を取り消すためのUndoスタックをサポートしてきました。この動作が予期しないというユーザーのために、エクスプローラーでのUndoを無効にする設定(explorer.enableUndo)が追加されました。

さらに、Undo実行時に確認を求める頻度を設定する新しい設定(explorer.confirmUndo)が追加されました。デフォルトでは、破壊的な取り消しが誤って発生しないように以前より頻繁に確認を求めるようになりましたが、この動作を古いものに戻すには"light"値を、すべてのUndoアクション前に確認を求めるには"verbose"を設定できます。

エディター

オーディオキュー

オーディオキューは、現在の行にエラー、ブレークポイント、折りたたまれたテキスト領域などのマーカーがあるかどうかを音で示します。

これらは、プライマリカーソルが行を変更したとき、またはマーカーが現在の行に初めて追加されたときに再生されます。オーディオキューはスクリーンリーダーが接続されていると自動的に有効になりますが、audioCues.enabledonに設定することで手動で有効にすることもできます。

今後さらにオーディオキューを追加し、サウンドデザインの反復を行っていく予定です。

Unicode強調表示の改善

11月リリースで導入されたUnicode強調表示機能を改善するため、誤検知に対処する新しい設定が追加されました。

新しい設定editor.unicodeHighlight.allowedLocalesを使用して、設定されたロケールで一般的な文字を許可できます。デフォルトでは、現在のVS Code表示言語と現在のOS言語が含まれます。現時点では、vscode-loc言語パックで翻訳されているロケールのみがサポートされています。

editor.unicodeHighlight.includeStrings設定は、文字列内の文字を強調表示するかどうかを制御します。値はデフォルトでtrueですが、falseに設定して文字列を無視することもできます。

エディターの折りたたみ制限

新しい設定editor.foldingMaximumRegionsにより、エディターに表示される折りたたみ可能な範囲の最大数を変更できます。デフォルトの制限は5000です。数を増やすとパフォーマンスが低下する可能性があることに注意してください。

エディターが言語機能のタイミングに適応

折りたたみ領域、CodeLens、インレイヒント、セマンティックトークンなどの組み込み機能を含む、ほぼすべての言語機能が拡張機能によって提供されています。これらの機能はユーザーのジェスチャではなく、通常はタイムアウト後のタイピングによってトリガーされます。例えば、CodeLensやセマンティックトークンはタイピング中に更新されます。選択されていたタイムアウト値は固定されていて、多少恣意的でした。今回のリリースで、エディターは観測されたタイミングに適応するようになり、低速なマシンやネットワーク接続でリクエストが過負荷になることを防ぎ、高速なマシンではより効率的に利用できるようになりました。

ターミナル

自動応答

ターミナルに、特定の文字シーケンスを受信したときに自動的に返信するオプトイン機能が搭載されました。この機能が役立つ良い例は、Windowsのバッチスクリプト実行中にCtrl+Cを押した後のTerminate batch job (Y/N)?というメッセージです。WindowsでCtrl+Cの際に自動的にYとEnter(\r)で返信するには、次の設定を追加します。

"terminal.integrated.autoReplies": {
  "Terminate batch job (Y/N)?": "Y\r"
}

テーマ: Sapphire

他の処理に対してカスタム応答を設定することもできますが、プロセスに自動的にテキストを送信することになるため、注意して設定してください。例えば、プロンプトが表示されたときにOh My Zshを自動的に更新するために使用できます。

"terminal.integrated.autoReplies": {
  "[Oh My Zsh] Would you like to check for updates? [Y/n]": "Y\r"
}

Clinkを使用して同様の機能を有効にしている場合、2つの機能が競合するのを避けるために、ClinkまたはVS Codeで返信をnullに設定して無効にできます。

"terminal.integrated.autoReplies": {
  "Terminate batch job (Y/N)": null
}

拡張VTサポート

OSC 4/10/11/12エスケープシーケンスのサポートが追加され、アプリケーションがターミナルのテーマカラーを制御できるようになりました。

以前はターミナルでのリンク操作にはマウスが必要でしたが、現在は以下のコマンドでキーボードのみを使用してリンクを開くことができます。

  • Terminal: Open Last Web Link... (例: https://github.com/microsoft/vscode)
  • Terminal: Open Last File Link... (例: /Users/user/repo/file.txt)
  • Terminal: Open Detected Link... (すべてのリンク(Web、ファイル、単語)を表示)

A Quick Pick is displayed with link results of type web, word, and file.

ソース管理

リポジトリ探索の制御強化

コミュニティからのフィードバックに基づき、Gitリポジトリを探索するプロセスをより適切に制御し、より多様なフォルダー構造に対応するための2つの新しい設定が追加されました。

  • git.repositoryScanMaxDepth - 探索時に使用する階層の深さを制御します。
  • git.repositoryScanIgnoredFolders - 探索中に無視するフォルダーのリストを制御します。

変更リストのソート改善

新しい設定(scm.defaultViewSortKey)で、ソース管理ビューの変更リストに使用されるデフォルトのソートキーを制御できるようになりました。ソートキーの選択は各フォルダー/ワークスペースごとに記憶されます。

オプションは以下の通りです。

  • name - ファイル名で変更をソートします。
  • path - ファイルパスで変更をソートします(デフォルト)。
  • status - ソース管理ステータスで変更をソートします。

設定変更を適用するには、VS Codeウィンドウを再読み込みする必要があります。

新しいGitスタッシュコマンド

コマンドパレットに、すべてのスタッシュエントリをクリアできる新しいコマンド「Git: Drop All Stashes...」が追加されました。永続的な影響を持つGit操作と同様、このコマンドは慎重に使用してください。

Git出力 - Gitコマンドの実行時間と継続時間

パフォーマンスの問題を追跡するために、Git出力チャネルにGitコマンドが実行された時間と、そのコマンドの実行時間(子プロセスの生成にかかった時間を除く)が表示されるようになりました。

ノートブック

レンダリングされたMarkdownおよびコードセル出力内のテキスト検索

レンダリングされたMarkdownセルやコードセルの出力内でのテキスト検索がサポートされました。この機能は、ノートブックを開く際にすべてのMarkdownセルと出力をレンダリングする必要があり、負荷が高くなる可能性があるため、デフォルトでは無効になっています。検索コントロールの入力ボックスにあるフィルタードロップダウンからオプション(Markdown PreviewCode Cell Outputs)を選択することで、この機能をオンにできます。

現在、出力内のテキスト検索にはいくつかの制限があります。例えば、VS Code自体によってレンダリングされるストリーミング/テキスト出力は検索できません。これは次のイテレーションで改善する予定です。

セル折りたたみUI

ノートブックセルは、フォーカスされていることを示す青いバーを左側に備えています。このバーはインタラクティブになりました。上部をクリックするとセル入力を折りたたみ、下部をクリックすると出力を折りたたむことができます。

Markdownセルの折りたたみヒント

Markdownセルの領域が折りたたまれると、折りたたまれたセルの数が表示され、セルが非表示になっていることがより分かりやすくなりました。

Folded Markdown cell hint

セル実行ヒント

セルが実行中であること、およびどのセルが実行中であるかをより明確にする変更を加えました。

第一に、セルが実行中だが画面外にある場合、エディターペインの上部に進行状況バーが表示されます。

第二に、セルが実行中である場合に、ノートブックツールバーに新しいボタン「Go To Running Cell(実行中のセルへ移動)」が追加されました。

第三に、notebook.outline.showCodeCellsおよびnotebook.breadcrumbs.showCodeCells設定を介してアウトラインやパンくずリストにコードセルが表示されている場合、実行中にはアニメーションアイコンが表示されます。

デバッグ

バイナリデータの表示と編集

VS Codeの汎用デバッガーで、バイナリデータ(「メモリ」とも呼ばれる)の表示と編集がサポートされました。メモリの表示と編集が可能な変数には、Variables(変数)ビューにインラインバイナリアイコンが表示され、これを選択するとHex Editorが開きます。

Binary data shown for a variable during a debug session

テーマ: Codesong

メモリの表示と編集は、デバッグアダプタープロトコルのメモリ関連機能に依存しており、デバッグ拡張機能がこれらの機能を実装する必要があります。詳細については、以下のセクションDebugger extension authoring(デバッガー拡張機能の作成)を参照してください。今回のリリースでは、組み込みのJavaScriptデバッガーのみがバイナリデータの表示と編集をサポートしていますが、他のデバッグ拡張機能もすぐに追従することを期待しています。

JavaScriptデバッグ

ブレークポイントで停止する呼び出し元の除外

ブレークポイントを設定したりデバッガー文を追加したりしても、特定のコードパスから呼び出されたときのみ停止したい場合があります。mousemoveのようなDOMイベントハンドラーが良い例です。今回のリリースで、JavaScriptデバッガーは「呼び出し元を除外」してブレークポイントやデバッガー文で停止しないようにする機能を追加しました。

場所で停止中に、CALL STACK(コールスタック)ビューのフレームを右クリックして「Exclude Caller(呼び出し元を除外)」コマンドを選択できます。新しいEXCLUDED CALLERS(除外された呼び出し元)ビューが表示され、除外された呼び出し元を管理できるようになります。これにより、今後その呼び出し元がコールスタックに現れても、ブレークポイントで停止しなくなります。

LinuxでのEdgeサポート

Microsoft EdgeのデバッグがLinuxで利用可能になりました(edgeデバッグタイプを使用)。

言語

MarkdownパスのIntelliSense

組み込みのMarkdown拡張機能に、リンクと画像用のパスIntelliSenseが含まれるようになりました。

Path suggestions in a Markdown link

パスの提案は、CSSやHTMLファイルでのパスIntelliSenseと同様に機能します。/で始まるパスは現在のワークスペースからの相対パス、./で始まるかプレフィックスなしのパスは現在のファイルからの相対パスとして解決されます。パスの提案は/を入力すると自動的に表示され、⌃Space (Windows, Linux Ctrl+Space)を使用して手動で呼び出すこともできます。

パスIntelliSenseは、現在のファイル内や別のMarkdownファイル内のヘッダーへのリンクにも役立ちます。パスを#で開始すると、ファイル内のすべてのヘッダーの補完が表示されます(設定によっては、これを表示するために⌃Space (Windows, Linux Ctrl+Space)の使用が必要になる場合があります)。

Header section suggestions in a Markdown link

パスIntelliSenseを無効にするには、"markdown.suggest.paths.enabled": falseを使用します。

Markdownの取り消し線サポート

VS CodeがMarkdownエディターと組み込みのMarkdownプレビューの両方で~~strikethrough~~テキストのレンダリングをサポートしました。

Strikethrough rendering the Markdown editor and preview

取り消し線は、テキストを2つのチルダ文字で囲むことで記述します。

VS Codeのすべての組み込みテーマは取り消し線をサポートしていますが、Marketplaceの一部のテーマは、エディターで取り消し線テキストを正しくレンダリングするために更新が必要な場合があります。

TS 4.5.5

VS CodeはTypeScript 4.5.5をバンドルしています。

このマイナーアップデートでは、いくつかの重要なクラッシュとツールのバグが修正されています。

JS/TSのコード囲みスニペット

多くのJavaScriptおよびTypeScriptスニペットが、選択したテキストを囲む(Surround with)機能をサポートするように更新されました。

使用するには、テキストを選択して「Insert Snippet(スニペットの挿入)」を実行します。選択したテキストを置換するのではなく、ifforofのようなスニペットは、選択したテキストを新しいステートメントの本体として使用します。

HTMLでイコールの後に引用符を自動挿入

HTMLでプロパティの後に=を入力すると、言語サービスが自動的に引用符を挿入し、その間にカーソルを配置するようになりました。html.completion.attributeDefaultValue設定で引用符の種類(シングルかダブル)を指定でき、デフォルトではダブルクォートが使用されます。

この機能は、"html.autoCreateQuotes": falseを設定することで無効にできます。

JSONスキーマキャッシュのクリアコマンド

新しいコマンド「Clear schema cache(スキーマキャッシュのクリア)」で、以前にダウンロードされたスキーマのキャッシュをクリアできます。

LaTeXサポート

基本的なLaTeX言語サポートが追加されました。これには構文の強調表示と自動ペア閉じが含まれます。

LaTeX snippet

Web 版 VS Code

リモートリポジトリ

GitHubリポジトリ

Web版VS Codeで作成されたコミットが署名され、GitHub UI上でVerifiedとマークされるようになりました。さらに、メンテナーはWeb版VS Codeを使用して、フォークから送信されたプルリクエストに対してコミットできるようになりました。これは、新しいGitHub GraphQL createCommitOnBranch APIのおかげです。

さらに、ソース管理ビューが複数選択をサポートしました。

テーマ: One Monokai

以前は、空のコミットの作成はGitHubリポジトリをローカルまたはリモートマシンにクローンした後のみサポートされていました。現在はWeb版VS Codeでも、「GitHub Repositories: Commit Empty」コマンドを使用して空のコミットを作成できます。

また、高度な機能(リポジトリ全体のテキスト検索や「Go to Reference(定義へ移動)」など)を有効にするために、指定サイズ以下のリポジトリの内容を自動的にダウンロードする新しい設定が追加されました。remoteHub.experimental.fs.maxAutoDownloadSize設定は、全内容のダウンロードを試みる際にプロンプトが表示されるリポジトリサイズ制限を制御します。デフォルトでは、勝手にダウンロードされないようにmaxAutoDownloadSizeは設定されていません。

Azure Repos

Azure ReposサポートはGitHub Repositories拡張機能から分離され、専用の拡張機能になり、デスクトップにもインストールできるようになりました。

プレリリース拡張機能の採用

Web版VS Codeには、GitHub Pull Request and IssuesGitHub Repositoriesの両方の拡張機能のプレリリースバージョンがバンドルされるようになりました。

PWAとオフラインサポート

Web版VS CodeはPWAモデルを採用し、ホストOSにPWAとしてインストールできるようになりました。その採用のおかげで、オフライン機能の一部を有効にすることも可能になりました。vscode.devまたはinsiders.vscode.devに一度アクセスすれば、オフライン時でもローカルファイルを編集できるようになります。

Install VS Code PWA prompt

拡張機能への貢献

Python

PythonインタープリターQuick Pickの改善

目的のインタープリターを簡単に選択できるように、Python拡張機能が「Select Interpreter(インタープリターの選択)」Quick Pickでインタープリターを型ごとにグループ化しました。

Interpreters grouped in interpreter picker

ステータスバーのアクティブ/選択済みインタープリターを、言語ステータス内の右側に移動する実験も行っています。もし表示されていない場合は、右側のPythonステータスを確認してください。

'conda run'のサポート追加

Anacondaユーザーへのサポートを改善するため、以前エラーの原因となっていた出力をキャプチャしない--no-capture-outputパラメーターを使用して、conda runのサポートを実装しました。この機能は、リンター、テスト、およびフォーマット機能の実行に適用されます。

Windowsで、パラメーターに特殊文字を含むリンティングやテストを実行するとエラーが発生するという既知のバグ(issue #10972)があります。これはconda runが特殊文字を含むパラメーターを読み取る方法によるもので、settings.jsonで指定したコマンドライン引数に影響を与える可能性があります。

Anacondaチームが現在修正に取り組んでおり、間もなくリリースされる予定です。新しいバージョンがリリースされたら、Conda WebサイトでAnacondaのバージョンを更新できます。

スマート選択と折りたたみサポートの改善

Pylance言語サーバーを介して、Pythonコードの選択と折りたたみに改善が加えられました。

キーボードを使用したPythonコードの選択では、選択範囲を定義する際にコードのセマンティック情報が考慮されるため、より少ないキーストロークで済むようになりました。

テーマ: Horizon Extended

折りたたみに関しては、以前はインデントのみで領域が定義されていましたが、複数行文字列などの一部のケースでは理想的ではありませんでした。現在は折りたたみ領域がセマンティック情報を適切に考慮し、#regionコメントもサポートするようになりました。

Jupyter

リモートJupyterサーバー

Jupyter拡張機能では、ローカルとリモートのJupyterサーバーを切り替える際にVS Codeを再読み込みする必要がなくなりました。さらに、カーネルピッカーでローカルカーネルとリモートカーネルの両方がまとめて表示されるようになりました。

Hex Editor

Hex Editorは大幅なアーキテクチャのリファクタリングを受けました。特に、ほとんどの場合、パフォーマンスの問題なしに任意のサイズのファイルを開くことができるようになりました。さらに、レイアウト幅が構成可能になり、Find/Replace実装がより強化されました。今後も継続的な改善が行われる予定です。

リモート開発

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

新しい拡張機能の機能やバグ修正については、Remote Developmentのリリースノートをご覧ください。

GitHub Pull Requests and Issues

プルリクエストやIssueの操作、作成、管理ができるGitHub Pull Requests and Issues拡張機能の開発も続いています。拡張機能の0.36.0リリースの変更履歴でハイライトをご覧ください。

プレビュー機能

ターミナルシェル統合

ターミナルに実験的なシェル統合が導入されました。これにより、以前は不明だったターミナル内での状況をVS Codeが把握できるようになります。"terminal.integrated.enableShellIntegration": true設定を使用して有効にすると、可能であればターミナルプロファイルにシェル統合スクリプトを実行するための引数が注入されます。このスクリプト自体は、主にプロンプトに目に見えないシーケンスを挿入し、プロンプト、コマンド、コマンド出力の場所、各コマンドの現在の作業ディレクトリ(cwd)、および各コマンドの終了コードなどの情報をVS Codeに提供します。

この情報を利用して、既存の機能をさまざまな方法で強化できます。

  • cwd(現在の作業ディレクトリ)を素早く検出 - 以前はmacOSとLinuxでのみ可能で、その情報を得るためにプロセスを起動したりファイルシステムをクエリしたりする必要がありました。現在はWindowsでも動作します。cwdは、リンク検出やターミナルタブ分割時のcwd継承などの機能で使用されます。
  • コマンド追跡機能の改善 - この機能は以前から存在していましたが、macOSでデフォルトのキーバインド(Cmd+Up/Down)があるのみで、Enterが押されたタイミングに基づいて行の場所を推測する単純なアプローチを使用していました。

シェル統合により、以下の新機能が可能になります。

  • 最近のコマンドを実行 - 実行されたコマンドを把握しているため、Quick Pickでそれらを表示して再度実行できるコマンドを公開しました。最近のコマンドがQuick Pickに表示され、現在の作業ディレクトリや実行されてからの経過時間などの情報が含まれています
  • 最近のディレクトリへ移動 - 上記と同様に、過去のディレクトリへの移動も可能にしました。最近のディレクトリが頻度順(降順)でQuick Pickに表示されます
  • cwdに対するリンクサポート - ターミナルバッファー内の各行のcwdが判明したため、アクティブ化された場所のcwdに対するターミナル内のリンクを開くことをサポートできます。以前は、リンクをクリックすると、その名前に一致する結果を含むすべてのフォルダーを表示するQuick Pickが開いていました。現在は、正確なファイル一致が開かれます。vscodeというcwdのターミナルでpackage.jsonが表示されます。ファイル名をクリックするとvscode/package.jsonが開きます。ディレクトリがtemplate-string-converterに変更され、package.jsonが表示されます。ファイル名をクリックするとtemplate-string-converter/package.jsonが開きます。

目標は、機能の信頼性が十分になったらシェル統合をデフォルトでオンにすることです。引数の注入に関しては、可能な限り邪魔にならないようにアプローチしています。例えば、一部のターミナルのようにシェルの初期化スクリプトを自動的に変更するのではなく、プロセスの作成を傍受し、引数を検査し、ターミナルで実行できると確信がある場合にのみシェル統合の引数を注入します。ユーザーによる設定なしで適切に動作させ、既存のシェル設定と干渉しないことを目指しています。

現在サポートされているシェルは、Windowsではpwsh、LinuxとmacOSではpwsh、bash、zshです。

前述の通り、これは実験的な機能であり、少し粗削りな部分があり、既知の問題もあります。

  • $PS2行継続はまだサポートされていません。ただし、pwshでの行継続は動作します。
  • 右プロンプトはまだサポートされていません。
  • zshスクリプトは、時々アクティブにならないという既知の問題があります。
  • リモートVS Codeウィンドウのサポートは限定的です。

エクスプローラーのファイルネスト

エクスプローラーに、同一ディレクトリ内のファイルを論理的にネストされたレイアウトで表示する実験的なサポートが追加されました。これは、関連するファイルを視覚的にグループ化し、ファイルを「ルート」ファイルに折りたたんで雑然とした状態を軽減するのに役立ちます。この動作を制御するためにいくつかの新しい設定が追加されました。

  • explorer.experimental.fileNesting.enabled: ファイルネストが有効かどうかを制御します。
  • explorer.experimental.fileNesting.expand: ファイルのネストがデフォルトで展開されるかどうかを制御します。
  • explorer.experimental.fileNesting.patterns: ファイルがどのようにネストされるかを制御します。

例えば、多くのリポジトリでは、.tsファイルが派生した.js.d.ts、および/または.js.mapファイルの隣に配置されています。files.excludeを使って派生ファイルを完全に隠すことは長い間可能でしたが、ネストを使うことで、派生ファイルに素早くアクセスできるようになりました。

以下は、エクスプローラーがデフォルトのexplorer.experimental.fileNesting.patterns設定を使用して、.jsおよび.js.mapファイルをネストし、対応する.tsファイルが展開されたときに表示する様子です。

Explorer with some collapsed and expanded nests

テーマ: GitHub Light

拡張機能の作成

言語のデフォルトアイコン

言語コントリビューターは、言語のアイコンを定義できます。

{
  "contributes": {
    "languages": [
      {
        "id": "latex",
        // ...
        "icon": {
          "light": "./icons/latex-light.png",
          "dark": "./icons/latex-dark.png"
        }
      }
  ]

このアイコンは、現在のファイルアイコンテーマがその言語に対して一般的なファイルアイコンしか持っていない場合に表示されます。

また、ファイルアイコンを表示しないMinimalNoneのようなファイルアイコンテーマは、言語アイコンを使用しません。ファイルアイコンテーマが拡張子やファイル名に対するアイコンを持っている場合は、それらが優先されます。

ファイルアイコンテーマは、テーマファイルでshowLanguageModeIcons: true|falseを定義することで、新しい動作をカスタマイズできます。

  • showLanguageModeIcons: true は、テーマがファイルアイコンを指定していない場合でも、デフォルトの言語アイコンを表示します。
  • showLanguageModeIcons: false は、デフォルトの言語アイコンが使用されるのを防ぎます。

QuickPickItemのセパレーター

拡張機能作成者は、Quick Pickにセパレーターを追加できるようになりました。これはアイテムをグループ化したり、アイテムの間に少しスペースを追加したりするのに便利です。

Quick Pick separators

既存のQuick Pickにセパレーターを追加するには、アイテムのリストに新しいQuickPickItemを追加し、QuickPickItemkindプロパティをQuickPickItemKind.Separatorに設定します。

上記の例では、アイテムのリストに以下のオブジェクトを追加します。

{
    label: 'APIs',
    kind: QuickPickItemKind.Separator
}

kindプロパティを指定しない場合、またはQuickPickItemKind.Defaultに設定した場合は、アイテムは通常のQuickPickItemとして扱われます。

vscode.workspace.createFileSystemWatcherが任意のパスをサポート

既存のvscode.workspace.createFileSystemWatcher APIが改善され、ワークスペース外であってもファイル監視のために任意のファイルまたはフォルダーパスを渡せるようになりました。以前は、ファイル監視はワークスペースで開かれているフォルダーに限定されていました。

メソッドに渡すglobパターンに応じて、監視は再帰的(例:**/*.js)または非再帰的(*.js)になります。再帰的な監視はより多くのリソースを必要とするため、可能な場合は単純なglobパターンを使用することをお勧めします。

// Watch a folder non-recursively
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.Uri.file(<path to folder outside workspace>), '*.js'));

// Watch the active text editor file
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.window.activeTextEditor.document.uri, '*'));

注: この変更の一環として、既存のファイル監視に対して動作の変更を行いました。globパターンのみで指示されたファイル監視(例:vscode.workspace.createFileSystemWatcher('**'))は、ワークスペース外で変更されたファイルのイベントを受信しなくなります。ワークスペース内にあるパスからのファイルイベントのみを受信します。ユーザーがワークスペースを開いていない場合、このメソッドを介してイベントは配信されなくなります。これは、拡張機能がワークスペース外からの予期しないイベントを受け取らないようにするためです。

vscode.TerminalLocation

新しいTerminalLocation APIを使用して、拡張機能ターミナルがどこに作成されるかを指定できます。

これにより、parentTerminalを提供し、エディター領域とパネルの間で選択するなど、分割ターミナルを作成できます。

onWillイベントのキャンセル用トークン

VS Code APIは、onWillRenameFilesのようなファイル操作に参加するためのイベントを公開しています。この参加は長時間に及ぶ可能性があるため、ユーザーはそれをキャンセルできます。今回のリリースで、ユーザー側でのキャンセルを、対応するイベントのキャンセル用トークン(例:FileWillRenameEvent#token)を介して拡張機能が観測できるようになりました。これにより、拡張機能もコストのかかる低レベルな操作をキャンセルできるようになります。

Git拡張機能API

  • ファイルをステージングする機能を可能にする新しいRepository.addメソッドが追加されました。
  • タグを作成および削除する機能を可能にするRepository.tagおよびRepository.deleteTagメソッドが追加されました。

onTaskTypeアクティベーションイベント

タスクを提供する拡張機能は、新しいonTaskType:fooアクティベーションイベントを使用することで、不必要なアクティベーションを制限できます。これは、onCommand:workbench.action.tasks.runTaskでのアクティベーションよりも改善されています。なぜなら、workbench.action.tasks.runTaskは、タスク提供拡張機能に対して通常過剰にアクティブすぎるためです。

デバッガー拡張機能の作成

VS Codeがデバッグアダプタープロトコルのメモリ関連機能を実装

今回のリリースで、VS Codeはデバッグアダプタープロトコルの以下のメモリ関連機能をサポートすることで、バイナリデータの表示と編集をサポートし始めました。

  • VS CodeはDAP変数のmemoryReference属性を尊重し、クライアント機能supportsMemoryReferencesをデバッグアダプターに渡すことでこれを告知します。
  • VS CodeがデバッグアダプターからsupportsReadMemoryRequest機能を受け取ると、バイナリデータを表示するためのUIを有効にし、データを取得するためにreadMemoryリクエストを発行します。
  • VS CodeがデバッグアダプターからsupportsWriteMemoryRequest機能を受け取ると、バイナリデータを編集するためのUIを有効にし、データを保存するためにwriteMemoryリクエストを発行します。
  • VS Codeはmemoryイベントを処理し、クライアント機能supportsMemoryEventをデバッグアダプターに渡すことでこれを告知します。

Language Server Protocol

対応するnpmモジュールとともに、Language Server Protocolの次期バージョンが公開されました。このバージョンにはノートブックドキュメントの提案された実装が含まれています。仕様部分はこちらで読むことができます

提案中の拡張機能API

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

  1. 試したい提案を見つけて、その名前をpackage.json#enabledApiProposalsに追加してください。
  2. 最新のvscode-dtsを使用して、vscode-dts devを実行してください。これにより、対応するd.tsファイルがワークスペースにダウンロードされます。
  3. これで、提案されたAPIを使用してプログラムを作成できます。

提案されたAPIを使用した拡張機能は発行できません。次回のリリースで互換性のない変更が含まれる可能性があり、既存の拡張機能を壊すことは望ましくありません。

ターミナルの永続性を無効にする

ターミナルを作成する際、TerminalOptionsまたはExtensionTerminalOptionsdisablePersistenceを設定することで、再起動や再読み込み時のターミナルの永続性をオプトアウトできます。

export interface TerminalOptions {
  disablePersistence?: boolean;
}

インレイヒントAPI

インレイヒントAPIに関心のあるすべての方へ。APIはほぼ完成しており、インタラクティブなラベルパーツのサポートが追加されました。これにより、ソースコードの場所をヒントにバインドでき、それがコードナビゲーションのような機能を可能にします。また、コマンドもサポートされました。この提案の最新の状態と開発については、vscode.proposed.inlayHints.d.tsを参照してください。

言語ステータスAPI

言語ステータスアイテムAPIは最終化を予定しています。ぜひ試していただき、vscode.proposed.languageStatus.d.tsへフィードバックをお寄せください。

テストの提案

テスト用の「リフレッシュ」ハンドラーを実装する公式な方法を提案しています。vscode.proposed.testRefresh.d.tsをチェックしてください。これにより、拡張機能はVS Codeの標準的な「リフレッシュ」ボタンの背後に統一され、独自の実装を回避できます。

さらに、TestItemvscode.proposed.testSortText.d.tssortText属性を持つことを提案します。

インライン補完: 自動括弧補完

拡張機能がインライン補完アイテムを提供する際、completeBracketPairsプロパティをtrueに設定できます。設定されている場合、VS Codeはインライン補完がユーザーに表示される前に、補完テキスト内の無効な括弧を閉じるか削除することで修復を試みます。

ツリーのドラッグ&ドロップ提案がエディターへのドラッグをサポート

ツリーのドラッグ&ドロップ提案は最終化の準備がほぼ整っており、TreeDragAndDropController"resourceurls" MIMEタイプをサポートしている場合に、ツリービューからエディターへのドラッグをサポートするようになりました。詳細はissue #141418で利用可能です。ぜひ試していただき、vscode.proposed.treeViewDragAndDrop.d.tsへフィードバックをお寄せください。

コメントタイムスタンプ

コメントAPIのCommentに新しいtimestampプロパティが追加されました。APIとあわせて、コメントのタイムスタンプを表示する方法を制御する新しい設定comments.useRelativeTimeも追加されました。ぜひ試していただき、vscode.proposed.commentTimestamp.d.tsへフィードバックをお寄せください。

エンジニアリング

vscode-bisectツール

リリースされたVS Code Insidersバージョン(Webおよびデスクトップ)を二分探索するための新しいツールが利用可能になり、問題の診断に役立ちます。

npx vscode-bisect

git bisectと同様に、vscode-bisectは過去にリリースされたInsidersビルドの範囲を起動し、そのビルドで問題が再現するかどうかを尋ねます。最終的な結果は、問題を引き起こしたコミットの範囲です。インスタンスはメインの開発環境に影響を与えないよう、ユーザーデータ用に専用の新しいフォルダーを使用します。

ソースからCode Web & Serverを実行

Web版VS CodeおよびVS Code Serverをソースから実行するためのスクリプトがscriptsフォルダーに移動されました。

  • ./scripts/code-web.sh|bat はCode for the Web(別名「serverless」)をソースから起動し、ブラウザで開きます。その他のオプションについては--helpを使用してください。
  • ./scripts/code-server.sh|bat はVS Code Serverをソースから起動します。Web UIをブラウザで開くには--launchを追加してください。その他のオプションについては--helpを使用してください。
  • ./scripts/test-web-integration.sh|bat はリモートWebテスト用です。
  • ./scripts/test-remote-integration.sh|bat はリモートテスト用です。

拡張機能

このマイルストーンでは、VS Codeがサービスに対して行うクエリの数を最小化することで、Marketplaceとのやり取りを改善しました。

注目すべき修正

  • 91286 クライアント側での設定同期アクティビティのスロットリング
  • 117648 拡張機能sassでemmetを使って「gtc」を展開した際の結果が奇妙なものになる。
  • 134466 存在しないデバッガー構成
  • 135677 UI設定リンクにカーソルを合わせると先頭に#が表示される
  • 138072 最近開いたワークスペースをグローバルストレージに保存する
  • 138805 大きなバイナリファイルを開くと全内容を読み取る
  • 138850 ディスク上のファイル変更後、開いているエディターが空になる可能性がある
  • 139880 デバッグ: F5キーでファイルの保存を求められる
  • 140003 別のワークスペースフォルダーにある起動構成からタスクを参照できない
  • 140129 settings.jsonファイルをダブルクリックすると毎回新しいタブが開く
  • 140560 VS Code Stop Debugging APIの問題
  • 140967 Comment.bodyがプレーン文字列でもMarkdownとしてレンダリングされる

ありがとうございます

最後になりましたが、VS Code への貢献者の方々に心から感謝いたします。

Web 拡張機能

コードをWeb拡張機能として実行する拡張機能を作成した拡張機能作成者(以下リストは2021年12月7日から2022年1月31日の間)

イシュートラッキング

イシュートラッキングへの貢献

プルリクエスト

vscodeへの貢献

vscode-css-languageserviceへの貢献

vscode-eslint への貢献

vscode-extension-samples への貢献

vscode-html-languageservice への貢献

vscode-js-debug への貢献

  • @zkx5xkt: 修正: DebugSessionTunnels におけるリモート/ローカルポートの誤用 PR #1163

vscode-pull-request-github への貢献

vscode-textmateへの貢献

vscode-vsceへの貢献

debug-adapter-protocolへの貢献

monaco-editor への貢献

node-jsonc-parser への貢献

  • @Marcono1234
    • README の API セクションを更新 PR #61
    • ビジター関数に JSON パスサプライヤーパラメーターを追加 PR #62
  • @P0lip (Jakub Rożek): findNodeAtLocation が不完全なプロパティペアを処理できない問題を修正 PR #44

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