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

2024年2月 (バージョン 1.87)

Update 1.87.1: このアップデートでは、以下の問題に対処しました。

Update 1.87.2: このアップデートでは、このセキュリティ問題に対処しました。

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

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

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.comUpdates をご覧ください。Insiders: 新機能をいち早く試したいですか? 毎日の Insiders ビルドをダウンロードして、最新のアップデートが利用可能になり次第お試しいただけます。

アクセシビリティ

エディターでのディクテーション

VS Code Speech 拡張機能をインストールしていれば、音声を使ってエディターに直接ディクテーションできるようになりました。

エディターのディクテーションを開始および停止するための新しいコマンドを追加しました: 音声: エディターでディクテーションを開始 (⌥⌘V (Windows, Linux Ctrl+Alt+V)) と 音声: エディターでのディクテーションを停止 (Escape)。

開始コマンドのキーバインディング (⌥⌘V (Windows, Linux Ctrl+Alt+V)) を長押しすると、キーを離すとすぐに音声認識が停止するウォーキートーキーモードを有効にできます。

注: ディクテーションは、SCM コミット入力ボックスやプルリクエストレビュー時のコメント入力フィールドなど、リッチエディターが使用されている他の場所でも機能します。

音声認識の多言語対応

VS Code Speech 拡張機能を使用すると、accessibility.voice.speechLanguage 設定を使用して、26 のサポートされている言語の中から選択できるようになりました。

音声拡張機能の各言語は、それぞれ独自の拡張機能として提供されます。初めて音声認識を開始すると、選択した各言語の拡張機能のインストールが表示されます。

アクセシビリティシグナル

アクセシビリティシグナルは、以前はオーディオキューと呼ばれていたサウンドと、以前はアラートと呼ばれていたアナウンスの両方を含みます。

ヘルプ: シグナルサウンドの一覧表示 および ヘルプ: シグナルアナウンスの一覧表示 コマンドを使用すると、利用可能なシグナルを表示し、設定できます。この新しい設定への移行は自動的に行われます。

以前

"audioCues.clear": "on | auto | off"
"accessibility.alert.clear": true | false

以後

"accessibility.signals.clear": {
    "sound": "auto | on | off",
    "announcement" (optional): "auto | off"
}

Workbench

リリースノートでの対話型設定

新しい機能の開始を容易にするために、リリースノートから直接設定を有効または表示できるようになりました。VS Code 内からリリースノートを表示 (リリースノートを表示 コマンド) すると、一部の設定に歯車アイコンがあることに気づくでしょう。設定または歯車アイコンを選択すると、すぐに設定と対話できます。

Example of an interactive setting in release notes

言語モデルアクセスの透明性と制御

今回のイテレーションでは、拡張機能が GitHub Copilot Chat の言語モデルを使用できるようにする提案された API を導入しました。モデルへのアクセスの透明性と制御を最大限に高めるため、以下の機能を追加しました。

認証アクセスと同様に言語モデルアクセスを管理

言語モデルへのアクセス管理は、VS Code で GitHub アカウントや Microsoft アカウント (または AuthenticationProvider モデルを利用するもの) へのアクセス管理と非常によく似ていることがわかりました。これらの類似性から、言語モデルへのアクセスにも VS Code の認証スタックを活用しました。

ある拡張機能が別の拡張機能の言語モデルにアクセスしたい場合、永続化されるアクセス要求のプロンプトが一度だけ表示されます: 拡張機能が言語モデルアクセスを要求しているモーダルダイアログ

アクセスが許可されると、アカウントを管理するのと同じ場所、つまりアカウントメニューでそのアクセスを管理できます。

Manage trusted extensions options in the account menu

「信頼できる拡張機能の管理」を選択すると、必要に応じてアクセスを管理できるクイックピックが表示されます。

Manage trusted extensions quick pick

初期作業が完了したため、引き続きエクスペリエンスを洗練し、可能な限りスムーズで明確なものにしていきます。

拡張機能の言語モデル使用状況の追跡

