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

2023年5月 (バージョン1.79)

更新 1.79.1: この更新によりセキュリティ問題が解決されました。

更新 1.79.2: この更新によりこれらの問題が解決されました。

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


Visual Studio Code 2023年5月リリースへようこそ。このバージョンには、皆様に気に入っていただけると思われる多くの更新が含まれており、主なハイライトは以下の通りです。

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

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

アクセシビリティ

詳細設定

スクリーンリーダーユーザーに、フォーカスされた機能とのインタラクション方法を知らせるため、追加のaccessibility.verbosity設定が追加されました。

GitHub Copilotには、Copilotチャットビューおよびエディター内コードチャットのアクセシブルなヘルプメニューへのアクセス方法を説明するヒントがあります。

  • accessibility.verbosity.panelChat
  • accessibility.verbosity.inlineChat

これらのヘルプメニューには、期待される動作、入力ボックスから他の要素への移動方法などが記載されています。

その他の新しいverbosity設定は、特定のVS Code UIに関する情報を提供します。

  • accessibility.verbosity.keybindingsEditor - キーボードショートカットエディターにいるとき。
  • accessibility.verbosity.notebook - ノートブックにいるとき。

accessibility.verbosity設定はデフォルトで有効('true'に設定)ですが、個別に無効にすることができます。

設定エディター

macOSのVoiceOverが、設定エディターのenum設定オプションの記述を読み上げるようになりました。files.autoSaveeditor.accessibilitySupportなどのenum設定で試してみてください。

onFocusChange option description of files.autoSave setting being displayed by VoiceOver's high-contrast textbox on macOS

ワークベンチ

読み取り専用モード

一部の開発シナリオでは、ワークスペースのフォルダやファイルを明示的に読み取り専用としてマークすることが役立つ場合があります。たとえば、フォルダやファイルの内容が別のプロセス(Node.jsパッケージマネージャーによって管理されるnode_modulesフォルダなど)によって管理されている場合、それらを読み取り専用としてマークすることで、意図しない変更を回避できます。

このユースケースでは、エクスプローラーおよびテキストエディターとノートブックエディターでファイルパスを読み取り専用としてマークするための新しい設定があります。

  • files.readonlyInclude - マッチした場合にファイルを読み取り専用にするパスまたはグロブパターン。
  • files.readonlyExclude - files.readonlyIncludeにマッチした場合でも、ファイルを読み取り専用にしないパスまたはグロブパターン。
  • files.readonlyFromPermissions - ディスクに書き込み権限がないファイルが読み取り専用であるべきかどうか。

設定の規則に従い、パスが読み取り専用と見なされる場合、エクスプローラーから変更(例:削除)することはできず、テキストエディターまたはノートブックエディターは読み取り専用になります。

読み取り専用モードをよりアドホックに切り替えるために、現在のセッションのみモードを変更し、設定構成を上書きする新しいコマンドがあります。

  • Set Active Editor Readonly in Session - アクティブなエディターを読み取り専用にマークします。
  • Set Active Editor Writeable in Session - アクティブなエディターを書き込み可能にマークします。
  • Toggle Active Editor Readonly in Session - 読み取り専用と書き込み可能を切り替えます。
  • Reset Active Editor Readonly in Session - セッションの状態をリセットします。

Windows UNCホスト許可リストの改善

重要なセキュリティ修正の一環として、VS CodeはUNCホストの許可リストを導入しました。このマイルストーンでは、WindowsユーザーがVS Codeでの日常業務でUNCパスを使用する際に報告された多くのユーザビリティの問題に対処しました。

ダイアログの改善

起動時にUNCホストを許可するための確認ダイアログで、チェックボックスを選択するとsecurity.allowedUNCHosts設定が更新され、ホストが追加されるようになりました。

Windows UNC allow dialog

さらに、詳細情報ボタンをクリックしてもダイアログが閉じなくなりました。

新しいsecurity.restrictUNCAccess設定

新しい設定security.restrictUNCAccessにより、ホストのUNC許可リストを無効にし、このセキュリティ修正前の動作に戻すことができます。この設定を変更すると、システムが情報漏洩の脆弱性に対して再び脆弱になるため、この設定を変更しないことを強くお勧めします。

新しいタブサイズの固定オプション

workbench.editor.tabSizing設定に新しいオプションfixedが追加され、各タブの幅が等しくなります。スペースが限られると、タブは最小まで均等に縮小します。新しい設定workbench.editor.tabSizingFixedMaxWidthは、タブの初期サイズを設定します。

このモードでは、マウスでタブを素早く閉じてもタブの幅は安定しており、同じ場所をクリックして各タブを閉じることができます。エディタータブ領域からマウスを離すと幅が調整されます。

ネットワーク品質の表示

リモートマシンに接続している場合、VS Codeのリモート編集機能を最大限に活用するには、低遅延で良好なネットワーク接続が必要です。このマイルストーンでは、ステータスバーのリモートインジケーターを更新し、遅延が非常に高い場合やネットワーク接続がオフラインになっているように見える場合にフィードバックを提供するようにしました。

