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

2021年7月 (バージョン 1.59)

Update 1.59.1: このアップデートは、これらのイシューに対応しています。

このリリースはCVE-2021-26437にも対応しています。

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


Visual Studio Code の2021年7月リリースへようこそ。このバージョンには、皆さんが気に入っていただけるであろう多くのアップデートが含まれており、主なハイライトは以下の通りです。

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

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

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

ワークベンチ

拡張機能

リサイズ時の拡張機能ビューの改善。以下の短いビデオでは、デフォルトの幅の拡張機能ビューですべての詳細が表示されます(以前はアイコン、評価、インストール数が表示されませんでした)。ビューが縮小すると、より小さな拡張機能アイコンが表示され、幅がさらに縮小すると、アイコンと評価が非表示になります。

Dynamic Extensions view

テーマ: GitHub Light Theme

拡張機能ビューで、拡張機能にカスタムホバーが表示されるようになりました。このリッチホバーには、拡張機能の完全な説明と、拡張機能が無効または推奨される理由などの有用な情報が含まれます。

Custom Extension hover

テーマ: GitHub Light Theme

拡張機能ペインの新しいランタイムステータスタブで、拡張機能のランタイムステータスを確認できるようになりました。ステータス情報には、アクティベーション時間、起動時にアクティベートされるかどうか、警告やエラーがあるかどうかが含まれます。この情報の一部は、拡張機能ビューとそのホバー(上の画像に表示)に表示されます。

Extension Runtime Status

テーマ: GitHub Light Theme

拡張機能ペインの詳細タブに、カテゴリ、リソースリンク、および拡張機能のリリース日と更新日などのその他の情報が表示されるようになりました。カテゴリを選択すると、そのカテゴリの他の拡張機能が拡張機能ビューに表示されます。

Extension Details

テーマ: GitHub Light Theme

設定エディター

設定エディターがオブジェクトの検証をサポートするようになりました。この検証は、JSON ファイルを直接編集するときに発生する可能性のある型エラーをチェックします。

Object setting showing validation errors

配列設定が非編集モードでドラッグ&ドロップをサポートするようになりました。さらに、uniqueItems プロパティが true に設定された enum 配列設定では、ドロップダウンにすべてのオプションではなく、残りのオプションのみが表示されるようになりました。

Drag and drop for array settings

設定エディターは、複数行の文字列設定もサポートするようになり、値が単一行の入力ボックスではなく、複数行のテキストエリアでレンダリングされます。

An example of a multiline string setting

拡張されたテーマカスタマイズ構文

以下のカラーカスタマイズ設定により、ユーザーは現在のテーマの色をカスタマイズできます。

  • workbench.colorCustomizations
  • editor.tokenColorCustomizations
  • editor.semanticTokenColorCustomizations

複数のテーマを一度にカスタマイズするための新しい構文があります。

    "workbench.colorCustomizations": {
        "[Abyss][Red]": {
            "activityBar.background": "#ff0000"
        },
        "[Monokai*]": {
            "activityBar.background": "#ff0000"
        }
    },

複数のテーマをリストアップできるほか、名前の最初と最後に * ワイルドカード文字を使用できます。

Jupyter Notebook のサポート

今月、*.ipynb ファイルの読み取りを処理するコードを、Jupyter Notebook 拡張機能から新しい組み込み拡張機能に移動しました。これにより、完全な Jupyter 拡張機能をインストールしなくても、VS Code のクリーンインストールで Jupyter Notebook を開くことができるようになりました。ただし、ipywidgets やその他の複雑なレンダラー型を使用するセルを実行したり、出力を表示したりするには、Jupyter 拡張機能をインストールする必要があります。

Notebook レイアウトの改善

このイテレーションでは、ノートブックのレイアウトにいくつかの改善を加えました。

  • セルが折りたたまれているときに、セル入力の最初の行がレンダリングされるようになりました。
  • ウィンドウの幅がすべての主要なアクションをレンダリングするのに十分でない場合、ノートブックエディターのツールバーのアクションがオーバーフローメニュー (...) に移動します。
  • notebook.undoRedoPerCell のデフォルト値が true に変更されました。