拡張機能のエディターとランタイム拡張機能エディターで、拡張機能の言語モデル使用状況を追跡できます。以下の画像は、Copilot Chat Sample Extension が GitHub Copilot Chat 言語モデルに対して行ったリクエスト数を示しています。

Tracking language model usage in extension editor

Tracking language model usage in running extensions editor

エディター

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

今回のイテレーションでは、エディターでスティッキースクロールを既定で有効にしています。これは、editor.stickyScroll.enabled 設定を使用して変更できます。

また、エディターのスティッキーウィジェット内に表示できる最大行数を 10 から 20 に増やしました。editor.stickyScroll.maxLineCount 設定で最大行数を構成できます。

複数カーソルでのインライン補完

今回のイテレーションでは、複数カーソルのインライン補完のサポートを追加しました。これにより、インライン補完がプライマリカーソルとセカンダリカーソル両方の位置でプレビューされ、適用されます。

マルチ Diff エディターでのリファクタリングプレビュー

リファクタリングプレビューを使用すると、コードリファクタリングによって適用される変更を確認できます。リファクタリングプレビューの変更はマルチ Diff エディターで表示されるようになり、すべての変更を一目で確認し、以前のバージョンと比較することが容易になりました。

ターミナル

コマンド実行時間の追跡

シェル統合が有効な場合、ターミナルの実行時間が追跡され、コマンドホバーに詳細が表示されるようになりました。

Hovering the terminal command shows how long it took in milliseconds

ズームイン、ズームアウト、リセットの新しいコマンド

ターミナルのフォントサイズをズームイン、ズームアウト、リセットするための新しいコマンドが追加されました。これらは既定ではバインドされていませんが、お好みのキーバインディングにバインドできます。

  • ターミナル: フォントサイズを拡大 (workbench.action.terminal.fontZoomIn)
  • ターミナル: フォントサイズを縮小 (workbench.action.terminal.fontZoomOut)
  • ターミナル: フォントサイズをリセット (workbench.action.terminal.fontZoomReset)

ソース管理

ウィンドウタイトルにリポジトリ名またはブランチ名を含める

ユーザーは window.title 設定を使用してウィンドウタイトルをカスタマイズできます。今回のイテレーションでは、この設定で使用できる 2 つの新しい変数 ${activeRepositoryName}${activeRepositoryBranchName} を追加しました。これらの変数は、それぞれアクティブなリポジトリ名とアクティブなブランチ名に置き換えられます。

コミット入力検証の改善

今回のイテレーションでは、言語診断を使用してコミットメッセージ作成のためのより良い入力検証を提供する可能性を探りました。言語診断を使用すると、入力検証の警告を解決するために呼び出すことができるコードアクションを提示できます。空白文字の削除、git.inputValidationSubjectLength および git.inputValidationLength 設定に基づく行の強制折り返しを行うコードアクションを追加しました。将来的にはさらに多くのコードアクションを追加することを検討しています。

これを有効にするには、git.inputValidation 設定を切り替えます。既定で有効にする前にいくつかの課題がありますが、それまでの間は自由に有効にしてフィードバックをお聞かせください。

入力/出力変更設定の管理

ソース管理ビューの入力/出力セクションの磨き込みを続けています。今回のイテレーションでは、「入力/出力」区切りに設定アクションを追加しました。これにより、ユーザーは scm.showIncomingChangesscm.showOutgoingChanges、および scm.showChangesSummary の設定をより簡単に切り替えることができます。これらのアクションは、ソース管理ビューのタイトルバーの ... メニューにある入力 & 出力メニューからも利用できます。

未変更のエディターをすべて閉じるコマンド

エディター管理を支援するため、コマンドパレットに未変更のエディターをすべて閉じるコマンドを追加しました。このコマンドは、変更されていないファイルを持つすべてのエディターを閉じます。未保存の変更があるエディターは閉じません。

ノートブック

ノートブックのインデント設定