高遅延(ウェブ、デスクトップ)

接続しているリモートへの遅延を定期的に測定しています。特定のしきい値に達すると、リモートインジケーターが更新され、その状態を反映します。

Slow network detection shown in the right of the Status bar

オフライン検出(ウェブのみ)

ウェブブラウザを使用してリモートに接続しているときに、突然インターネット接続が失われた場合、リモートインジケーターが更新され、その状態を反映します。

Web offline detection displaying "Network appears to be offline" message from the Status bar

作業の継続

作業継続機能を使用すると、同じリポジトリのVS Code開発環境間で作業中の変更を保存および取得できます。たとえば、ローカルのGitリポジトリからGitHub codespaceにアップグレードする場合や、同じリポジトリで異なるマシンを切り替える場合などです。

GitHubリポジトリの作業中の変更を、一方の環境ではHTTPリモートで、もう一方の環境ではSSHリモートで構成されている場合でも、開発環境間で転送できるようになりました。さらに、ソース管理ビューの状態設定など、追加のワークベンチ状態の転送を開始し、よりシームレスな移行を実現しました。

エディター

形式を選択して貼り付け

ファイルをテキストエディターに貼り付ける際に、複数の方法で挿入したい場合があります。ファイルへの絶対パスが必要な場合や、現在のワークスペースからの相対パスが必要な場合があります。あるいは、現在のエディターの言語に固有のものを、たとえばMarkdownに貼り付ける際にファイルへのMarkdownリンクを挿入したい場合もあります。VS Codeの新しい「形式を選択して貼り付け」機能により、貼り付けたコンテンツがどのように挿入されるかを制御できます。

貼り付け後、VS Codeは、貼り付けたコンテンツを別の方法で挿入できる場合、小さな「形式を選択して貼り付け」コントロールを表示するようになりました。

「形式を選択して貼り付け」コントロールは、クリックするか、キーボードショートカットの⌘. (Windows, Linux Ctrl+.)を使用して開くことができます。入力を開始したり、カーソルを挿入したテキストの外に移動させると、貼り付けセレクターは消えます。また、"editor.pasteAs.showPasteSelector": "never"を使用して、ドロップセレクターコントロールを完全に無効にすることもできます。

たとえば、ノートブックのMarkdownセルにコンテンツを貼り付けると、「形式を選択して貼り付け」コントロールで以下を切り替えることができます。

  • 画像を添付として挿入する
  • Markdown画像の参照を挿入する
  • 相対パスを挿入する(ワークスペース内のファイルの場合)
  • 絶対パスを挿入する

クリップボード内のコンテンツを実際に貼り付ける前に貼り付け方法を選択したい場合は、代わりに新しい貼り付け形式を選択...コマンドを使用できます。これにより、コンテンツをどのように貼り付けるかを選択できます。

Using the Paste As... command to select how content is pasted

クイック提案とスニペット

クイック提案とは、VS Codeが⌃Space (Windows, Linux Ctrl+Space)を押さなくても、入力中に提案を表示することを意味します。この機能は非常に人気があり、すべての提案セッションの約90%は入力によって開始されます。多数の提案はTabキーで受け入れられます(Enterキーや入力による受け入れ文字とは異なります)。

スニペットが挿入されているとき、Tabキーはスニペットプレースホルダー間を移動するために使用されます。現在、スニペットが挿入されている間にクイック提案がアクティブになると、Tabキーは補完を受け入れる**か**次のスニペットプレースホルダーに移動することができます。この競合を解決するために、スニペットが挿入されているときにクイック提案を無効にするeditor.suggest.snippetsPreventQuickSuggestions設定があります。これはデフォルトでtrueでしたが、この設定が存在する限り、混乱するというフィードバックを受けました。そこで、デフォルト値をfalseに変更し、スニペットプレースホルダー内で入力するとクイック提案がトリガーされるように決定しました。

次に、以下のキーストロークを使用できます。

  • Tabを押して補完を受け入れます。
  • Escapeを押してクイック提案を非表示にします。
  • そして、提案がない場合はTabで次のスニペットプレースホルダーに移動します。

ターミナル

Fishシェルの自動シェル統合

シェル統合と強化されたユーザーエクスペリエンスが、fishシェルで自動的にアクティブ化されるようになりました。この機能が動作するには、fishを更新する必要がある場合があります。

Shell integration in fish enables several features

オーバーラインのサポート

ECMA-48で指定されているオーバーラインのエスケープシーケンス(SGR 53SGR 55)が、ターミナルでサポートされるようになりました。このシーケンスの最も一般的な用途は、ターミナルの最下行にあるアプリの「ステータスバー」の上に線を追加することです。

The overline feature is similar to underline but will draw a line on top of the text

ソース管理

デフォルトブランチ名