notebook layout improvements

また、コードセルのデフォルトスタイルも更新し、セルを区別しやすくするために背景色を表示するようになりました。テーマは notebook.cellEditorBackground を使用してこの色をカスタマイズできます。

Example of updated notebook code cells

最後に、設定 notebook.globalToolbarShowLabel を使用して、ノートブックツールバーのテキストラベルを切り替えられるようになりました。

Example of notebook toolbar text

相対パスのコピーのパス区切り文字を設定する

新しい設定 explorer.copyRelativePathSeparator を使用すると、相対パスをコピーアクションを呼び出すときに、パス区切り文字を明示的に設定できます。

利用可能な区切り文字オプションは次のとおりです。

  • auto (デフォルト) - オペレーティングシステム固有のパス区切り文字を使用します。
  • / - スラッシュをパス区切り文字として使用します。
  • \\ - バックスラッシュをパス区切り文字として使用します。

エディターグループ間でビューの状態を共有する

エディターのビューの状態 (たとえば、エディターのスクロール位置) をエディターグループ間でどのように共有するかを設定するために、新しい設定 workbench.editor.sharedViewState が追加されました。

デフォルトでは、この設定は現在の動作を維持するために無効になっています。エディターをサイドで開き、後でそのエディターグループを閉じて、再びエディターをサイドで開いても、新しいエディターグループを開いているため、ビューの状態は復元されません。しかし、この設定を有効にすると、最も新しいエディターのビューの状態がすべてのエディターグループ間で保持され、より具体的なビューの状態がエディターグループで見つからない限り、それが使用されます。

以下では、package.json ファイルをサイドで再度開いたときに選択状態が保持されます。

Shared editor group view state

エディター

折りたたみ領域間の移動

カーソルの位置を対応する折りたたみに設定するための新しいコマンドがあります。

  • 次の折りたたみへ移動 (editor.gotoNextFold)
  • 前の折りたたみへ移動 (editor.gotoPreviousFold)
  • 親の折りたたみへ移動 (editor.gotoParentFold)

これらのコマンドには現在、デフォルトのキーバインディングはありませんが、基本設定: キーボードショートカットを開く (⌘K ⌘S (Windows, Linux Ctrl+K Ctrl+S)) から独自のキーボードショートカットを追加できます。

インポートを自動的に折りたたむ

設定 editor.foldingImportsByDefault を使用すると、インポートステートメントが自動的に折りたたまれます。ファイルが一度開かれると、折りたたみ状態が保存されます。この機能は、TypeScript、JavaScript、Java、C#、C++、および FoldingRangeKind.Imports でインポートステートメントに注釈を付ける折りたたみ範囲プロバイダーを持つすべての言語で機能します。

選択範囲からの検索文字列のシード

検索コントロールの設定 editor.find.seedSearchStringFromSelection は、空でない選択範囲からのみ検索文字列をシードするように拡張されました。デフォルトでは、検索コントロールが表示されるとき、エディターは選択範囲または空の選択範囲の周囲の単語を検索キーワードとして使用します。

インライン候補の改善

インライン候補のレンダリング方法を変更しました。これにより、多くのバグが修正されただけでなく、単語の折り返しがインライン候補を認識するようになりました。

さらに、末尾以外の位置での複数行のインライン候補もサポートされるようになりました。

インレイヒントの改善

インレイヒントのレンダリング方法も変更しました。インライン候補と同じメカニズムを使用することで、インレイヒントも単語の折り返しで考慮されるようになりました。このメカニズムにより、インレイヒントの周囲で個別のカーソル停止も可能になります。

ターミナル

ウィンドウ間でのターミナルのドラッグ&ドロップ

