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

2022年7月 (バージョン 1.70)

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

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

アップデート 1.70.3: このアップデートはWindows 7ユーザーのみが利用でき、Windows 7をサポートする最後のリリースとなります。

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


Visual Studio Codeの2022年7月リリースへようこそ。このバージョンには、気に入っていただけると嬉しい多くのアップデートが含まれており、主なハイライトは次のとおりです。

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

リリースパーティを視聴: VS Codeチームが新機能の一部について語るのを聞いてください。イベントの録画は、YouTubeチャンネルでご覧いただけます。

Insiders: 新機能をいち早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。

Workbench

タイトルバーのカスタマイズがより簡単に

カスタムタイトルバー(Windows、macOS、およびウェブのデフォルト)を使用している方は、タイトルバーにインタラクティブなコンテンツが追加されていることに気づいたかもしれません。これらの要素を個別に非表示にする設定はすでにありますが、タイトルバーを右クリックしてコンテキストメニューにアクセスすると、メニューバー(macOSデスクトップでは表示されません)、コマンドセンター、およびレイアウトコントロールの表示/非表示を切り替えられるようになりました。

title bar context menu

システムコンテキストメニューを期待するWindowsユーザーの場合、ウィンドウの左上隅にあるVS Codeアイコンを右クリックするか、Alt+Spaceを押すことでメニューをトリガーできます。Alt+Spaceでトリガーする場合、マウスの位置によって動作が決定されるため、カスタムメニューがタイトルバーの上に表示されている場合はそれが表示されます。

system context menu

Linuxユーザーの場合、issue #156397により、タイトルバーの空白部分を右クリックしてもコンテキストメニューは開きません。非表示にしたいタイトルバーの項目のいずれかを右クリックする必要があります。

メニューバーの折りたたみの改善

コマンドセンターの追加に伴い、スペースを確保するためにメニューバーをハンバーガーメニューに縮小しようとしました。ユーザーからのフィードバックを受けて、メニューのほとんどが折りたたまれるまでは以前のメニューバーの折りたたみ動作に戻し、その後でハンバーガーメニューに切り替えるように変更しました。

macOSのタイトルバーズームのアクセシビリティ

コマンドセンターエクスペリエンスの改善の一環として、macOSのタイトルバーにインタラクティブなコンポーネントがある場合、タイトルバーはUIの他の部分と一緒にズームするようになり、アクセシビリティが向上しました。

選択範囲の折りたたみ

コマンド選択範囲から手動折りたたみ範囲を作成 (⌘K ⌘, (Windows, Linux Ctrl+K Ctrl+,)) は、現在選択されている行から折りたたみ範囲を作成し、それを折りたたんで表示します。この範囲は手動折りたたみ範囲と呼ばれ、折りたたみプロバイダーによって計算された範囲の上に適用されます。

手動折りたたみ範囲は、コマンド手動折りたたみ範囲を削除 (⌘K ⌘. (Windows, Linux Ctrl+K Ctrl+.)) で再度削除できます。

手動折りたたみ範囲は、プログラミング言語の折りたたみサポートがない場合に特に便利です。

折りたたまれた範囲の保持

VS Codeは、折りたたみ範囲が折りたたみプロバイダーによって計算された範囲の一部でなくなった場合でも、折りたたみ範囲を保持するようになりました。典型的な例としては、ユーザーがファイルをコメントアウトしたり、文字列リテラルを開始したり、構文エラーを作成したりして、すべての範囲を作成できなくなった場合などです。このような折りたたまれた範囲は「復元された」範囲になります。これらは、折りたたみプロバイダーが同じ場所に範囲を再提供したとき、または手動折りたたみ範囲を削除コマンドを使用することで削除されます。

折りたたみコントロールの非表示

ガターの折りたたみコントロールは、設定"editor.showFoldingControls": "never"で非表示にできるようになりました。折りたたみコマンドとショートカットを使用すれば、引き続き折りたたみ範囲を展開したり折りたたんだりできます。

3方向マージエディターの改善

新しい3方向マージエディターの改良を続け、このリリースでデフォルトで有効にしました。マージエディターは、ソース管理ビューで競合しているファイルをクリックすると開くことができます。

ハイライトには、片側のすべての変更を受け入れる新しいコマンド、改善されたコンテキストメニュー、強化された差分色、および競合する変更と競合しない変更に対するより大きな強調が含まれます。

また、マージ競合の精度を向上させるために、代替の差分アルゴリズムの検討も開始しました。差分エディターまたはマージエディターで最適な変更のハイライト表示や配置が見られない場合は、GitHubの課題トラッカーにこれらのケースを記録したいと思います!

コマンドラインオプションマージ

コマンドラインオプションを使用して、VS Codeでマージエディターを起動できるようになりました。

-m --merge <path1> <path2> <base> <result> Perform a three-way merge by providing paths for two modified versions of a file, the common origin of both modified versions, and the output file to save merge results.

これにより、例えば.gitconfigで設定すれば、GitのマージツールとしてVS Codeを使用できます。