このマイルストーンから、VS Codeを使用して作成されたすべての新しいGitリポジトリは、デフォルトブランチとしてmainを設定します。デフォルトブランチに別の名前を希望する場合は、git.defaultBranchName設定で変更できます。この設定が空の場合、VS CodeはGitで構成されたデフォルトブランチ名に委ねます。GitHubにフォルダーを公開する場合も、GitHubで構成されたデフォルトブランチ名を尊重します。

vscode.devおよびGitHubとのブランチピッカー統合

VS Codeデスクトップのブランチピッカーから、vscode.devでブランチをチェックアウトしたり、GitHub.comで開いたりできるようになりました。

以下の短いビデオでは、ブランチピッカーのドロップダウンにリストされている各ブランチの右側に、Open on GitHubまたはCheckout on vscode.devのボタンがあります。

類似性閾値

Git statusは、類似度インデックス(ファイルのサイズと比較した追加/削除の数)を使用して、追加/削除のペアが名前変更と見なされるかどうかを判断します。この類似度閾値を、git.similarityThreshold設定で設定できるようになりました。この設定は0から100までの値を取ります。デフォルト値は50です。

ノートブック

開いているノートブックで、検索コントロールからリッチコンテンツを検索できるようになりました。ノートブックが開いている場合、検索コントロールはノートブックエディターでの表示に基づいて結果を表示します(生ソースファイルの内容を検索するのではなく)。これにより、ノートブックの入力テキストの置換も可能になります。

新しいノートブック検索トグルを使用すると、検索したいセルコンテンツの種類をフィルタリングすることもできます。

セル出力インタラクションの改善

新しいコンテキストキーnotebookOutputInputFocusedが追加され、セル出力内のテキストボックスにフォーカスがあるかどうかを判断できるようになりました。これにより、出力にフォーカスがある間でも、生のホットキーa/b/j/kを安全に使用できます。入力ボックスにフォーカスすると、これらのホットキーがトリガーされなくなります。

実行時の書式設定

ノートブックは、セルの実行時にセルを書式設定できるようになりました。これは、Run CellRun AllRun Above/Below、および結合されたカーネル+実行コマンドを使用するとトリガーされます。この機能は、設定"notebook.formatOnCellExecution": trueを介して有効にできます。

保存時のコードアクション

ノートブックは、保存時にコードアクションを実行できるようになりました。コードアクションは、notebook.codeActionsOnSave設定で指定できます。拡張機能の作成者は、セルレベルのコードアクションの標準の型付けを使用してプロバイダーを定義したり、新しいnotebook.プレフィックスを使用してノートブック全体を管理するコードアクションを定義したりできます。拡張機能がこの新しい設定をどのように使用できるかを学ぶには、clean-nb-imports-extサンプル拡張機能を確認できます。

言語

TypeScript 5.1

VS CodeはTypeScript 5.1.3を同梱するようになりました。このメジャーアップデートには、新しいTypeScript言語機能、パフォーマンスの向上、および多くの重要な改善とバグ修正が含まれています。TypeScript 5.1については、TypeScriptブログで読むことができます。

JSXタグのリンク編集

リンク編集機能を使用すると、開いているJSXタグを変更すると、VS Codeが対応する閉じタグを自動的に更新します。これは大幅な時間短縮になります。

この機能はデフォルトではオフですが、設定で有効にできます。

"editor.linkedEditing": true

Start Linked Editing コマンドで明示的にリンク編集を開始することもできます。

F2で一致するJSXタグの名前を変更

JSXタグで名前変更をトリガーすると、VS Codeはタグへのすべての参照を更新しようとする代わりに、一致するタグのみの名前を変更するようになりました。

これにはTypeScript 5.1以降が必要で、HTMLでの名前変更の動作と一致します。

この動作は、javascript.preferences.renameMatchingJsxTagstypescript.preferences.renameMatchingJsxTagsを使用して無効にすることができます。

JSDoc @param 補完

JSDocコメントを記述する際、VS Codeが不足しているすべてのパラメーターの提案を表示するようになりました。

JS Doc @param completions in a TypeScript file

これにより、ドキュメントをすばやく入力できます。

JavaScriptファイルでは、@paramの補完により、パラメータ型の記述のためのプレースホルダーが作成されます。

Markdownで外部メディアファイルをドラッグアンドドロップまたは貼り付けた際にワークスペースに自動コピー

Markdownドキュメントに画像や動画を追加したいですか?手動でファイルをワークスペースにコピーしてからリンクを追加する手間を省き、Markdownにファイルをドラッグアンドドロップまたは貼り付けるだけでよくなりました。ファイルが現在ワークスペースの一部でない場合、VS Codeは自動的にファイルをワークスペースにコピーし、そのファイルへのリンクを挿入します。

クリップボード内の画像データでも効果的です。たとえば、WindowsのSnippingツールでスクリーンショットを撮った場合、Markdownファイルに貼り付けを押すと、VS Codeはクリップボードデータから新しい画像ファイルを作成し、新しいファイルへのMarkdown画像リンクを挿入します。これはmacOSでも、スクリーンショットを撮るときにCtrlキーを押しながらクリップボードにコピーする場合に動作します。