あるウィンドウのタブリストまたはエディター領域から、別のウィンドウのタブリスト、エディター領域、またはパネルにターミナルをドラッグ&ドロップできます。

Drag and drop terminal across windows

子プロセスの追跡と終了警告

既存の terminal.integrated.confirmOnExit および新しい terminal.integrated.confirmOnKill 設定は、シェルプロセスの子プロセスを持つターミナルを閉じようとするときに警告を表示するために、子プロセスの追跡を使用します。デフォルトでは、この追跡はエディター領域のターミナルにのみ影響しますが、すべてのターミナルまたはパネル領域のターミナルに警告を表示するように設定できるようになりました。

貢献されたターミナルプロファイルをデフォルトとして設定する

拡張機能によって提供されたターミナルプロファイルをデフォルトプロファイルとして設定できるようになりました。デフォルトのターミナルプロファイルは、ターミナルドロップダウンのデフォルトサフィックスで示されます。

The terminal profile dropdown displays indicates the extension terminal profile is set as the default

下線と取り消し線のサポート

統合ターミナルが下線と取り消し線属性をサポートするようになりました。たとえば、Git はこれらの新しい属性を使用するように設定できます

Git output in terminal with underline and strikethrough text

テーマ: Sapphire Theme

上記の例では、.gitconfig で以下の設定を使用しています。

[color "status"]
  added = green bold
  changed = red bold strike
  untracked = cyan
  branch = yellow black bold ul

エディター領域にサイドターミナルを作成

アクティブなエディターの横のエディター領域にターミナルを作成するための新しいコマンド workbench.action.createTerminalEditorSide があります。

アクティブなターミナルタブインジケーター

テーマは、テーマキー terminal.tab.activeBorder を使用して、アクティブなターミナルタブを示す縦線の色を設定できるようになりました。

Highlighted active terminal

terminal.tab.activeBorder が設定されていない場合、色は tab.activeBorder にフォールバックします。

ターミナルタブアイコンのアニメーションを無効にする

新しい設定 terminal.integrated.tabs.enableAnimation は、ターミナルタブアイコンのアニメーションを無効にします。タスクの場合、スピナーアニメーションの代わりに再生ボタンが使用されます。

Terminal tab without animation and play button displayed

デバッグ

エディターのタイトルにある実行/デバッグボタンの改善

2月のリリースでは、実行とデバッグのコマンドをエディターのタイトル領域の中央(かつコンパクトな)場所にグループ化するドロップダウンボタンを導入しました(1.54 リリースノートを参照)。ユーザーからのフィードバックに基づいて、最後に実行されたアクションを記憶することで、ドロップダウンボタンを改善しようとしました。ドロップダウンボタンには2つのクリックゾーンがあり、1つはデフォルトアクション用(左)、もう1つはドロップダウン用(右)で、選択するとアクションが実行され、新しいデフォルトとして記憶されます。

Debug/run split button shown for Java

ドロップダウンの動作

  • 実行またはデバッグアクションが1つしかない場合、ドロップダウンメニューは省略されます。
  • 実行またはデバッグアクションが複数ある場合、すべてのアクションがドロップダウンメニューに表示され、デフォルトアクションはドロップダウンメニューの最初のアクションに設定されます(記憶されたアクションがない限り)。
  • デフォルトアクションは、VS Code の再起動後も特定のワークスペースで保持されます。エディターごとに保持されるわけではありません

拡張機能への貢献

ライブプレビュー

Live Preview 拡張機能(先月リリース)には、いくつかのエキサイティングな新機能があります。これには以下が含まれます。

  • 外部プレビューのための組み込み JavaScript デバッガーとの互換性。
    • 試すには、Live Preview: デバッグプレビューを表示を実行してください!
  • 埋め込みブラウザーの改善(「ページ内検索」サポート、webvivew DevTools へのクイックアクセスなど)。
  • 自動生成されたファイルのファイルシステム監視。
  • その他多数!🎉

今月の進捗の詳細については、拡張機能のリリースノートを参照してください。