[merge]
  tool = code
[mergetool "code"]
  cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED

検索ファイルデコレーション

検索ビューの検索結果には、ファイルの「問題」と「ソース管理情報」を表すファイルデコレーションと色が右側に表示されるようになりました。これは、ファイルエクスプローラーですでに表示されているファイルデコレーションに似ています。

Search file decorations

検索の複数選択

検索ビューは複数選択もサポートするようになりました。選択範囲内の1つの結果に対して実行するすべてのアクション(例えば、破棄や置換)は、他の選択された項目にも実行されます。

ツリー検索コントロール

ファイルエクスプローラーなどのツリービューが、検索コントロールをサポートするようになりました。ツリー内で⌥⌘F (Windows, Linux Ctrl+Alt+F)を押すと、検索コントロールがポップアップ表示されます。検索コントロールを使用して、一致する要素をハイライト表示したり、フィルターボタンを切り替えて検索語句に一致しないすべての要素を非表示にしたりできます。

注: ファイルエクスプローラーにフォーカスがある状態で⌥⌘F (Windows, Linux Ctrl+Alt+F)を呼び出すと、エディターで検索コントロールが開くことに慣れている場合は、それに応じてキーバインディングを構成できます。

{
  "key": "cmd+f", // "ctrl+f" on Windows/Linux
  "command": "-list.find",
  "when": "listFocus && listSupportsFind"
}

「新規ファイル」による任意のファイル作成

ファイル > 新規ファイル... (またはようこそページの新規ファイル...リンク) のエクスペリエンスが改善され、任意のファイル作成が可能になりました。クイック入力ボックスにファイル名を入力して、ディスク上にファイルを作成できます。

A input box with test.js inputted into it and the entry New File(test.js) selected

ターミナル

シェル統合がデフォルトで有効に

前回のリリースでプレビューから移行したシェル統合の自動注入が、デフォルトで有効になりました。サポートされているシェル設定(ほとんどのbash/zsh/pwsh構成)では、何も変更せずにすべて機能し、コマンドデコレーションが表示されるはずです。

When shell integration is enabled, blue, red and grey circles appear next to commands run in the terminal

テーマ: Sapphire Theme

: Windowsでは、シェル統合サポートのためにPowerShell 7 (pwsh) が必要です。https://aka.ms/PSWindowsからインストールできます。

シェル統合機能が自動的に有効にならない場合は、手動インストールを設定する必要があります。これは今回のリリースで簡素化されています

terminal.integrated.shellIntegration.enabled設定がtrueに設定されている場合、自動注入が有効になります。この機能を無効にするには、settings.jsonファイルに以下を追加してください。

"terminal.integrated.shellIntegration.enabled": "false"

これにより、VS Codeのシェル統合注入のみが無効になります。無効になっていても、VS Codeが認識する他のターミナルでシェル統合が有効になっている場合は、それらは引き続き検出されます。コマンドやスクロールバーのデコレーションが気に入らない場合は、それらの表示のみを無効にできます。その場合でも、シェル統合がもたらす追加機能は活用できます。

シェル統合の手動インストールを簡素化

以前の手動インストールは複数のステップを要し、プラットフォームおよびシェル固有でした。新しい手動インストールでは、code CLIを使用してシェル統合スクリプトを取得し、クロスプラットフォームでリモートウィンドウに接続されている場合でも機能します。つまり、dotfilesに同期することができ、そのまま機能するはずです。

# Manual install on bash
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path bash)"

他のシェルへのシェル統合のインストール方法については、ターミナルシェル統合で詳しく読むことができます。

その他のシェル統合設定オプション

新しい設定terminal.integrated.shellIntegration.decorationsEnabledを使用すると、コマンドのデコレーションをgutteroverviewRuler、またはそのどちらでもない場所に表示できます。簡単にアクセスするには、デコレーションをクリックしたときのコンテキストメニューのコマンドデコレーションの設定表示の切り替えを選択してオプションのドロップダウンを表示)からこの設定を変更できます。

The command decoration context menu contains the new option Configure Command Decorations

ドロップダウンから、デフォルト、成功、またはエラーのアイコンを設定することもできます。

デフォルトの色とアイコンのタブ設定

terminal.integrated.tabs.defaultIconterminal.integrated.tabs.defaultColorを使って、フォルダごとにデフォルトのアイコンとターミナルタブの色を設定できるようになりました。

PowerShellのキーバインディングの拡張

シェル統合のおかげで、Ctrl+Spaceなどの追加のPowerShellキーバインディングが利用できるようになりました。これらはVTエンコーディングの欠如により以前は不可能でした。pwshでシェル統合が機能していれば、以下のキーバインディングが機能するはずです。

  • Ctrl+Space - WindowsでのみMenuCompleteがデフォルトです。
  • Alt+Space - SetMarkがデフォルトです。
  • Shift+Enter - AddLineがデフォルトです。
  • Shift+End - SelectLineがデフォルトです。
  • Shift+Home - SelectBackwardsLineがデフォルトです。