この機能の動作をいくつかの設定でカスタマイズすることもできます。

markdown.copyFiles.destination

markdown.copyFiles.destination設定は、新しいメディアファイルの作成場所を制御します。この設定は、現在のMarkdownドキュメントと一致するグロブを画像宛先にマップします。画像宛先には、いくつかの簡単な変数を使用することもできます。利用可能な変数については、markdown.copyFiles.destination設定の説明を参照してください。

たとえば、ワークスペース内の/docs以下のすべてのMarkdownファイルで、新しいメディアファイルを現在のファイルに固有のimagesディレクトリに入れるようにしたい場合、次のように記述できます。

"markdown.copyFiles.destination": {
  "/docs/**/*": "images/${documentBaseName}/"
}

これで、新しいファイルが/docs/api/readme.mdに貼り付けられると、画像ファイルは/docs/api/images/readme/image.pngに作成されます。

スニペットと同様の方法で変数を変換するために、簡単な正規表現を使用することもできます。たとえば、この変換は、メディアファイルを作成する際にドキュメントファイル名の最初の文字のみを使用します。

"markdown.copyFiles.destination": {
  "/docs/**/*": "images/${documentBaseName/(.).*/$1/}/"
}

新しいファイルが/docs/api/readme.mdに貼り付けられると、画像は/docs/api/images/r/image.pngの下に作成されます。

markdown.copyFiles.overwriteBehavior

markdown.copyFiles.overwriteBehavior設定は、新しく作成されたメディアファイルが既存のファイルを上書きするかどうかを制御します。

デフォルトでは、VS Codeは既存のファイルを上書きすることはありません。代わりに、image.pngというファイルがあり、それをワークスペース内のMarkdownドキュメントに貼り付けようとすると、すでにimage.pngが存在する場合、VS Codeは代わりにimage-1.pngという新しいファイルを作成します。その後、別のimage.pngというファイルを貼り付けようとすると、それは代わりにimage-2.pngとして作成されます。

既存のファイルを新しいファイルで上書きしたい場合は、"markdown.copyFiles.overwriteBehavior": "overwrite"を設定してください。これで、VS Codeは常に元のファイル名を使用し、そのパスに既存のファイルを上書きするようになります。

ワークスペースへのファイルのコピーを無効にする

VS Codeは、ファイルがまだワークスペースの一部でない場合にのみ、ワークスペースにファイルをコピーしようとします。さらに、現在コピーされるのはメディアファイル(画像、動画、音声)のみです。

ただし、この新しい動作が煩わしいと感じる場合は、以下の設定でドラッグアンドドロップと貼り付けの両方で無効にすることができます。

"markdown.editor.drop.copyIntoWorkspace": "never"
"markdown.editor.filePaste.copyIntoWorkspace": "never"

Markdownファイル内のHTMLパスに対するIntelliSense

多くのMarkdown方言では、Markdownドキュメント内で生のHTMLタグを使用できます。この更新では、VS CodeのMarkdown IntelliSense機能のほとんどを、これらのHTMLタグで使用されるファイルパスに拡張しました。これには以下のサポートが含まれます。

Finding all references to an image file used in an HTML tag

Markdownへの音声の挿入

音声ファイルをMarkdownドキュメントにドラッグアンドドロップまたはコピーアンドペーストすると、VS Codeが<audio>要素を挿入するようになりました。

JSON Lines (JSONL) ファイルのシンタックスハイライト

JSON Linesは、改行文字で区切られたJSONオブジェクトのシーケンスを記述します。ファイル拡張子jsonlが使用される場合、VS Codeはシンタックスハイライトを提供します。

リモート開発

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

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

  • 新しいリモート接続(リモートトンネル経由、開発コンテナへ)を、現在のVS Codeウィンドウまたは新しいウィンドウで開くことができます。
  • 転送ポートを公開するワークフローがより簡単に。
  • Web版VS Code (vscode.dev) からWSLへの接続の暫定的なサポート。

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

拡張機能への貢献

GitHub Copilot

Stable版VS CodeでCopilot Chatを使用

以前は、Copilot Chatを使用するにはVS Code Insidersを使用する必要がありました。VS Code 1.79からは、Stable版VS CodeでもCopilot Chatを使用できます。ただし、GitHub Copilot Chat拡張機能をインストールする必要はあります。

エディターチャット

エディターチャットを改善しました。特に、デフォルトモードを「ライブプレビュー」に変更しました。このモードでは、変更がドキュメントに直接適用され、組み込みの差分ビューで表示されます。以下の例を見てみましょう。

  • IUserFriendlyStatusItemEntryタイプに新しいプロパティが追加され、
  • Copilot はそれに合わせて isUserFriendlyStatusItemEntry のチェックを更新しました。
  • 応答は、組み込みの差分ビューを使用してエディターに表示されます。右側は編集可能であり、VS Codeの言語拡張機能によってチェックされます。
  • これにより、応答のエラー(以下のisMarkdownString関数は存在しません)を発見し、提案を受け入れる前に修正できます。

