🚀 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: 新機能をいち早く試したいですか? nightly 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で、設定エディターの列挙設定オプションの説明が読み上げられるようになりました。files.autoSaveeditor.accessibilitySupportなどの列挙設定で試してみてください。

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

ワークベンチ

読み取り専用モード

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

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

  • files.readonlyInclude - 一致する場合にファイルを読み取り専用にするパスまたはglobパターン。
  • files.readonlyExclude- files.readonlyIncludeに一致する場合に、ファイルを読み取り専用からスキップするパスまたはglobパターン。
  • files.readonlyFromPermissions - ディスクに書き込み権限がないファイルは読み取り専用にするかどうか。

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

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

  • アクティブなエディターをセッションで読み取り専用に設定 - アクティブなエディターを読み取り専用としてマークします。
  • アクティブなエディターをセッションで書き込み可能に設定 - アクティブなエディターを書き込み可能としてマークします。
  • アクティブなエディターをセッションで読み取り専用を切り替え - 読み取り専用と書き込み可能を切り替えます。
  • アクティブなエディターをセッションで読み取り専用をリセット - セッション状態をリセットします。

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リモート編集機能の最良のエクスペリエンスを得るには、低遅延の良好なネットワーク接続が必要です。このマイルストーンでは、遅延が非常に大きい場合やネットワーク接続がオフラインになっていると思われる場合にフィードバックを提供するために、ステータスバーのリモートインジケーターを更新しました。

高遅延(Web、デスクトップ)

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

Slow network detection shown in the right of the Status bar

オフライン検出(Webのみ)

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

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

作業の継続

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

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

エディター

貼り付け形式

テキストエディターにファイルを貼り付ける場合、挿入する方法は複数考えられます。ファイルの絶対パスを指すようにしたい場合があります。現在のワークスペースに対する相対パスが必要な場合があります。または、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

クイックサジェストとスニペット

クイックサジェストとは、⌃Space (Windows、Linux Ctrl+Spaceを押さなくても、入力時にVS Codeがサジェストを表示することを意味します。この機能は広く普及しており、すべてのサジェストセッションの約90%が入力によって開始されます。多くのサジェストがTabEnterや入力アクセプト文字ではなく)で受け入れられます。

スニペットが挿入されている場合、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とのブランチピッカー統合

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

下の短いビデオでは、ブランチピッカーのドロップダウンリストに表示される各ブランチの右側に、GitHubで開くまたはvscode.devでチェックアウトするためのボタンがあります。

類似性しきい値

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

ノートブック

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

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

改善されたセル出力インタラクション

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

実行時にフォーマット

ノートブックは、セル実行時にセルをフォーマットできるようになりました。これは、セルを実行すべて実行上/下を実行、およびカーネル+実行の組み合わせコマンドを使用するとトリガーされます。この機能は、"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

リンク編集を開始コマンドを使用して、リンク編集を明示的に開始することもできます。

F2を使用して一致するJSXタグの名前を変更する

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

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

この動作を無効にするには、javascript.preferences.renameMatchingJsxTagsおよびtypescript.preferences.renameMatchingJsxTagsを使用できます。

JSDoc @param 補完

JSDocコメントを記述するとき、VS Codeは不足しているすべてのパラメーターの候補を表示するようになりました。

JS Doc @param completions in a TypeScript file

これにより、ドキュメントをすばやく入力するのに役立ちます。

JavaScriptファイルでは、@param補完はパラメータータイプの説明のプレースホルダーを作成します。

Markdownのドロップまたは貼り付け時に外部メディアファイルをワークスペースにコピーする

Markdownドキュメントに画像またはビデオを追加したいですか?最初に手動でファイルをワークスペースにコピーしてから、ファイルへのリンクを追加するのに時間を費やす代わりに、ファイルをMarkdownにドロップまたは貼り付けるだけで済みます。ファイルが現在ワークスペースの一部でない場合、VS Codeは自動的にファイルをワークスペースにコピーし、ファイルへのリンクを挿入します。

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

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

markdown.copyFiles.destination

markdown.copyFiles.destination設定は、新しいメディアファイルの作成場所を制御します。この設定は、現在のMarkdownドキュメントに一致するglobを画像宛先にマッピングします。画像宛先は、いくつかの単純な変数も使用できます。使用可能な変数については、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という名前のファイルがあり、ワークスペースにimage.pngが既に存在するワークスペースのMarkdownドキュメントに貼り付けようとすると、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方言では、生のHTMLタグをMarkdownドキュメントで使用できます。このアップデートでは、VS CodeのMarkdown IntelliSense機能のほとんどを、これらのHTMLタグで使用されるファイルパスに拡張しました。これには、次のサポートが含まれます。

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

Markdownへのオーディオの挿入

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

JSON with Lines(JSONL)ファイルの構文の強調表示

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

リモート開発

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

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

  • (リモートトンネル、Dev Container経由で)新しいリモート接続を、現在のVS Codeウィンドウまたは新しいVS Codeウィンドウで開きます。
  • 転送されたポートを公開するためのワークフローが容易になりました。
  • VS Code for the Web(vscode.dev)からのWSLへの接続の予備サポート。

新しい拡張機能とバグ修正の詳細については、リモート開発リリースノートを参照してください。

拡張機能への貢献

GitHub Copilot

Stable VS CodeでCopilot Chatを使用する

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