これは、これらのキーバインディングが通常利用できないLinux/macOSを含むすべてのプラットフォームに適用されます。デフォルトは、Set-PSReadLineKeyHandlerを使用してpwshプロファイルでいつでもリセットできます。他に期待するキーバインディングがある場合は、お知らせください

シェル統合が有効な場合、履歴コマンドの実行は、シェルの逆検索(Ctrl+R)のクロスシェル代替となることを目指しています。このコマンドをトリガーする際にデフォルトとなる新しい連続検索モードがあります。これはほとんどのシェルでのCtrl+Rのように動作し、ファジー検索に切り替えるオプションも用意されています。

新しいinTerminalRunCommandPickerコンテキストキーが利用可能になり、Ctrl+Rのようなキーバインディングを設定して次のマッチに移動できるようになりました。例えば、以下のキーバインディングは、シェルの逆検索のほぼ完全な代替となり、古い動作へのフォールバックとしてCtrl+Alt+Rが用意されています。

{ "key": "ctrl+r",     "command": "workbench.action.terminal.runRecentCommand", "when": "terminalFocus" },
{ "key": "ctrl+alt+r", "command": "workbench.action.terminal.sendSequence", "args": { "text": "\u0012"/*^R*/ }, "when": "terminalFocus" },
{ "key": "ctrl+r",     "command": "workbench.action.quickOpenNavigateNextInViewPicker", "when": "inQuickOpen && inTerminalRunCommandPicker" },
{ "key": "ctrl+c",     "command": "workbench.action.closeQuickOpen", "when": "inQuickOpen && inTerminalRunCommandPicker" },

複数行コマンドは、必要に応じて改行記号を表示するようになり、また括弧付きペーストモードを使用するようになりました。これは、サポートするシェルに対しては、それらが貼り付けられたかのように扱われることを意味します。通常、これはそれらが個別に実行されるのではなく、すべて同じプロンプトに追加されることを意味します。

Run recent command now shows the "Return Symbol" Unicode character (⏎, U+23CE) to visualize new lines

その他のシェル統合の改善

シェル統合のその他の小さな改善点です。

  • コマンドナビゲーションの視覚的フィードバックが改善され、「フォーカスボーダー」が短時間表示された後、ガターに永続的な長方形が保持され、バッファ内の位置をハイライトするのに役立ちます。

    A solid rectangle the color of your theme's focus color now appears to the left of the command being navigated to

  • 新しいworkbench.action.terminal.copyLastCommandコマンドが利用可能になり、キーバインディングで最後のコマンドの出力をコピーできるようになりました(Ctrl/Cmd+Shift+UpCtrl/Cmd+CEscapeCtrl/Cmd+Endのショートカット)。

  • Bashシェル統合

    • より多くの$PROMPT_COMMAND形式がサポートされています。
    • bash-preexecヘルパーがすでに使用されている場合でも、シェル統合はさらにうまく機能するはずです。

レンダリングの改善

GPUアクセラレーションが有効な場合、ターミナルのレンダリングにいくつかの改善が加えられました。

  • 半円形のPowerlineシンボルがカスタムレンダリングされるようになりました。前回のリリースのアローシンボルと同様に、これらは隣接するセルとシームレスに結合し、行の高さが使用されている場合でもセルの高さまで拡張されます。

    Semi-circle Powerline symbols now render without needing to configure a font

  • 角丸のボックス描画文字(, , , )が、より滑らかな曲線を使用するようになりました。

    These round corner symbols now render as perfect 1/4 circles

  • 背景色が変更された際のグリフのクリッピングが改善されました。これはnpmが警告を出力する際によく見られました。

    Wide characters like W would sometimes escape the background of a cell. For example, when the background of the text was yellow, the W in "WARN" could show unexpected yellow pixels in the top left. The After image shows that it is now fixed

  • 上記のクリッピングの問題と同様に、一部のグリフのアンチエイリアシングが他の文字と重なり、視覚を劣化させる問題がありました。この問題は、上記のような背景の例を使用すると最も簡単に説明できます。`Work`の`k`のピクセルも、他の方向でセルの境界からはみ出す可能性がありました。このピクセルは、背景とほぼ同じ色であるために除去されるため、グリフにはまったく表示されなくなります。

    A pixel in  could overlap with the cell to the right, in this case that pixel may not be rendered at all if the difference in color and the background is small

ソース管理

アクションボタンの改善

ユーザーからのフィードバックに基づき、ソース管理アクションボタンの磨き上げを続けました。

  • 変更を同期アクションボタンは、ローカルブランチがリモートトラッキングブランチよりも先行または遅れていることが高度に確実な場合にのみ表示されます。
  • コミットアクションボタンは、変更されたリソースのリストに基づいてのみ有効になり、スマートコミット設定が考慮されます。
    • git.enableSmartCommit
    • git.suggestSmartCommit
    • git.smartCommitChanges
  • コミットアクションボタンのアイコンがブランチ保護設定に基づいて更新されました。
    • git.branchProtection
    • git.branchProtectionPrompt