Copilot inline chat suggestion with proposed code change displayed as a live preview

ノートブックの改善点

今月、ノートブックエディターでのチャットエクスペリエンスを改善しました。ノートブックドキュメントでCopilotを使用すると、Copilotはノートブックのコンテキストを使用して、より関連性の高い提案を提供できます。たとえば、コードの提案では、以前のセルで定義された変数やモジュールを再作成したり再インポートしたりすることなく使用します。

ノートブックセルを実行する際、Copilotはセルの実行失敗に対する提案も提供するようになりました。これらは、セルステータスバーのCopilotを使用して修正アクションを選択することで表示できます。

Copilotの提案もセル実行時に自動的に受け入れられるため、手動で受け入れる必要はありません。

GitHubプルリクエストと課題の統合

GitHub Pull Requests and Issues拡張機能がインストールされ有効になっている場合で、レビューのスレッドを表示しているときに、Copilotを使用してレビューコメントを直接適用できるようになりました。これは、コメントメニューのApply Suggestion with AIボタンから行えます。

実験的なクイック質問エクスペリエンス

テーマ: Panda Theme (vscode.devでプレビュー)

このイテレーションでは、コンテキストを離れることなく、簡単なプログラミングの質問をするためにチャットを使用する実験を行いました。チャットエクスペリエンスにアクセスできる場合は、以下の設定でこの機能を有効にできます。

"chat.experimental.quickQuestion.enable": true

機能概要

  • Copilotに簡単な質問をします。
  • ⇧⌥⌘L (Windows, Linux Ctrl+Shift+Alt+L)でエクスペリエンスを切り替えます(状態は30秒間記憶されるため、簡単に表示、非表示、再表示できます)。
  • チャットビューで会話を長文チャットに続けるためのOpen in chatボタン。

チャットエントリの削除

チャットリクエストのXアイコンをクリックすることで、チャットリクエスト/応答ペアを削除できるようになりました。

A chat request with X icon

なぜこれを行いたいのでしょうか?Copilotが的外れな、または不正確な応答を返すことがあります。質問をやり直すこともできますが、セッションのチャット履歴から悪い応答を削除することで、会話を軌道に乗せるのに役立つ場合もあります。各チャットリクエストに含めることができるコンテキストの量にも制限があるため、長い不要な応答を削除することで、より有用な情報のためにコンテキスト予算を節約できるかもしれません。

チャットセッションをサイドバーからエディターに移動

すでにChat: Open Editorコマンドを実行してエディターでチャットセッションを開くことは可能でしたが、サイドバーとエディター間でチャットセッションを移動できるようになりました。Open Session in EditorOpen Session in Sidebarコマンドは、チャットビューのタイトルまたはエディターのタイトルメニューの「...」メニューで見つけることができます。

チャットセッション履歴

チャットセッションが履歴に保存されるようになり、チャットビューのタイトルメニューにある履歴を表示ボタンを選択することで参照できます。履歴エントリを選択すると、その会話がチャットエディターにロードされ、中断した場所からシームレスに再開できます。各行のXボタンをクリックすると、履歴からセッションを削除できます。

チャットセッションをJSONファイルにエクスポート

コマンドChat: Export Sessionを追加しました。これは、現在フォーカスされているチャットセッションをJSONファイルにエクスポートします。その後、Chat: Import Sessionコマンドを実行してこのセッションをインポートし、会話を続けることができます。このファイルをリポジトリにチェックインしたり、他の人と共有したり、後で参照するために会話を保存したりできます。インポートされたチャットセッションで会話を続ける場合、セッションを再度エクスポートしない限り、新しいメッセージは保存されないことに注意してください。

コードブロックのナビゲーションとキーバインディング

チャットの応答にあるコードブロックの操作を容易にするコマンドとキーバインディングを追加しました。Chat: Next Codeblock (⌥⌘PageDown (Windows, Linux Ctrl+Alt+PageDown)) と Chat: Previous Codeblock (⌥⌘PageUp (Windows, Linux Ctrl+Alt+PageUp)) は、現在のチャット応答の次または前のコードブロックにカーソルを移動します。コードブロックにフォーカスがある場合、コードブロックツールバーのコマンドはコマンドパレットからも呼び出すことができます。また、キーバインディングを割り当てることも可能です。Run in Terminal にはデフォルトで ⌃⌥Enter (Windows, Linux Ctrl+Alt+Enter) のキーバインディングが割り当てられています。そして、コードブロック内で選択せずに通常のコピーキーバインディングを押すと、Copy コマンドが実行されるようになりました。

チャットウィンドウにフォーカスを当てるキーバインディング(⌃⌘I (Windows, Linux Ctrl+Alt+I))と、チャットセッションをクリアするキーバインディング()も追加されました。

Copilot YouTubeプレイリスト