Live Preview Debugging

Live Preview new browser features

テーマ: GitHub Dark Theme

GitHub Pull Requests and Issues

プルリクエストとイシューの作業、作成、管理ができるGitHub Pull Requests and Issues 拡張機能の作業が継続されています。今月のハイライトの1つは、イシューの作業を開始が現在のリポジトリ外のイシューでも作業できるように拡張されたことです。

すべての新機能とアップデートについて学ぶには、拡張機能の 0.29.0 の完全な変更履歴を参照してください。

Jupyter

Jupyter 拡張機能の作業が継続されています。すべての新機能と更新について学ぶには、拡張機能の7月のリリースの完全な変更履歴を読むことができます。

ノートブックのネイティブサポートを可能にするVS Codeのパスについて詳しく知りたい場合は、最近のブログ投稿「Coming of Age of Notebooks」を読むことができます。

インタラクティブウィンドウ

Jupyter インタラクティブウィンドウは、ノートブックインターフェースではなくテキストファイルを使用して Jupyter ノートブックを作成および操作する代替手段を提供します。先月、私たちは、テーマ、カスタムキーバインディング、スニペット、拡張機能との互換性など、より深いワークベンチ統合を特徴とする Jupyter インタラクティブウィンドウのアップグレード版をプレビューしました。プレビュー体験に関するGitHubイシューを通じてフィードバックを提供してくださったユーザーの皆様に感謝いたします。組み込みのインタラクティブウィンドウは、1.59でデフォルトのインターフェースになりました。以前のインターフェースは設定 "jupyter.enableNativeInteractiveWindow": false の背後で引き続き利用可能ですが、今後のリリースで削除されます。皆様からのフィードバックをお待ちしております。

Shift+Enter to run code in the Interactive window

行ごとに実行

Jupyter Notebook で「行ごとに実行」機能をサポートする作業を進めています。この機能は、基本的に簡素化されたデバッグモードで、複雑なデバッグ UI を使用せずにセル内のコードを1行ずつステップ実行できます。これはまだ実験段階ですが、"jupyter.experimental.debugging": true を設定し、選択したカーネルに ipykernel のバージョン6をインストールし、セルのツールバーにある行ごとに実行ボタンを選択することで試すことができます。

Run by line

Python

Python 拡張機能では、Python インタープリターのリストの並べ替えを改善しました。以前は、仮想環境がリストの下部に表示され、スクロールや検索に多くの労力が必要でした。プロジェクトのルートにある仮想環境が最初に表示され、次にグローバルにインストールされた環境が表示されるようになりました。

List of Python interpreters

Dev Containers devcontainer CLI

VS Code 内から Docker コンテナーを操作するためのDev Containers 拡張機能に、dev コンテナー内でフォルダーを開く (devcontainer open) または dev コンテナーイメージをビルドする (devcontainer build) ための devcontainer コマンドラインインターフェースが追加されました。

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

プレビュー機能

無題ファイルの自動言語検出

機械学習を使用してコーディングしている言語を検出し、無題ファイルの言語モードを自動的に設定する、無題ファイルの自動言語検出の初期プレビューを発表できることを嬉しく思います。この機能は、オープンソースの ML ライブラリTensorflow.jsと、GitHub ユーザー@yoeoによるGuesslangの ML モデルを使用しています。

このリリースでは、この機能はデフォルトでオフになっていますが、次回のイテレーションではデフォルトにする予定です。有効にするには、次の設定を適用してください。

"workbench.editor.untitled.experimentalLanguageDetection": true

この機能の動作を見るには、無題ファイルを開き (ファイル > 新しいファイル)、ソースコードをエディターに貼り付けます。

Python コードの自動検出の例を次に示します。

paste a code snippet right into VS Code and it will detect the language

テーマ: Panda Theme

さらに、言語ピッカーを開くことで、検出されている言語を確認できます。

the language picker also shows the detected languages if there are any

テーマ: Panda Theme