リベース競合解決の改善

このマイルストーンでは、マージ競合を解決する際のリベースフローにおけるいくつかの小さな問題に対処しました。ユーザーは、すべてのマージ競合を解決した後、ソース管理ビューのコミットボタンを使用してリベース操作を続行できるようになりました。

コミット入力フィールドのスペルチェック

このマイルストーンでは、コミット入力フィールドでのスペルチェックをサポートするために必要なすべての拡張機能APIが利用可能であることを確認しました。人気のスペルチェック拡張機能の作者に連絡を取り、コミット説明テキストのスペルチェックを提供するために拡張機能を更新する方法を示すプルリクエストを提出しました。

デバッグ

JavaScriptデバッグ

JavaScript/TypeScriptプログラムをデバッグするための起動構成を作成するとき、"console": "integratedTerminal"を設定することで、そのプログラムを(プロセスを直接起動するのではなく)ターミナルで実行できます。数ヶ月前、launch.json構成の"args"がシェルに対して部分的にエスケープされているが、完全にエスケープされていないことに気づきました。これは、プログラムに引数を渡そうとすると、誤ってシェルで特殊な動作がトリガーされる可能性があることを意味していました。これを修正した後、シェルにとって特別な意味を持つ文字を含む引数を設定することが有用であり、一部のユーザーがこの動作に依存していることに気づきました。

私たちは正しい修正について議論し、この動作はオプトインであるべきであり、Debug Adapter Protocol (DAP) の変更が必要であると決定しました。私たちはDAPにこの変更を加え、VS Codeとjs-debugで実装しました。他のデバッグアダプターも間もなくそれに続くはずです。

node起動構成で新しい動作を使用する方法は次のとおりです

{
    "type": "node",
    "console": "integratedTerminal",
    ...

    // If you pass args as a single string, the characters will not be escaped for the terminal,
    // so the command in backticks will be evaluated, and output will be redirected to "outfile".
    // The user is responsible for knowing the type of shell that this will be run in,
    // and doing any escaping necessary.
    "args": "`echo hello` > outfile",

    // If you pass args as an array, the characters will be escaped for the terminal,
    // so that the program receives them verbatim.
    "args": ["`echo hello` > outfile"]
}

デバッグセッションのピッカー

デバッグ中に、コマンドパレットでデバッグ: デバッグセッションの選択を実行できるようになりました。これにより、アクティブなデバッグセッションのピッカーが表示され、個々のデバッグセッションを検索およびフィルタリングできます。各ピッカー項目の説明には、該当する場合、それを生成したセッションが表示されます。

ピッカーで項目を選択すると、コールスタックビューでデバッグセッションにフォーカスが当たります。デバッグアクション(例: 一時停止、ステップ、再起動、停止)は、フォーカスが当たっているデバッグセッションに対して実行されます。セッションを選択すると、そのセッションのデバッグコンソールも表示されます。

タスク

「タスクの実行」コマンドのフィルターサポート

タスク: タスクの実行 (workbench.action.tasks.runTask) アクションは、タスク名とタイプによるフィルタリングをサポートし、タスクを選択して実行するためのより簡潔で構成可能な方法を提供します。

{
  "key": "ctrl+h",
  "command": "workbench.action.tasks.runTask",
  "args": {
    "task": "VS Code - Build",
    "type": "npm"
  }
}

自動タスクフローの改善

信頼済みワークスペース機能により、VS Codeは自動タスクの実行フローを簡素化できます。デフォルトでは、フォルダが信頼されている場合、自動タスクが実行され、それ以外の場合はフォルダごとに一度プロンプトが表示されます。この動作は、自動タスクを実行する前に常に(on)または決して(off)プロンプトを表示するかをtask.allowAutomaticTasks設定(デフォルトauto)で構成できます。

言語

JSON整形時の改行保持

JSONドキュメントで1行を整形する際に、最初の行の位置を保持できるようになりました。例えば、1行に値を含む配列は、整形後もそれらの値を同じ行に保持します。JSONファイル内の余分な改行(newlines)も保持されます。この機能を有効にするには、設定エディターでJSON > フォーマット: 行を保持オプションを設定します。

ノートブック

最も最近失敗したセルに移動

最近実行したセルが失敗した場合、そのセルにジャンプするボタンが追加されました。同じ操作を行うには、ノートブック: 最も最近失敗したセルに移動コマンドを実行することもできます。

これは、複数のセルをまとめて実行し、どのセルが失敗してグループの実行を停止したかを知りたい場合に役立ちます。

ノートブックMarkdownプレビューの添付ファイルレンダリング

Jupyterノートブック内に埋め込まれたbase64画像をレンダリングできるようになりました。

Jupyterノートブックに貼り付けられ、![image alt-text](attachment:image.png)を介して参照される画像は、VS Codeノートブック内で意図通りにレンダリングされるようになります。

以下のMarkdownソースコード

Notebook Markdown cell source code with image link

以下のようにレンダリングされます。