GitHub Copilotに関する詳細情報、ヒントやコツ、ベストプラクティスについては、YouTubeのVS Code Copilotシリーズをご覧ください。そこでは、GitHub Copilotの紹介言語固有の使用方法、および開発でCopilotを使用する際の効果的なプロンプトに関するガイダンスを見つけることができます。

Python

専用ターミナルでPythonファイルを実行

Python拡張機能は、エディター上部の実行ボタンまたはPython: ターミナルでPythonファイルを実行コマンドを使用して実行するファイルごとに新しいターミナルを作成し、再実行するたびにそのファイルの「専用」ターミナルを使い続けます。

いつでも同じファイルを別のターミナルで実行したい場合は、実行ボタンメニューの下にあるPython: 専用ターミナルでPythonファイルを実行を選択できます。

Options under the run button menu

テストの発見と実行の書き換え

今月、私たちはテストの書き換えを実験として展開し始めています。この書き換えは、拡張機能のunittestとpytestの両方のテストの発見と実行のアーキテクチャを再設計します。ユーザーに公開される追加機能はありませんが、バグのある動作を減らし、今後の新しい機能の機会を開きます。書き換えは実験pythonTestAdapterの背後で展開されており、settings.jsonpython.experiments.optIntoを使用してオプトインおよびオプトアウトできます。最終的には、この設定を削除し、この新しいアーキテクチャを採用する予定です。この実験または書き換えに関してコメントや提案があれば、vscode-pythonリポジトリで共有できます。

Pylanceによるインデックス作成制限の構成

ファイル数インデックス作成の制限を構成できる新しいPylance設定があります: "python.analysis.userFileIndexingLimit"。デフォルトは2000です。この設定は、非常に大規模なプロジェクトで作業している場合に、強化されたIntelliSenseエクスペリエンスのためにパフォーマンスを妥協してもよい場合に役立ちます。

Jupyter

リモートJupyterカーネルに対するセルの実行を再開

Jupyter拡張機能は、VS Codeをシャットダウンした後にノートブックを再開した場合でも、セルがまだ実行中であれば、既存のJupyterサーバーに対してセルの実行を再開できるようになりました。

たとえば、リモートJupyterカーネルに対してモデルのトレーニングなど、長時間実行されるコードセクションを実行するとします。これには数分以上かかる可能性があるため、途中でVS Codeをシャットダウンすることにしたとします。数分後、VS Codeが再起動され、同じノートブックが開かれ、セルがまだ実行中であれば、この状態がノートブックセルに反映され、新しい出力がセル出力に表示されます。

一方、VS Codeがシャットダウン中にセルの実行が完了した場合、その間に生成された出力はノートブックに保存されません。このように実行を再開して新しい出力を表示する機能は、プレーンテキスト、HTML、画像など、単純な出力に限定されます。ウィジェットやその他の複雑な出力の状態を復元することはサポートされていません。

Resuming notebook cell execution after closing and reopening VS Code

GitHubプルリクエストと課題

プルリクエストと課題の作成、管理、作業を可能にするGitHub Pull Requests and Issues拡張機能はさらに進化しました。主なハイライトは以下の通りです。

  • チェックアウトされたPRの差分を表示するための2つの新しいアクション: Compare Base With Pull Request Head (readonly)Compare Pull Request Head with Local
  • 新しい設定"githubPullRequests.pullPullRequestBranchBeforeCheckout"は、以前にチェックアウトしたPRブランチを再度チェックアウトする際に、そのブランチをプルしないようにするために使用できます。

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

プレビュー機能

insiders.vscode.devでのプロジェクト全体のJS/TS IntelliSense

vscode.devは、ブラウザで完全に動作する軽量版のVS Codeです。今回のイテレーションでは、vscode.devのJavaScriptとTypeScriptのサポートを大幅に強化し、現在開いているファイルに限定されず、ワークスペース内のすべてのファイルを分析できるようになりました。これにより、コードのナビゲーションが大幅に改善され、シンボルのGo to DefinitionFind All Referencesが可能になります。また、tsconfig.json / jsconfig.jsonの設定が尊重されることで、IntelliSenseも改善されます。コード記述中の自動インポートもサポートされるようになりました。

下の画像では、参照ビューにワークスペース内のITextDocumentへのすべての参照が表示されています。

Find All References in a TypeScript project on vscode.dev

これらの新しいIntelliSense機能は、ローカルマシンから開いたフォルダーや、vscode.devの組み込みのGitHub Repositories拡張機能を使用して開いたGitHubリポジトリで機能します。

ただし、vscode.devのJS/TS IntelliSenseにはまだいくつかの制限がありますのでご注意ください。

  • 現在、サードパーティライブラリに対するIntelliSenseのサポートはありません。
  • 現在、JavaScriptプロジェクトに対する自動型取得のサポートはありません。
  • 上記の制限により、vscode.devではすべての型エラーが無効になっています。
  • プロジェクト全体のIntelliSenseは現在、vscode.devのInsidersバージョン(insiders.vscode.dev)でのみ有効です。この機能は現在github.devでは無効になっています。