notebook.editorOptionsCustomizations 設定を介して、ノートブック固有のインデント設定をサポートするようになりました。この設定により、ユーザーは editor.tabSizeeditor.indentSize、および editor.insertSpaces 設定を介して、ノートブックの特定のインデントスタイルを設定できます。

ユーザーは、ノートブックエディターの現在のインデント設定を表示するノートブックインデントという名前のステータスバーエントリにも気づくでしょう。このエントリにはクイックピックメニューがあり、設定エディターを開かずにインデント設定を管理できます。これはエディターでも利用できる同じクイックピックメニューです。

デバッグ

新しい BreakpointMode のサポート

VS Code は、Debug Adapter Protocol (DAP) への新しい追加をサポートしており、ブレークポイントの異なる「モード」を設定できます。この機能は、たとえばハードウェアブレークポイントとソフトウェアブレークポイントを設定するなど、ネイティブコードのデバッガーによって一般的に使用される可能性があります。ブレークポイントのモードは、コンテキストメニューのモードの編集アクションで変更できます。

Breakpoint context menu now has an 'Edit Mode...' option to change the breakpoint mode

リモート開発

Remote Development 拡張機能を使用すると、開発コンテナー、SSH 経由のリモートマシン、リモートトンネル、または Windows Subsystem for Linux (WSL) をフル機能の開発環境として使用できます。

主なハイライトは次のとおりです。

  • GitHub Copilot Chat は、開発コンテナー構成ファイルをワークスペースに追加する際に、テンプレートと機能を提案します。

これらの機能の詳細については、Remote Development リリースノートをご覧ください。

VS Code のさまざまなリモート開発機能の概要を知るには、最近のVisual Studio Code でのリモート開発学習パスをお見逃しなく。

拡張機能への貢献

GitHub Copilot

リネーム候補

Copilot によるリネーム候補を段階的に展開しています。エディターでシンボルをリネームすると、GitHub Copilot はコードに基づいて、そのシンボルの可能な新しい名前のリストを提案します。

インラインチャットのアクセシビリティビュー

インラインチャットに、アクセシブルな Diff ビューアーと同様にコードの変更を表示するアクセシビリティビューが追加されました。アクセシビリティビューは、スクリーンリーダーモードを使用している場合に有効になります。inlineChat.accessibleDiffView 設定を使用して、常にオンまたはオフに構成することもできます。

また、変更箇所は F7 および Shift+F7 キーバインディングでキーボード操作できるようになりました。

インラインチャットの既定モード

live preview モードを廃止し、live をインラインチャットの既定モードとしました。これにより、候補がエディターに直接適用され、変更がインライン Diff で強調表示されるようになります。

マイクアイコンが常に表示される

Copilot Chat で音声認識を開始するマイクアイコンが常に表示されるようになりました。VS Code Speech 拡張機能がまだインストールされていない場合、アイコンを選択すると最初に、音声テキスト変換機能を有効にするために拡張機能をインストールするように求めます。

Microphone icon in chat input

この機能に興味がない場合、またはキーボードショートカット経由でのみ使用したい場合は、コンテキストメニューからこの機能を非表示にできます。

Hide microphone icon in chat input

エージェントとスラッシュコマンドの音声サポート

VS Code Speech 拡張機能を使用して音声でチャット入力フィールドに入力すると、「at workspace」や「slash fix」などのフレーズが、それぞれのエージェントおよびスラッシュコマンドに変換されるようになりました。これは、チャットビューとインラインチャットの両方で機能します。

あらゆる場所でのウォーキートーキーモード

VS Code Speech 拡張機能を使用すると、コマンド 音声: 音声チャットを開始 (⌘I (Windows, Linux Ctrl+I)) があらゆる場所で機能するようになり、フォーカスがある場所に応じて音声チャットが表示されます (エディター内のインラインチャット、それ以外の場合はパネルチャット)。

ウォーキートーキーモードを有効にするには、キーバインディングを長押しします。音声認識はキーを離すまでアクティブになり、その後リクエストが自動的に送信されます。

カーソル位置に基づく Copilot: Explain This

