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.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)

これらのコマンドには現在デフォルトのキーバインディングはありませんが、Preferences: Open Keyboard Shortcuts (⌘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 設定は、シェルプロセスの子プロセスを持つターミナルを閉じようとするときに警告を表示するために、子プロセスの追跡を使用します。デフォルトでは、この追跡はエディター領域のターミナルのみに影響しますが、すべてのターミナルまたはパネル領域のターミナルに警告を表示するように設定できるようになりました。

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

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

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つのクリックゾーンがあり、後者を選択するとアクションが実行され、新しいデフォルトとして記憶されます。

Debug/run split button shown for Java

ドロップダウンの動作

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

拡張機能への貢献

ライブプレビュー

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

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

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

Live Preview Debugging

Live Preview new browser features

テーマ: GitHub Dark Theme

GitHubプルリクエストと課題

プルリクエストと課題の作業、作成、管理を可能にするGitHubプルリクエストと課題拡張機能の作業が続いています。今月のハイライトの1つは、課題の作業を開始が拡張され、現在のリポジトリの外部にある課題に取り組むことができるようになったことです。

すべての新機能と更新の詳細については、拡張機能の 0.29.0 の完全な変更ログを参照してください。

ジュピター

Jupyter 拡張機能の作業は継続中です。すべての新機能と更新の詳細については、拡張機能の 7月リリースに関する完全な変更履歴 を参照してください。

VS Code がノートブックのネイティブサポートを可能にするまでの道のりについてさらに詳しく知りたい場合は、最近のブログ記事「Coming of Age of Notebooks」をご覧ください。

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

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

Shift+Enter to run code in the Interactive window

行ごとに実行

Jupyter Notebooks の「行ごとに実行」機能のサポートに取り組んでいます。この機能は、複雑なデバッグ 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 コンテナーを操作するための開発コンテナー拡張機能には、開発コンテナー内でフォルダーを開いたり (devcontainer open)、開発コンテナーイメージを構築したり (devcontainer build) するための devcontainer コマンドラインインターフェースが含まれるようになりました。

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

プレビュー機能

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

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

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

"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ファイルを編集中は自動言語検出は実行されません。ただし、他の種類の無題ファイルを変更すると、自動言語検出はそれらのファイルの内容で実行されます

機械学習モデルと連携するコードは、npm パッケージとしてリリースされた独自のライブラリに分離され、vscode-languagedetection リポジトリにあります。

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

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 を提供します。テスト拡張機能の作成に関するガイドをご覧ください。

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 に設定する必要があります。そうでない場合、設定エディターは設定を任意の形式をとることができる複雑な設定として解釈し、ユーザーを settings 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 が、テキストの変更が元に戻す操作またはやり直し操作によって引き起こされたかどうかを示します。

言語サーバープロトコル

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

デバッグアダプタープロトコル

「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のような認証サービスでは、SAML/シングルサインオン(SSO)を使用し、SSOセッションの有効期限が切れるとリソースへのアクセスを失う可能性のあるアクセストークンを使用しているため、ログインを促す必要があります。この提案では、AuthenticationGetSessionOptionsforceRecreateという別のプロパティを追加し、ユーザーに再度サインインを要求できるようにします。createIfNoneを指定した場合と同様のモーダルエクスペリエンスがユーザーに表示されます。

エンジニアリング

デスクトップ上のすべての場所でiframeベースのウェブビューが使用されるようになりました

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