Notebool Markdown cell preview with attachment rendered

共有サブメニューのvscode.devリンクをコピーコマンドがノートブックリンクをサポートするようになりました。

Web 用 VS Code

表示言語の設定

拡張機能ビューの言語パック拡張機能で利用可能な表示言語の設定ボタンを使用して、ブラウザの表示言語を設定できるようになりました。

Set Display Language button on a language pack in the Extensions view

設定後、現在設定されている言語パック拡張機能の表示言語をクリアボタンを使用して表示言語をクリアできます。

Clear Display Language button on the current language pack in the Extensions view

拡張機能への貢献

Python

開始エクスペリエンス

Python拡張機能のウォークスルーは、必要に応じてPythonのインストールと選択にスムーズにユーザーを移行させます。Pythonがインストールされていない場合、Microsoft Storeまたは適切なウォークスルータイルが開き、ユーザーは表示された指示を自動実行できます。インタープリターに関連するプロンプトは、ユーザーアクションにインタープリターが必要な場合にのみ表示され、起動時には表示されません。また、UIプロンプトはエラーと提案された変更についてより正確になるように改善されました。

Python in-product Get started walkthrough

ステータスバーのインタープリター情報

新しい設定python.interpreter.infoVisibilityが追加され、選択されたインタープリターに関する情報がステータスバーにいつ表示されるかを制御します。デフォルトでは、Python関連ファイルが開かれている場合にのみインタープリター情報が表示されます(onPythonRelated)。開かれているファイルに関係なく選択されたインタープリターが表示される以前の動作に戻すには、alwaysに設定できます。選択されたインタープリターが無効な状況を示す警告ステータスが追加されます。

Interpreter information in the Status bar

自動デバッグ構成

Python拡張機能は、現在のプロジェクトを分析し、追加の修正を必要としないデバッグ構成を提供する自動デバッグ構成をサポートするようになりました。

この拡張機能は、Django、Flask、FastApiプロジェクト、およびシンプルなPythonファイルを認識します。

自動デバッグ構成最近の改善点について、詳しく学ぶことができます。

実験的な拡張機能: WWBD

Python環境ワークフローのアイデアのためのサンドボックスとして機能するWWBDという新しい実験的なPython拡張機能があります。現時点では、新しい仮想環境のセットアップをユーザーが1つのコマンドで助けることができるかどうかを確認するために、仮想環境用の環境作成コマンドがあります(詳細とその他の拡張機能についてはWWBD拡張機能のページを参照)。condaサポートを含む、検討中の他のアイデアについては、プロジェクトリポジトリのアイデアカテゴリを参照してください。

Jupyter

プロット画像をクリップボードにコピー

Jupyter拡張機能で、セルの出力にあるプロットをクリップボードにコピーできるようになりました。現在、PNG出力のみがサポートされているため、正しいプレゼンテーションが選択されていることを確認してください。

Select image/png when copying plot to the clipboard

正しい表示タイプを設定したら、右上隅にある「クリップボードにコピー」ボタンを選択します。

Copy plot button

Web拡張機能

以下の機能がJupyter拡張機能のWeb版に移植されました。

  • プロットビューア
  • データフレームビューア

機能を試してみたい場合は、ローカルマシンからJupyterを起動してください。

jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net

その後、vscode.dev内からJupyter: 接続するJupyterサーバーを指定コマンドを使用してそれに接続します。

詳細(およびコメント)については、このディスカッション項目を参照してください。

インタラクティブウィンドウの復元

interactiveWindow.restore設定をオンにすることで、インタラクティブウィンドウのセッションをVS Codeウィンドウのリロード後も復元できるようになりました。

制限事項: Rawカーネルの状態はウィンドウのリロード後も持続しません(詳細についてはこのディスカッション項目を参照してください)。リモートJupyterサーバーを使用している場合、インタラクティブウィンドウはリロード時に以前のカーネルセッションに接続されます。

.envファイルからの環境変数の読み込み

.envファイルの変更検出を含め、.envファイルからの環境変数の読み込みに関して多くの修正が行われました。Pythonカーネルは、python.envFile設定で定義されたファイルから環境変数を読み込むようになりました。

GitHubプルリクエストと課題

プルリクエストと課題の作業、作成、管理を可能にするGitHubプルリクエストと課題拡張機能にさらに進展がありました。このリリースのハイライトは次のとおりです。

  • 閲覧者の最後のレビューからのプルリクエストの変更のみを表示する新しいボタンがあります。
  • ソース管理ビューの新しいコミットとプルリクエストの作成アクションにより、Gitコミットを実行し、1ステップでPRの作成ビューに移動できます。
  • githubPullRequests.pullRequestDescription設定を使用して、PR説明のソーステキストを構成できます。

その他のハイライトについては、拡張機能の0.48.0リリース向け変更履歴を確認してください。

リモート開発

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

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

プレビュー機能

エディターのスティッキースクロール