以前は、チャットで Explain This を入力するには、アクティブなエディターで説明するテキストを最初に選択する必要がありました。現在は、識別子にカーソルを置くだけで Copilot がその識別子の定義を表示できるようになりました。定義が別のファイルにある場合、これにはリッチな言語サポートが必要です。

プレビュー: #codebase 変数

今回のイテレーションでは、GitHub Copilot Chat のプレリリースバージョンで、#codebase と呼ばれる新しいチャット変数を導入しました。この変数は、クエリに基づいてワークスペースのコンテキストを Copilot や対話中のチャット参加者に提供するために使用できます。

この例では、#codebase は、まず @workspace に質問し、その応答を @terminal に質問している内容に追加すると考えることができます。

これはプレビュー機能であるため、#codebase がこの変数の最終的な名前ではないかもしれませんが、チャット参加者にワークスペースのコンテキストを含める何らかの方法を提供することが意図されています。

繰り返しますが、これは GitHub Copilot Chat のプレリリースバージョンのみの機能です。ご意見や使い方をお聞かせください!

ターミナルのワークスペースコンテキスト

ターミナルは、時間がかかる可能性のあるワークスペースコンテキストを自動的に取り込まなくなりました。代わりに、#codebase 変数を使用して明示的に含める必要があります。

ターミナルチャットの場所

ターミナルチャットのエクスペリエンスを制御する新しい設定 github.copilot.chat.terminalChatLocation があります。既定値は chatView で、以前の動作を好む場合は quickChat に設定できます。

Jupyter

ローカルで実行中の Jupyter サーバーの Language Server サポート

以前は、ローカルの Jupyter サーバーに接続する際、Jupyter 拡張機能はこれらの Jupyter サーバーをリモートとして扱っていました。その結果、Pylance 拡張機能はインストールされたパッケージを検出できませんでした。

Failed language features for remote Jupyter Servers

今回のイテレーションでは、Jupyter 拡張機能が接続された Jupyter サーバーがローカルであるかリモートであるかを検出するようになりました。これにより、Pylance 拡張機能は、(ローカルの Python 環境に) インストールされたパッケージに基づいて、より豊富な言語機能を提供できます。

Language features for remote Jupyter Servers

Python

Python REPL のシェル統合

WSL 拡張機能を介して、Mac、Linux、Windows で Python REPL のシェル統合が有効になりました。Python REPL でコマンドを実行すると、色付きの円のデコレーターでコマンドの成功/失敗が示されます。さらに、Python REPL 用のターミナル: 最近のコマンドを実行… コマンドもサポートしており、REPL のコマンド履歴を表示および利用できます。

また、すべてのオペレーティングシステムで Python のシェルファイル履歴をサポートするようになり、ターミナル: 最近のコマンドを実行からアクセスできます。

最初のコマンドが無視されるリスクの軽減

以前は、多くの Python REPL ユーザーが、Python REPL への最初のコマンド (たとえば、Shift+Enter を使用する場合) で問題に気づいていました。Python コマンドが無視されて Python REPL に送信されなかったり、Python REPL 自体ではなく、Python REPL を起動するシェルにコマンドが複数回貼り付けられたりするケースがありました。この動作は、特に Windows ユーザーや古いマシンで作業しているユーザーで発生していました。

今回のイテレーションでは、この動作が発生するリスクを軽減するための努力を行いました。VS Code 内で最初の REPL インスタンスに Python コマンドを送信した際に、最初のコマンドが失われることが少なくなりました。

不足しているインポートを追加する機能の改善

Pylance 拡張機能は、不足しているインポートを追加するためのインポートを追加コードアクションを提供します。Pylance のプレリリース版では、このコードアクションを改善しました。Pylance はヒューリスティクスを使用して、最も信頼性の高い上位 3 つのインポートオプションのみを表示するようになりました。これは、最近使用されたインポート、同じモジュールからのシンボル、標準ライブラリからのシンボル、ユーザーモジュールからのシンボル、サードパーティパッケージからのシンボル、そして最後にモジュール名とシンボル名によるソートに基づいて優先順位付けされます。