今後、これらの制限に対処し、WebでのJavaScriptとTypeScriptのサポートをさらに充実させていく予定です!

ターミナル内の画像

ターミナル内の画像に対する実験的なサポートが追加されました。ターミナル内の画像は通常、画像ピクセルデータをテキストとしてエンコードし、特殊なエスケープシーケンスを介してターミナルに書き込むことで機能します。現在サポートされているプロトコルは、sixeliTermが先駆けて開発したインライン画像プロトコルです。

この機能を有効にするには、次のように設定します。

"terminal.integrated.experimentalImageSupport": true

有効にしたら、テストするには、libsixelリポジトリから.sixのサンプルファイルをダウンロードしてcatコマンドで表示できます。

Running cat with a sixel file will print an image

または、png、gif、jpgファイルでimgcat Pythonパッケージまたはimgcatスクリプトを使用してください。

Running imgcat with a png file will print the image

この機能の現在の制限は以下の通りです。

TypeScript 5.2のサポート

このアップデートには、近日公開されるTypeScript 5.2リリースのサポートが含まれています。TypeScriptチームが現在取り組んでいることの詳細については、TypeScript 5.2イテレーション計画を確認してください。今後のエキサイティングなツールハイライトには、以下が含まれます。

  • 新しいインライン定数リファクタリング。
  • シンボルを既存のファイルに移動できる新しいファイルへの移動リファクタリング。

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

JavaScriptとTypeScriptのファイルへの移動リファクタリング

TypeScript 5.2のナイトリービルドに搭載されているファイルに移動リファクタリングでは、クラス、関数、または定数を既存のファイルに移動できます。これにより、シンボルへのすべての参照が自動的に更新され、必要に応じてインポートも更新されます。

ファイルに移動を選択すると、VS Codeは現在のTypeScriptまたはJavaScriptプロジェクト内のすべてのファイルのリストを表示します。入力すると、目的のファイルをすばやく見つけることができます。

あるいは、既存のファイルを選択...を使用して通常のファイルピッカーでファイルを選択したり、新しいファイルパスを入力...を使用して作成する新しいファイルを指定したりすることもできます。

この機能はまだ活発に開発中ですので、ぜひ試してみてフィードバックをお寄せください!

Web版VS CodeにおけるWebAssembly

vscode.devにプログラミング言語のサポートを追加するために、VS CodeチームはWeb版VS Codeで一般的なWebAssemblyを実行する方法を調査してきました。このアプローチに興味があり、詳細を知りたい場合は、最近のVS CodeとWebAssemblyのブログ記事をご覧ください。

拡張機能作成

ローカルファイルに対するvscode.fsパフォーマンスの改善

vscode.fs APIを使用してファイルを操作する場合(そうすべきです!)、拡張機能ホストにローカルなファイルに対する操作は、はるかに高速に解決されるようになりました。

以前は、拡張ホストはこれらの操作をVS Codeクライアントに実行を委任していましたが、現在は拡張ホスト内で直接実行されるため、ラウンドトリップが削減されます。

より厳密なステータスバーAPI

ステータスバー項目を作成するAPIであるcreateStatusBarItemは、拡張機能に識別子を渡すことを許可します。この識別子は、ステータスバー項目の非表示と表示を制御するために使用されます。識別子は拡張機能に対して一意であるべきですが、これまでは強制されていませんでした。このリリースでは、これを少し厳密にし、同じ拡張機能によって同じ識別子で作成されたステータスバー項目は、1つにマージされるようになりました。

タスク

タスク完了時にターミナルを閉じるタスク表示オプションが確定されました。

提案されたAPI

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

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

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

EnvironmentVariableCollection.description

この提案は、EnvironmentVariableCollectionの記述を指定することを可能にし、ターミナルタブのホバーでユーザーに表示され、変更が正確に何を行っているのかを説明します。

// Example of what the Git extension could use
context.environmentVariableCollection.description = 'Enables a Git authentication provider';

Environment variable collection descriptions are explained in a terminal tab's hover

EnvironmentVariableMutator.options

この提案は、EnvironmentVariableMutatorに提供できるオプションを追加し、環境変数の変更がいつ適用されるかを正確に指定できるようにします。これは、プロセス作成時またはシェル統合スクリプト内(シェル初期化スクリプト実行後)のいずれかです。