エディターチャット

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

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

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

ノートブックの改善

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

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

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

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

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

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

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

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

"chat.experimental.quickQuestion.enable": true

機能の概要

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

チャットエントリの削除

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

A chat request with X icon

なぜこれを行うのですか? Copilotがトピックから外れたり、間違った応答を提供することがあります。質問をもう一度尋ねることができますが、セッションのチャット履歴から不適切な応答を削除すると、会話を軌道に乗せるのに役立つ場合もあります。各チャットリクエストに含めることができるコンテキストの量にも制限があるため、長い不適切な応答を削除すると、より有用な情報のためにコンテキスト予算を節約できる場合があります。

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

チャット: エディターを開くコマンドを実行して、エディターでチャットセッションを開くことはすでに可能でしたが、サイドバーとエディターの間でチャットセッションを前後に移動することも可能になりました。チャットビューのタイトルまたはエディターのタイトルメニューの「...」メニューの下にエディターでセッションを開くおよびサイドバーでセッションを開くコマンドがあります。

チャットセッション履歴

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

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

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

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

チャット応答でコードブロックを操作しやすくするいくつかのコマンドとキーバインディングを追加しました。チャット: 次のコードブロック⌥⌘PageDown (Windows, Linux Ctrl+Alt+PageDown))およびチャット: 前のコードブロック⌥⌘PageUp (Windows, Linux Ctrl+Alt+PageUp))は、カーソルを現在のチャット応答の次または前のコードブロックに移動します。コードブロックにフォーカスがある場合、コードブロックツールバーのコマンドはコマンドパレットから呼び出すことも、キーバインディングを割り当てることもできます。ターミナルで実行には、デフォルトでキーバインディングが割り当てられています。⌃⌥Enter (Windows, Linux Ctrl+Alt+Enter)。また、コピーコマンドは、選択範囲がない状態でコードブロックで通常のコピーキーバインディングを押すと実行されるようになりました。

チャットウィンドウにフォーカスするためのキーバインディング(⌃⌘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 をシャットダウンした後に Notebook を再度開いた場合でも、セルがまだ実行中である場合に、リモート Jupyter カーネルに対するセルの実行再開をサポートするようになりました。

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

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

Resuming notebook cell execution after closing and reopening VS Code

GitHub Pull Requests and Issues

GitHub Pull Requests and Issues拡張機能で、プルリクエストとissueの作業、作成、および管理ができるようになり、さらに進捗がありました。ハイライトは次のとおりです。

  • チェックアウトされた PR の差分を表示するための 2 つの新しいアクション:ベースとプルリクエストヘッドを比較(読み取り専用)プルリクエストヘッドとローカルを比較
  • 新しい設定"githubPullRequests.pullPullRequestBranchBeforeCheckout"を使用して、以前にチェックアウトした PR ブランチを再度チェックアウトするときに、そのブランチをプルしないようにすることができます。

その他のハイライトについては、拡張機能のchangelog for the 0.66.0リリースを確認してください。

プレビュー機能

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

vscode.devは、ブラウザで完全に実行される軽量バージョンの VS Code です。今回のイテレーションでは、vscode.dev の JavaScript および TypeScript のサポートを大幅に強化し、現在開いているファイルに限定されず、ワークスペース内のすべてのファイルを分析できるようにしました。これにより、コードのナビゲーションが大幅に改善され、シンボルへの定義へ移動すべての参照を検索が可能になります。また、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

または、imgcat python パッケージまたはimgcat スクリプトを png、gif、または jpg ファイルで使用します。

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におけるWebAssemblies

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

拡張機能の作成

ローカルファイルに対する 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
});

共有プロバイダー

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

共有プロバイダーの結果は現在、トップレベルの共有...コマンドパレットアクションとして、およびコマンドセンターの近くの新しいアイコンとして表示されます。"workbench.experimental.share.enabled": trueおよび"window.commandCenter": trueでオプトインした場合。

フィードバックは、API 提案 issue #176316に残してください。

静的ステータスバー項目

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

workspace.save および workspace.saveAs

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

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

認証 authGetSessions 提案された API

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

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

GitHub 認証拡張機能で採用できるようにするには、まだ多くの作業が必要ですので、興味がある場合は、この提案を追跡する issue でフォローしてフィードバックを提供してください

ウィンドウアクティビティ 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 は拡張機能ホストを再起動して、そのプロファイルに対して異なる拡張機能セットを実行するように処理します。

ただし、一部のカスタムエディターおよび Notebook エディターは、プロファイルを切り替えた後、必要な拡張機能がそのプロファイルにインストールされていないため、機能しなくなる可能性があります。エディターに未保存の変更がある場合、データが失われる可能性があります。修正として、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] 2023 年の http-equiv="X-UA-Compatible"
  • 181889 treeView.reveal で expand: 3 を指定すると、最初のレベル 3 フォルダーのみが展開される

謝辞

最後になりましたが、VS Code のコントリビューターの皆様に心から感謝申し上げます

Issue トラッキング

Issue トラッキングへの貢献

プルリクエスト

vscodeへの貢献

vscode-css-languageserviceへの貢献

vscode-js-debugへの貢献

  • @NotAndOr (notandor): ディレクトリジャンクションなしでユーザーデータディレクトリを指定してブラウザを起動。 PR #1656

vscode-pull-request-githubへの貢献

monaco-editorへの貢献