さらに、2 つの新しいコードアクションが導入されました: 不足しているインポートシンボルにプレフィックス一致するインポートオプションを検索できるクイックピックメニューを表示する追加のインポートの一致を検索と、タイプミスによる不足しているインポートに対するインポート候補を提供するスペルを変更です。

この動作は、python.analysis.addImport.heuristics 設定で有効にできます。近いうちにこれを新しい既定の動作とし、将来のリリースでこの設定を非推奨にする予定です。

Django または Flask アプリのデバッグ時にブラウザーを自動的に開く

Python Debugger 拡張機能を使用すると、Python ウェブアプリケーションの開発とテストがさらに便利になりました!launch.json 構成で autoStartBrowser: true を設定することにより、Django または Flask アプリでデバッガーを開始するとブラウザーが自動的に開くようになりました。

{
  "name": "Python Debugger: Flask",
  "type": "debugpy",
  "request": "launch",
  "module": "flask",
  "env": {
    "FLASK_APP": "hello_app.webapp",
    "FLASK_DEBUG": "1"
  },
  "args": ["run"],
  "jinja": true,
  "autoStartBrowser": true
}

シンボリックリンクされたワークスペースでの Pytest のバグ修正

シンボリックリンクを持つワークスペースで pytest テストが正しく機能するようにするバグ修正を実装しました。テスト書き換えにより、シンボリックリンクの場所からのテストは、そのシンボリックリンクパスによって正しく参照され、実行されます。

GitHubプルリクエスト

プルリクエストやイシューの作業、作成、管理を可能にするGitHub Pull Requests 拡張機能で、さらに進展がありました。新機能には以下が含まれます:

  • 「GitHub Pull Requests and Issues」から「GitHub Pull Requests」に名称変更
  • マージまたはスカッシュコミットに関連付けられたメールアドレスを、マージ/スカッシュ時に選択できるようになりました。
  • githubPullRequests.labelCreated 設定を使用して、作成された PR に自動的に追加されるラベルを構成できます。
  • 「オーナーレベル」の PR テンプレートがサポートされるようになりました。
  • PR およびイシュー作成時にプロジェクトを追加できるようになりました。

その他のハイライトについては、拡張機能の 0.82.0 リリースの変更履歴をご覧ください。

プレビュー機能

拡張機能開発者向け: @vscode/l10n-dev と Azure AI Translator のプレビュー

今回のイテレーションでは、@vscode/l10n-dev のサブコマンドである新しいコマンドを導入しました。これにより、Azure AI Translator を使用して文字列を翻訳できます。

文字列をエクスポートし、Azure AI Translator インスタンスを作成した後、AZURE_TRANSLATOR_KEYAZURE_TRANSLATOR_REGION 環境変数を設定し、次のコマンドを実行して Azure AI Translator を使用して翻訳を生成できます。

npx @vscode/l10n-dev generate-azure -o ./l10n/ ./l10n/bundle.l10n.json ./package.nls.json

Azure AI Translator は無料枠を提供しています。私たちは、多様な言語を話す多くのユーザーをより簡単にサポートできるように、拡張機能開発者向けにツールを提供することは良い機会だと考えました。これらは機械翻訳であるため、常に完璧とは限らないことに留意してください。もし可能であれば、その言語を話す人々によるより洗練された翻訳への良い出発点となるでしょう。

詳細については、Azure AI Translator 統合に関する l10n-dev ドキュメントをご覧ください。

拡張機能の作成

拡張機能のテストカバレッジ

拡張機能に テスト CLI を使用している拡張機能開発者は、@vscode/test-cli パッケージを最新バージョンに更新することでテストカバレッジを生成できます。

カバレッジは、テスト実行時に --coverage フラグを渡すことでコマンドラインで生成でき、VS Code UI ではカバレッジ付きで実行アクションを使用することで生成できます。

launch.json のテスト構成

launch.json 構成でテスト構成ファイルを参照できるようになりました。