const collection = context.environmentVariableCollection;
// Apply only when the process is created
collection.replace('FOO', 'bar');
// Apply only during the shell integration script
collection.replace('FOO', 'bar', {
  applyAtProcessCreation: false,
  applyAtShellIntegration: true
});
// Apply twice, during process creation and the shell integration script
collection.replace('FOO', 'bar', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

共有プロバイダー

Share API提案により、拡張機能はVS Codeでリソースを共有する方法を提供できます。

共有プロバイダーの結果は現在、最上位の共有...コマンドパレットアクションとして、またコマンドセンターの近くに新しいアイコンとして表示されます。ただし、"workbench.experimental.share.enabled": trueおよび"window.commandCenter": trueを有効にしている必要があります。

フィードバックは、API提案課題 #176316に残すことができます。

静的ステータスバー項目

ステータスバー項目は、package.json#contributes/statusBarItemsを介して静的に貢献できるようになりました。この貢献ポイントを使用すると、拡張機能はステータスバー項目が操作されたとき(たとえば、コマンド上で)にのみアクティベートするように、アクティベーションを遅延させることができます。アクティベートされると、拡張機能はvscode.window.createStatusBarItem APIを介して静的ステータスバー項目にアクセスできます。

workspace.save と workspace.saveAs

保存エディターAPI提案により、拡張機能はエディターをリソースに保存したり、ユーザーにリソースの提供を求めたりするフローをトリガーできます。

すべての保存メソッドは、結果のUriを返します。操作がキャンセルされた場合はundefinedを返します。未保存のファイルは、パスが関連付けられていない限り、常にユーザーに保存先を尋ねます。

Authentication authGetSessions 提案API

複数GitHubアカウントサポートに向けて進む中で、拡張機能が特定のスコープセットに対するアクセス可能なすべてのセッションを取得できるようにする新しい提案認証APIがあります。これらのAPI追加の提案には、いくつかの注目すべき点があります。

  • 拡張機能がアクセスできる各アカウントのセッションを取得するためのvscode.authentication.getSessionsの導入。追加のアカウントを要求したい場合は、ユーザーにアカウントを選択するように求めるために{ createIfNone: true, clearSessionPreference: true }を使用します。
  • forceNewSessionプロパティは、{ sessionToRecreate: session }オブジェクトを受け取るようになりました。これにより、利用する拡張機能は、再作成したい正確なセッションを指定できます。
  • 認証プロバイダーが実装するcreateSession関数は、再作成するセッションを受け取るようになりました(forceNewSessionの値にtrueが使用された場合、拡張機能のセッション設定を使用)。

GitHub認証拡張機能での採用に向けてはまだ作業が必要ですので、興味がある方はこの提案を追跡している課題でフィードバックを提供してください。

ウィンドウアクティビティAPI

ウィンドウがアクティブまたは非アクティブになったときに拡張機能に通知する新しいAPIが利用可能になりました。これは、リソースを節約するためにアイドル状態にできる永続的なリソースやプロセスの破棄または作成に使用できます。

これは、既存のWindowStateタイプに新しいactiveブール値を追加することで実装されています。

vscode.window.onDidChangeWindowState(state => {
  if (state.active && !longRunningProcess) {
    longRunningProcess = startLongRunningProcess();
  } else if (!state.active && longRunningProcess) {
    longRunningProcess.end();
    longRunningProcess = undefined;
  }
});

エンジニアリング

Electronサンドボックスがすべてのユーザーに有効化

Electronサンドボックスがすべてのユーザーに展開されることを発表できることを嬉しく思います。これは2020年初頭に始まった旅であり、ついに終わりを迎えました。詳細については、VS Codeをプロセスサンドボックス化に移行するブログ記事を参照してください。

拡張機能ホストの再起動への参加

ワークベンチ内の特定のアクションは、現在のウィンドウを再読み込みすることなく拡張機能ホストを再起動させる可能性があります。たとえば、プロファイルを切り替えると、VS Codeは異なる拡張機能セットを実行するために拡張機能ホストを再起動します。

しかし、一部のカスタムエディターやノートブックエディターは、必要な拡張機能がそのプロファイルにインストールされていないため、プロファイルを切り替えた後に機能しなくなる可能性があります。エディターに未保存の変更がある場合、データ損失が発生する可能性があります。これを修正するため、VS Codeのコンポーネントは拡張機能ホストの再起動に参加し、拡張機能ホストが再起動する前に未保存の変更がすべて保存されるようにできるようになりました。

次のマイルストーンでこのエクスペリエンスをさらに発展させる予定ですので、ご期待ください!

Windows 8 および 8.1 のサポート終了

v1.77リリースノートで述べたように、v1.79はWindows 8 / Windows Server 2012およびWindows 8.1 / Windows Server 2012 R2をサポートする最後のリリースです。詳細については、FAQを参照してください。

マイルストーンの自動化

すべてのGitHubリポジトリで、マイルストーンの自動レプリケーションを実装しました。これにより、microsoft/vscodeで確立された月次マイルストーンが、作成および維持される他のすべてのマイルストーンの基盤となります。

Microsoft BuildでのVS Code

Microsoft Build 2023をライブで視聴できなかった場合でも、Microsoft Developer YouTubeチャンネルで基調講演やセッションを視聴できます。

VS Codeユーザーにとって特に興味深いセッションには、以下が含まれます。

注目すべき修正点

  • 165933 [emmet] http-equiv="X-UA-Compatible" (2023年)
  • 181889 treeView.reveal with expand: 3は、最初のレベル3フォルダのみを展開する

ありがとうございます

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

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-css-languageserviceへの貢献者

vscode-js-debugへの貢献者

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

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