スクロール中にユーザーがどのスコープにいるかを示すUIを表示できるようになりました。「スティッキースクロール」UIは、エディターの上部がどのクラス/インターフェース/名前空間/関数/メソッド/コンストラクタにあるかを示し、ドキュメント内の位置を把握するのに役立ちます。editor.experimental.stickyScroll.enabled設定でスティッキースクロールを有効にします。

<video src="/assets/updates/1_70/sticky-scroll.mp4" autoplay loop controls muted title=""Sticky scroll" showing the source code scope for a TypeScript file">

TypeScript 4.8のサポート

このアップデートには、近日リリース予定のTypeScript 4.8のサポートが含まれています。TypeScriptチームが現在取り組んでいることの詳細は、TypeScript 4.8イテレーション計画を参照してください。

TypeScript 4.8のナイトリービルドの使用を開始するには、TypeScript Nightly拡張機能をインストールしてください。

設定プロファイル

この数ヶ月間、コミュニティから最も要望の多かった機能の一つであるVS Codeの設定プロファイルのサポートに取り組んできました。この機能は、Insidersリリースでworkbench.experimental.settingsProfiles.enabled設定を介してプレビューとして利用できます。ぜひお試しいただき、VS Codeリポジトリで課題を作成するか、issue #116740にコメントしてフィードバックをお寄せください。

このマイルストーンでは、Web版VS Codeにおける設定プロファイルのサポートも追加しました。insiders.vscode.devと、同じworkbench.experimental.settingsProfiles.enabled設定を使用して試すことができます。

テーマ: Light Pink

タスクの再接続

ウィンドウのリロード時に、task.experimental.reconnectionを有効にすることで、ウォッチタスクを再接続できるようになりました。これにより、拡張機能の変更やVS Codeのバージョンアップデート後に作業に戻るまでの時間が短縮されます。

コードアクション

VS Codeでのコードアクションに関するより良いエクスペリエンスを提供するために取り組んでいます。コードアクションには、リファクタリング、ソースアクション、クイックフィックスが含まれます。

新しい実験的なコードアクションコントロールは、電球アイコンから、またはクイックフィックスを通じて、コンテキストメニューからリファクタリングまたはソースアクションを選択して開くことができます。editor.experimental.useCustomCodeActionMenu設定を介して試してみてください。VS Codeリポジトリで課題を作成するか、issue #152913にコメントしてフィードバックをお寄せください。

コードアクションのリファクタリングプレビューも、新しいコードアクションコントロールからアクセスできます。有効な項目にカーソルを合わせると、プレビュー方法が表示されます。コードアクションの選択やプレビューのために、カスタムキーバインディングがサポートされています。

このマイルストーンでは、クイックフィックス (⌘. (Windows, Linux Ctrl+.)) を含むコードアクションのカスタムキーバインディングも追加しました。keybindings.jsonに希望のキーボードショートカットを含む以下のスニペットを追加することで試すことができます。

[
  {
    "key": "ctrl+k",
    "when": "codeActionMenuVisible",
    "command": "focusPreviousCodeAction"
  },
  {
    "key": "ctrl+j",
    "when": "codeActionMenuVisible",
    "command": "focusNextCodeAction"
  }
]

ウェブ版とデスクトップ版VS Code間での編集セッション

編集セッションの作業が継続されています。これにより、ウェブ版またはデスクトップ版VS Codeでリポジトリでの作業を続行する際に、コミットされていない変更を持ち越すことができます。主なハイライトは次のとおりです。

  • 編集セッション機能をオフにする際に、クラウドに保存されているすべての編集セッションを削除できるようになりました。
  • Microsoft認証によるサインインがサポートされるようになりました。
  • 編集セッションを見つけるのに問題がある場合は、編集セッション: 編集セッションを表示コマンドですべての編集セッションを表示できます。

編集セッションを試すには、設定でworkbench.experimental.editSessions.enabledを設定し、編集セッション: 現在の編集セッションを保存コマンドを使用します。プロンプトが表示されたらGitHubまたはMicrosoft認証でサインインします。その後、別のマシンまたはVS Codeインスタンスのレポジトリで編集セッション: 最新の編集セッションを再開コマンドを使用して、変更されたすべてのファイルの作業内容をワークスペースに復元します。編集セッション: サインアウトコマンドを使用すると、いつでも編集セッションからサインアウトできます。

編集セッションのエクスペリエンスを改善し続けていますので、ぜひ試していただき、issue #141293のコメントを通じてフィードバックをお寄せください。

拡張機能の作成

when句における「not in」演算子

when句にはすでにinという演算子が存在し、配列またはオブジェクト型の値を持つ別のコンテキストキー内でコンテキストキーの値を動的に検索できます。これに加えて、この機能を否定する新しい演算子not inを追加しました。詳細については、when句コンテキストのドキュメントを参照してください。

htmlLanguageParticipants貢献ポイント

新しい貢献ポイントhtmlLanguageParticipantsにより、HTMLライクな言語がコード補完、ホバー、アウトラインなどのすべてのHTML言語サーバー機能を継承することを宣言できるようになります。これは、完全な言語サーバーを実装したくないプログラミング言語拡張機能にとって有用です。