: 言語検出の確信度が低い場合、現在の言語モードのままになり、言語検出の確信度が高まるまで言語ピッカーには結果が表示されません。

この設定では、自動的に切り替えられたくない言語モードを指定するための言語オーバーライドも提供できます。

Markdown ファイルを自動検出しない例を次に示します。

"workbench.editor.untitled.experimentalLanguageDetection": true
"[markdown]": { "workbench.editor.untitled.experimentalLanguageDetection": false }

上記の設定を使用すると、無題の Markdown ファイルを編集している間は、自動言語検出は実行されません。ただし、他の種類の無題ファイルを変更した場合、自動言語検出はそれらのファイルの内容で実行されます

ML モデルとやり取りするコードは、独自のライブラリとして npm パッケージでvscode-languagedetection repoにリリースされました。

無題ファイルの自動言語検出がどのように機能するか、ぜひお知らせください!

TypeScript 4.4

このリリースには、今後の TypeScript 4.4 リリースに対するサポートが含まれています。TypeScript 4.4 の新しい言語機能と改善点については、TypeScript ブログで詳しく読むことができます。ツールのハイライトの一部は以下の通りです。

  • JavaScript と TypeScript ファイルの両方におけるパラメータ名と型に対するインレイヒント。
  • プレーンな JavaScript ファイルにおける基本的なスペル提案。これらは、TypeScript 言語サービスがエラーと修正に自信がある場合にのみ表示されます。

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

TypeScript 4.4 でバグに遭遇した場合は、フィードバックを共有し、お知らせください。

逆アセンブリビュー

Microsoft C++ チームによる大規模な貢献のおかげで、このマイルストーンにデバッグ逆アセンブリビューのプレビューを含めることができました。

逆アセンブリビューは、エディターのコンテキストメニューから開くことができ、アクティブなスタックフレームの逆アセンブルされたソースを表示し、アセンブリ命令のステップ実行や個々の命令にブレークポイントを設定することをサポートしています。

逆アセンブリビューは、アクティブなデバッグセッション中および基盤となるデバッグ拡張機能がそれをサポートしている場合にのみ利用可能です。現在、Microsoft C++ および Mock Debug 拡張機能のみが逆アセンブリビューにデータを提供できます。

Disassembly view in Mock Debug extension

技術的な観点から見ると、VS Code の逆アセンブリビューの実装は、Debug Adapter Protocol のさらに4つの機能をサポートするようになりました。

  • メモリ位置の逆アセンブルされたソースを提供する disassembly リクエスト。
  • スタックフレーム上の instructionPointerReference プロパティ。
  • ステップ要求の granularity プロパティ。
  • 命令ブレークポイントと setInstructionBreakpoints リクエスト。

拡張機能作成

テスト API

昨秋、VS Code でテストを実行するためのネイティブサポートを追加する作業を開始し、今月、テスト関連 API の最初のセットが完成しました。これらの API は、以前拡張機能で見られたものよりも、より大きな柔軟性、より優れたパフォーマンス、そしてよりリッチな UX を提供します。テスト拡張機能の作成ガイドをチェックして、詳細に diving in してください。

Image showing the test explorer and rich diff view experience

テーマ: codesong

Test Explorer UI 拡張機能の既存ユーザーは、testExplorer.useNativeTestingtrue に設定することで、ネイティブ体験を得ることができます。ただし、この変換は Test Explorer UI 拡張機能の既存の API を反映しているため、リッチな差分サポートなどの一部の機能は含まれていません。

テスト API を採用した最初の拡張機能の1つは、Extension Pack for Java に含まれる Microsoft のTest Runner for Java です。

Java extension using the native test API in VS Code

新規ファイルメニューの貢献ポイント

ノートブックやカスタムエディターなど、新しいファイルエディターを作成する方法を提供する拡張機能は、新しい file/newFile メニュー貢献ポイントにコマンドを貢献できるようになりました。このメニューには、ウェルカムページまたはファイルメニューの新しいファイル...項目からアクセスできます。