{
    "type": "extensionHost",
    "request": "launch",
    "name": "My extension tests",
+   "testConfiguration": "${workspaceFolder}/.vscode-test.js",
-   "args": ["--extensionDevelopmentPath=${workspaceFolder}"]
},

以前は必須だったさまざまな args は自動的に生成されますが、追加で渡された引数は VS Code のコマンドラインに追加されます。

イシューレポーターでの追加データ提供

前回のイテレーションでは、workbench.action.openIssueReporter コマンドに datauri のフィールドを追加しました。これにより、拡張機能はより多くの事前入力された情報でネイティブのイシューレポーターを直接開くことができるようになりました。

ヘルプ: 問題を報告... を介して通常のイシューレポーターフローをナビゲートする別のケースで拡張機能がこの恩恵を受けられるように、拡張機能はカスタムコマンド (openIssueReporter を呼び出す) とメニュー貢献ポイントを issue/reporter に提供できます。

package.jsoncontributes の contributed コマンドとメニューの例

"commands": [
    {
        "command": "extension.myCommand",
        "title": "Report Issue"
    }
],
    "menus": {
        "issue/reporter": [
            {
                "command": "extension.myCommand"
            }
        ]
    }

API および openIssueReporter コマンドの更新または変更については、イシュー #196863 を購読してください。

提案されたAPI

チャットと言語モデル API の最終化が近づいています

拡張機能がチャットビューに貢献したり、言語モデルを一般的に使用したりするためのサポートに取り組んできました。現在、以下の API の最終化の最終段階にあり、皆様からのフィードバックをお待ちしております。

チャット拡張機能を構築する方法と、拡張機能ガイドで言語モデルを使用する方法について詳しく学びましょう。

FindFiles2 API

既存の workspace.FindFiles API の改良版である新しい提案された拡張 API を追加しました。新しい workspace.FindFiles2 API は、ワークスペースファイル検索を可能にする新しいオプションを導入しています。

  • files.exclude および search.exclude 設定を尊重する
  • 無視ファイルを尊重する
  • ファジー検索を実行する
  • シンボリックリンクをたどる

新しい API はこちらで確認できます。

FindFiles2 は仮の名称であり、この機能は将来的に FindFiles の代替オーバーロードとして提供される可能性があることに注意してください。

テストカバレッジ API

今回のイテレーションで、テストカバレッジ API とエディター内エクスペリエンスは機能的に完成しました。VS Code 1.88 リリースでの最終化が予測される前に、拡張機能開発者の皆様にぜひお試しいただき、フィードバックをお願いいたします。

Extension Pack for Java はすでにテストカバレッジ API を採用しています。開発者は Java テストを実行してカバレッジ結果をすでに確認できます。カバレッジ付きでテストを実行ボタンを選択し、テストエクスプローラービューでテストカバレッジパネルを表示することで、テストカバレッジを確認できるようになりました。Extension Pack for Java を使用したテストカバレッジの詳細については、チームの12月1月のアップデートをご覧ください。

API はここに含めるには長すぎるため、かなりわかりやすいものだと考えていますが、イシュー #123713 でのご意見をお待ちしております。

デバッグビジュアライザー API

拡張機能が変数用のビジュアライザーを提供できる新しい API を用意しました。これらのビジュアライザーは、新しいエディターを開くなどのコマンドを実行するアクションであるか、デバッグビューにインラインで埋め込まれ、データの既定の表現に代わるツリーである場合があります。

新しい API はこちらで確認できます。

新しいシンボル名プロバイダー API

この API により、ユーザーがシンボルをリネームする際に、拡張機能が名前の候補を提供できるようになります。

注目すべき修正点

  • 184046 ターミナルでリンクが完全に機能しなくなることがある

ありがとうございます

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

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-black-formatter への貢献

vscode-hexeditorへの貢献

vscode-isort への貢献

vscode-languageserver-nodeへの貢献者

vscode-pull-request-githubへの貢献者

language-server-protocolへの貢献者

node-pty への貢献