組み込みのhandlebars拡張機能が良い例で、現在そのpackage.json内でhtmlLanguageParticipantsに自身を追加しています。

"contributes": {
  "htmlLanguageParticipants": [
     {
       "languageId": "handlebars"
      }
    ]
}

Quarkus拡張機能はすでにこの貢献ポイントを採用しています。埋め込みのQute HTMLテンプレート言語の追加提案により、HTML機能を強化しています。

エディターへのドロップAPI

テキストエディターのドロップAPIにより、拡張機能はファイルやその他のコンテンツをテキストエディターにドロップする処理を扱えるようになります。これらのドロップイベントは、VS Code内からのもの(例えば、VS CodeのExplorerからテキストエディターにファイルをドラッグする)もあれば、オペレーティングシステムからVS Codeにファイルをドロップすることによって生成されるものもあります。

ファイルをエディターにドロップするには、ユーザーはドラッグ中にkbsytyle(Shift)を押しながら、ファイルをファイルの特定の位置にドロップします。この時点で、拡張機能はドロップされたデータをどのように処理するかを選択できます。

このAPIの簡単な例については、エディターへのドロップ拡張機能サンプルをご確認ください。

提案されたAPI

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

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

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

Webviewコンテキストメニュー

新しいWebviewコンテキストメニューの提案により、高度なWebviewが、ユーザーがWebview内で右クリックしたときに表示されるコンテキストメニューを簡単にカスタマイズできるようになります。この新しい貢献ポイントはVS Codeの通常のコンテキストメニューを使用するため、カスタムメニューはエディターの他の部分とよく馴染みます。Webviewは、Webviewの異なるセクションに対してカスタムコンテキストメニューを表示することもできます。

この新しいAPIを試すには、contribWebviewContextプロポーザルを有効にする必要があります。

"enabledApiProposals": [
  "contribWebviewContext"
]

Webviewに新しいコンテキストメニュー項目を追加するには、menusの下の新しいwebview/contextセクションに新しいエントリを追加します。各貢献はcommand(タイトルもここから来ます)とwhen句を受け取ります。when句には、コンテキストメニューが拡張機能のWebviewにのみ適用されるように、webview == 'YOUR_WEBVIEW_VIEW_TYPE'を含める必要があります。

"contributes": {
  "menus": {
    "webview/context": [
      {
        "command": "catCoding.yarn",
        "when": "webview == 'catCoding'"
      },
      {
        "command": "catCoding.insertLion",
        "when": "webview == 'catCoding' && webviewSection == 'editor'"
      }
    ]
  },
  "commands": [
    {
      "command": "catCoding.yarn",
      "title": "Yarn 🧶",
      "category": "Cat Coding"
    },
    {
      "command": "catCoding.insertLion",
      "title": "Insert 🦁",
      "category": "Cat Coding"
    },
    ...
  ]
}

Webview内では、data-vscode-context データ属性(またはJavaScriptではdataset.vscodeContext)を使用して、HTMLの特定の領域のコンテキストを設定することもできます。data-vscode-contextの値は、ユーザーが要素を右クリックしたときに設定するコンテキストを指定するJSONオブジェクトです。最終的なコンテキストは、ドキュメントルートからクリックされた要素へのパスをたどって決定されます。

例えば、このHTMLを考えてみましょう。

<div class="main" data-vscode-context='{"webviewSection": "main", "mouseCount": 4}'>
  <h1>Cat Coding</h1>

  <textarea data-vscode-context='{"webviewSection": "editor", "preventDefaultContextMenuItems": true}'></textarea>
</div>

ユーザーがtextareaを右クリックすると、以下のコンテキストが設定されます。

  • webviewSection == 'editor' — これは親要素のwebviewSectionを上書きします。
  • mouseCount == 4 — これは親要素から継承されます。
  • preventDefaultContextMenuItems == true — これは特別なコンテキストで、VS Codeが通常Webviewコンテキストメニューに追加するコピーと貼り付けのエントリを非表示にします。

ユーザーが<textarea>内で右クリックすると、次のように表示されます。

Custom context menus showing in a webview

ビューサイズ

ビューサイズ提案により、拡張機能が貢献するビューに重みを提供できるようになります。

"contributes": {
    "views": {
        "github-pull-request": [
            {
                "id": "github:createPullRequest",
                "type": "webview",
                "name": "Create Pull Request",
                "size": 2
            },
            {
                "id": "github:compareChanges",
                "name": "Compare Changes",
                "size": 1
            }
        ]
    }
}

サイズはCSSプロパティのflex-growと同様に機能します。上記の例では、"size": 2のビューは、"size": 1のビューの2倍のサイズになります。サイズプロパティは、ビューコンテナが同じ拡張機能によって貢献されている場合にのみ尊重されます。

拡張可能なHTMLノートブックレンダラー

組み込みのノートブックレンダラーが、HTMLコンテンツのレンダリングを拡張機能でカスタマイズできる実験的なAPIを公開するようになりました。このAPIは現在、初期のHTMLコンテンツのレンダリング後に呼び出される単一のフックpostRenderを公開しています。