New File menu in use via Welcome page

リッチなステータスバーホバー

リンクとアイコンを含むリッチなホバーが、ステータスバー項目 StatusBarItem.tooltip: string | IMarkdownString でサポートされるようになりました。

Rich Status bar hover

  • MarkdownString.supportThemeIcons が true の場合、$(iconName) 構文でアイコンを使用できます。
  • MarkdownString が信頼されている場合、コマンドリンクも追加できます。構文: ([test](command:vscode.newWindow))

ステータスバーの警告色

警告を表すステータスバー項目は、新しく追加された色 statusBarItem.warningBackgroundstatusBarItem.warningForeground を使用できます。

additionalProperties を持たないオブジェクト設定

オブジェクト設定は、設定エディターでサポートされるように additionalPropertiesfalse に設定する必要があります。そうでない場合、設定エディターは設定を任意の形式を取ることができる複雑な設定として解釈し、ユーザーを設定 JSON ファイルに誘導します。

複数行の文字列設定

設定エディターで複数行の文字列設定のサポートを追加するには、"editPresentation": "multilineText" をキーと値のペアとして文字列設定に追加します。文字列設定を複数行に変更すると、設定エディターは設定値を単一行の入力ボックスではなく、複数行のテキストエリアでレンダリングします。

更新された codicon

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

List of updated icons

  • azure
  • compass-active
  • compass-active
  • compass-dot
  • compass
  • debug-all
  • debug-coverage
  • git-pull-request-closed
  • git-pull-request-draft
  • issue-draft
  • layers-active
  • layers-dot
  • layers

テキストドキュメント変更理由

workspace.onDidChangeTextDocument イベントが発生した際、イベントオブジェクトの新しいプロパティ reason が、テキスト変更が元に戻す (Undo) またはやり直す (Redo) 操作によって引き起こされたかどうかを示します。

Language Server Protocol

Language Server Protocol の新しい次期バージョンが、対応する npm モジュールと共に公開されました。バージョン 3.17 には、VS Code 自体の最新の変更に沿った補完項目ラベルの詳細に関する提案が含まれています。

Debug Adapter Protocol

「writeMemory」リクエストと「memory」イベントの提案の完成

writeMemory リクエストが完成し、Debug Adapter Protocol のバージョン 1.48 と対応する npm モジュールで利用可能になりました。デバッグアダプターが supportsWriteMemoryRequest 機能を持つ場合、クライアントは writeMemory リクエストを使用して、指定された場所のメモリにバイトを書き込むことができます。

memory イベントには、次のマイルストーンで DAP に追加される提案があります。

提案された拡張API

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

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

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

TaskGroup の isDefault

tasks.json ファイルで定義されたタスクには group プロパティが存在し、タスク API を介しても公開されています。group プロパティには isDefault プロパティがありますが、これまでは API で利用できませんでした。この提案では、isDefault プロパティを TaskGroup 上で読み取り専用として公開し、拡張機能がグループのデフォルトタスクを読み取ることができるようにしますが、グループのデフォルトを設定することでユーザーの設定をオーバーライドすることはできません。

AuthenticationGetSessionOptions の forceRecreate

これまで、認証セッションオブジェクトを取得するために使用される getSession API には、ユーザーにログインを要求する機能がありませんでした。GitHub のような認証サービスでは、SSO セッションの有効期限が切れるとアクセストークンがリソースへのアクセスを失うため、SAML/シングルサインオン (SSO) を使用する場合、ログインのプロンプトが必要です。この提案では、AuthenticationGetSessionOptionsforceRecreate という新しいプロパティを追加し、ユーザーに再度サインインを要求できるようにします。createIfNone を指定したときと同様のモーダルエクスペリエンスがユーザーに表示されます。

エンジニアリング

iframe ベースの webview がデスクトップのどこでも使用されるようになりました

今月、Electron の webview タグ要素から通常の