この実験的なAPIを試すには、拡張機能がvscode.builtin-renderer APIを拡張する必要があります。

"contributes": {
  "notebookRenderer": [
    {
      "id": "vscode-samples.my-custom-html-extension",
      "displayName": "My custom html renderer extension",
      "entrypoint": {
        "extends": "vscode.builtin-renderer",
        "path": "./out/main.js"
      }
    }
  ]
}

その後、レンダラーはvscode-builtin-rendererにレンダリングフックを登録できます。

import type { RendererContext } from 'vscode-notebook-renderer';

export async function activate(ctx: RendererContext<void>) {
  const htmlRenderer = await ctx.getRenderer('vscode.builtin-renderer');
  if (!htmlRenderer) {
      throw new Error(`Could not load 'vscode.builtin-renderer'`);
  }

  htmlRenderer.experimental_registerHtmlRenderingHook({
    // Invoked after the HTML content for `outputItem` has been rendered to `element`
    postRender(outputItem: OutputItem, element: HTMLElement): HTMLElement | undefined {
      // You can either modify `element` or return a replacement element
    }
  });
}

この新しいAPIを試して、ご意見をお聞かせください!

Debug Adapter Protocol

RunInTerminalRequestにおけるargsCanBeInterpretedByShell

RunInTerminalRequestは新しいプロパティargsCanBeInterpretedByShellをサポートしており、コマンドargs内の特別なシェル文字をエスケープしないままにするかどうかをクライアントに伝えます。これは、ユーザーがターミナルで起動し、シェルによって解釈されるべき文字を含む起動設定を作成できるようにするためです。

エンジニアリング

Electron サンドボックスサポートの進捗

このマイルストーンでは、Electronのサンドボックスをデフォルトで有効にするための実質的な進捗がありました。8月にはInsidersでサンドボックスを有効にし、最終的にはStable VS Codeでデフォルトにする予定です。

興味のある方のために、設定で"window.experimental.useSandbox": trueを構成すると、サンドボックスモードが有効になります。うまくいけば、何も変わったことに気づかないはずですが、問題を発見した場合は、私たちに報告してください。

Markdown言語サーバー

このイテレーションでは、VS CodeのMarkdown記述ツールの大半をライブラリ言語サーバーとして抽出しました。これには、パス補完、ドキュメントアウトライン、診断のためのツールが含まれます。

VS Codeの組み込みMarkdown拡張機能はすでにこの新しい言語サーバーの使用に切り替わっていますが、動作に違いを感じることはないはずです。この切り替えにより、Markdownツールが独自のプロセスに移行するため、パフォーマンスが向上するはずです。言語サーバーへの移行は、実験的なMarkdownリンク診断のパフォーマンス向上にも役立ちました。

他のツールやエディターもこれらの新しいパッケージの恩恵を受け、さらにそれらに貢献できることを願っています。力を合わせれば、誰もがより良いMarkdownツールを構築できます!興味があれば、関連プロジェクトをチェックしてください。

Debianパッケージの依存関係

Debianパッケージの依存関係が、ハードコードされるのではなくスクリプトによって生成されるようになりました。これにより、一部のマシンで実行時にプログラムがクラッシュする原因となっていた、2016年に提出された問題がクローズされました。

ドキュメントと拡張機能

開発コンテナーCLI

開発コンテナーコマンドラインインターフェース (CLI) のトピックが、CLIの最新バージョンに更新されました。開発コンテナーCLIを使用すると、開発コンテナーを構築して実行でき、Development Containers Specificationのオープンソース参照実装です。

Banner from the Development Containers Specification website

Azure Developer CLI (azd)

Azure Developer CLIおよびその補完的なVS Code拡張機能が一般公開プレビューになりました。Azure Developer CLI (azd) は、ワークフローの主要な段階(コード、ビルド、デプロイ、監視、繰り返し)に対応する開発者向けのコマンドを提供することで、ローカル開発環境からAzureへの移行時間を短縮します。

Azure Developer CLI extension

Azure Developer CLIは、Azureでアプリケーションを稼働させるために必要なすべてを含む拡張可能なテンプレートを使用します。テンプレートには、ベストプラクティス、アプリケーションコード、再利用可能なインフラストラクチャ・アズ・コード資産が含まれています。それだけでなく、「Hello World!」をはるかに超えるエンドツーエンドのシナリオをカバーしています。

Azure Developer CLIを使用すると、アプリケーションの初期化、プロビジョニング、デプロイが可能です。さらに良いことに、'azd up'を使用すれば、これらをワンステップで行えます!サポートされているazdコマンドのリストについては、Developer CLI リファレンスを参照してください。

ありがとうございます

最後に、VS Codeの貢献者の皆様に心からの感謝を申し上げます。

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-generator-codeへの貢献者

vscode-js-debugへの貢献者

vscode-json-languageserviceへの貢献

monaco-editorへのコントリビューション