2021年8月 (バージョン 1.60)
更新 1.60.1: この更新プログラムでは、これらの問題に対処しています。
更新 1.60.2: この更新プログラムでは、これらの問題に対処しています。
ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap
Visual Studio Code 2021年8月リリースへようこそ。今回のバージョンには、皆さんに気に入っていただけるような多くのアップデートが含まれています。主なハイライトは以下の通りです。
- 自動言語検出 - VS Codeに貼り付ける際にプログラミング言語を検出します。
- 組み込みの高速な括弧の強調表示 - 大規模なファイルでも高速な括弧のマッチングと強調表示。
- 設定エディターのシンタックスハイライト - 設定説明のコードブロックに対する豊富なシンタックスハイライト。
- カスタムターミナルグリフのレンダリング - ボックス描画文字やブロック要素文字の表示を改善。
- デバッグウォッチ値の設定 - デバッグセッション中にウォッチしている値を変更。
- ノートブックの改善 - Markdownリンクナビゲーション、大量の出力の高速レンダリング。
- JavaScript/TypeScript インレイヒント - パラメーター名や型などのインラインヒント。
- ロックされたエディターグループのプレビュー - エディターグループをロックして、お好みのエディターレイアウトを維持。
- Python拡張機能のテスト更新 - テストの検出、ナビゲーション、ステータスに対するより良いサポート。
- Web拡張機能作成者ガイド - ブラウザー版VS Code向けに拡張機能を更新する方法を学ぶ。
これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com の 更新 にアクセスしてください。
このリリースの新機能のデモをご覧になり、ライブで質問するには、9月2日木曜日の太平洋時間午前8時 (ロンドン時間午後4時) に開催されるVS Codeチームのライブストリームにご参加ください。
Insiders: 新機能をいち早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。
ワークベンチ
自動言語検出
前回のリリースでは、未保存ファイルの内容に基づいて言語モードを自動的に設定する実験的な機能を導入しました。自動言語検出機能は、機械学習を使用して言語を推測し、機械学習モデルはすべてお使いのマシン上でローカルに実行されます。このモデルは、オープンソースのMLライブラリTensorflow.jsと、GitHubユーザー@yoeoによるGuesslangのMLモデルによって駆動されています。
今回のリリースでは、自動言語検出を既定で有効にし、さらにファイル拡張子を持たないファイルにも検出を拡大しています。ノートブックでは、言語ピッカーを使用して言語検出を簡単に要求する方法を提供しています。
この機能を追加したのは、VS Codeの新規ユーザーの中には、言語モードの設定方法を知らず、VS Codeの豊富な機能セット(言語のカラー化や拡張機能の推奨など)を利用するためにこれが必要であることを知らない人がいることが分かったためです。新規ユーザーがVS Codeで利用可能な言語機能や拡張機能を素早く確認できるようにすることで、エディターの習熟を助けます。
さらに、未保存のテキストエディターをメモ帳として使用するパワーユーザーは、明示的に言語モードを設定する必要がなくなり、ワークフローが効率化されることを期待しています。
以下に、自動言語検出によって可能になったいくつかの便利なシナリオを示します。
オンラインから例をコピーして、未保存のエディターに貼り付ける
テーマ: Panda Theme
"Pipe into code" 言語検出 (拡張子なしファイルの検出のデモンストレーション)
テーマ: Panda Theme
ノートブックの言語ピッカーにある自動検出オプション
テーマ: Panda Theme
ターミナルエディターの確認ダイアログ
実行中の子プロセスを持つターミナルエディターを閉じるときに表示されるダイアログが、ターミナルエディターに特化され、「ターミナルを保存」するオプションが提供されなくなりました。
復元に失敗した場合でもエディターを閉じずに開いたままにする
以前は、ウィンドウの再読み込みやアプリケーションの再起動後にエディターの復元に失敗した場合、正常にロードされるエディターが見つかるまで自動的にエディターが閉じられていました。この動作は、エディターが閉じられたために慎重に作成されたエディターレイアウトが失われるという、不満の残る結果につながっていました。
今回のリリースでは、一度正常に開かれたエディターは、復元に失敗した場合でも閉じられることはありません。エディターは問題を示し、操作を再試行するオプションを提供します。
設定エディターにおけるコードブロックのシンタックスハイライト
設定の説明におけるフェンス付きコードブロックが、シンタックスハイライトされるようになりました。
設定エディターをサイドで開く
openToSide
引数を使用してキーバインディングを設定することで、設定エディターをサイドグループで開くことが可能になりました。
{
"key": "cmd+,",
"command": "workbench.action.openSettings",
"args": {
"openToSide": true
}
}
これはworkbench.action.openSettingsJson
コマンドでも機能します。
エディター
高性能な括弧ペアのカラー化
エディターがネイティブな括弧ペアのカラー化をサポートするようになりました。
括弧ペアのカラー化は、"editor.bracketPairColorization.enabled": true
を設定することで有効にできます。すべての色はテーマ設定可能で、最大6色を設定できます。
この機能は、CoenraadSによる有名なBracket Pair Colorizer拡張機能のパフォーマンス問題に対処するために実装されました。
これで、巨大なドキュメントの変更も即座に反映されます。
オートコンプリートにおけるインライン提案
オートコンプリートウィジェットが表示されているとき、インライン提案が提案プレビューを拡張できるようになりました。オートコンプリートウィジェットで選択された提案がインライン補完プロバイダーによって拡張できる場合、その拡張は斜体で表示されます。1回目のTab
キーを押すと、オートコンプリートの提案のみが受け入れられます。2回目のTab
キーを押すと、インライン提案が受け入れられます。
この機能には、提案プレビューが有効になっている必要があります ("editor.suggest.preview": true
)。
更新されたPeekビュー
Peekビューは、他のエディタービューと整合するように視覚的な刷新が行われました。
ターミナル
ボックス描画文字とブロック要素文字のカスタムレンダリング
GPUアクセラレーションが有効な場合 (terminal.integrated.gpuAcceleration
)、ボックス描画文字とブロック要素文字は、フォントを使用する代わりにピクセルパーフェクトなカスタムグリフを使用するようになりました。これは、例えば、ターミナルで行の高さや文字間隔を設定しても、ボックスが隙間なく描画されることを意味します。
セクションの周囲にボックス描画文字、チャートにブロック要素が表示されているターミナルアプリZenithの例です。
これは"terminal.integrated.customGlyphs": false
を設定することで無効にできます。
特定のフォントでのアンダースコアのレンダリング改善
ターミナルでのアンダースコアのレンダリングにはいくつかの歴史的な問題があり、そのほとんどはWebGLレンダラー(デフォルト)に切り替えることで修正されました。これには1つの例外があり、Linuxではフォントのアンダースコア文字がセルの境界の下に予期せず描画されるというものでした。
下の行のアンダースコアがセルの下にレンダリングされていることに注目してください。
これはほとんどの場合で問題なく機能しますが、キャンバスの境界外に描画されるため、一番下の行では失敗します。
現在、この問題は、そのようなフォントを検出し、アンダースコアのテクスチャがセルの境界内に収まるまで上にシフトさせることで回避しています。この解決策は、以前は行の重複を避けるために行をクリップする方法が原因で、どの行にもアンダースコアを表示しなかったキャンバスレンダラーにも適用されます。
ウィンドウの再読み込み後のより高速な再接続
以前は、ウィンドウを再読み込みする際に、ターミナルのバッファーの状態を解析するのに最大300ミリ秒かかることがあり、破損の可能性もありました。複数のビジーなターミナルでは、これがすぐに積み重なっていました!これを修正するため、バッファーの復元方法が、ptyホスト上の多数の最近の生ターミナルイベントを記録する方法から、ptyホスト上にヘッドレスターミナルフロントエンドを維持し、すべてのデータをそこに書き込む方法に変更されました。
このアプローチにはいくつかの利点があります
- 復元するスクロールバックの量を細かく調整できます。デフォルトは現在100で、速度とデータ量の良好なバランスです。スクロールバック量は
terminal.integrated.persistentSessionScrollback
設定で変更できます。 - xterm.jsの高速パーサーのおかげで、これはCPU使用率への影響を最小限に抑え、ptyホスト上の全体的なメモリ使用量を削減するはずです。
- ターミナルモードは、以前は見落とされてバッファー破損の原因となる可能性があったものが、明示的に復元されるようになりました。
- ターミナルのバッファーはそのサイズと常に同期しているため、コストのかかるサイズ変更イベントをリプレイする必要はなくなりました。
- 復元は比較的速いため、すべて単一のフレームで処理されます。これにより、貴重なCPU時間が部分的に復元されたターミナルのレンダリングに費やされて、さらに処理が遅くなるということがなくなります。
この新しい実装がどの程度の高速化を提供するは、ターミナルの数、ハードウェア、ターミナルバッファーサイズ、ターミナルで何が起こっていたかなど、多くの要因によって異なります。完全なターミナルバッファーを復元した場合の概算速度向上は、およそ5〜10倍になるはずです。
また、新しいxterm-headlessパッケージをnpmで公開しましたので、ご自身のプロジェクトでこの作業をご利用いただけます。
デバッグ
ウォッチビューでの値の設定
ウォッチビューで、コンテキストメニューの値の設定アクションを使用して、ウォッチしている式の値を設定できるようになりました。
値の設定が利用可能になるには、デバッグ拡張機能がこの機能をオプトインする必要があります。現在、JS-debug、C#、C++の各拡張機能がこれをサポートしていますが、他のデバッグ拡張機能もまもなく追随すると予想されます。
マイナーなUI改善
-
VS Codeは、変数ビュー、ウォッチビュー、デバッグホバーでも値のリンクを検出するようになりました。変数の値がリンクである場合、クリックするだけでそのリンクをたどることが容易になります。
-
すでに実行中のデバッグセッションの別のインスタンスを開始しようとすると、誤って2つのセッションを開始するのを防ぐために、モーダル確認ダイアログが表示されるようになりました。
-
エディターのブレークポイントガターで無効なブレークポイントをクリックすると、そのブレークポイントが削除されるのではなく、有効になります。
-
デバッグセッションがアクティブな場合、エディターのブレークポイントガターのコンテキストメニューで行まで実行アクションが利用可能になりました。
新しい設定
-
デバッグセッション中に誤ってウィンドウを閉じるのを避けたい場合は、新しい設定
debug.confirmOnExit
を有効にできます。これをalways
に設定すると、ウィンドウを閉じるときにデバッグセッションを停止するかどうかを確認するプロンプトが表示されます。 -
新しい設定
debug.console.acceptSuggestionOnEnter
は、デバッグコンソールでEnter
キーを押したときに提案を受け入れるかどうかを制御します。Enter
キーはデバッグコンソールに入力された内容を評価するためにも使用されるため、このオプションはユーザーにEnter
キーを押したときの動作をより細かく制御する機会を与えます。
JavaScriptデバッグ
従来のNodeデバッガーは廃止されました
VS Codeは以前からNode.jsデバッガーを組み込んでおり、別途Chromeデバッガーも公開していました。昨年、Node.jsとChrome用の新しいデバッガーを導入し、VS Code 1.47 (2020年7月) 以降、それはデフォルトとなり、「オプトアウト」オプションも用意されていました。
今回のリリースで、古いデバッガーは製品から削除され、Marketplaceで非推奨とマークされました。新しいJavaScriptデバッガーをオプトアウトしなかったVS Codeユーザーの大多数の方にとっては、何も変わりません。
古いデバッガーが必要な場合(例えば、Node.js 6プログラムのデバッグなど)は、[Deprecated] Node Debugまたは[Deprecated] Debugger for Chrome拡張機能をインストールし、それぞれlegacy-node
またはlegacy-chrome
の起動タイプを使用できます。
非同期関数とNode.js内部でのステップ実行の改善
デバッガーのskipFilesを設定することで、非同期関数をステップ実行する際によくヒットするNode.jsの内部コードなど、特定のコードへのステップインを避けることができます。
しかし、Node.jsは「ブラックボックス化された」スクリプトを扱う際に常に正しい動作を示すわけではないため、今回のイテレーションではデバッガーに「合成ブラックボックス化」を導入しました。これにより、Node.jsプログラム、特に非同期関数へのステップイン時の信頼性が大幅に向上するはずです。
次回のリリースでは、デバッガーがNode.jsの内部をデフォルトでスキップするようにする予定です。
インストーラー
VS Codeをサポート対象ファイルタイプのデフォルトに登録する
Windows 11では、プログラムから開くを開くと共にメニューのトップに配置する新しいファイルエクスプローラーのコンテキストメニューが導入されました。この更新により、利用可能なすべてのエディターを見つけてデフォルトを変更することが容易になります。
新しいベストプラクティスに従い、Windowsのインストール中にVS Codeのチェックボックス関連付けられたファイルタイプの既定のエディターとしてVS Codeを登録するがデフォルトでチェックされるようになりました。また、関連付けられたファイルタイプのリストを見直し、より頻繁に開かれるファイルタイプを多く含むように拡張しました。
Windows 11上のMicrosoft Store
間もなく登場するWindows 11では、新しいMicrosoftストアがより伝統的なアプリケーションタイプとインストーラーをサポートできるようになります。Windows Insiderプログラムを通じてすでにWindows 11をテストしている場合は、ストアで検索することで、VS Codeの最新リリースを今日からインストールできます。インストールすると、当社のウェブサイトからユーザーインストールとして入手できるVS Codeと同じものが利用でき、更新は今日と同じようにアプリ内で処理されます。
ノートブック
Markdownセル間のリンク
ノートブックがMarkdownセル間のリンクをサポートするようになりました。
Markdownセル内のヘッダーへのリンクは、以下を使用して作成できます。
[Link text](#_header-slug)
header-slug
は、ヘッダーのテキストを小文字にし、スペースや特殊文字を-
に置き換えたものです。上記の例のリンクは、ヘッダー# Header Slug
に移動します。
大量の出力を扱う際のパフォーマンス改善
ノートブックにおける大量の出力の処理方法を最適化し、パフォーマンスを大幅に改善しました。
舞台裏では、VS Codeはノートブックの出力をUint8Arrayを使用してバイナリデータとして保存します。以前は、拡張機能ホストプロセスとレンダラープロセス間で出力データを転送する際、データはまず数値の配列に変換され、その後JSONにシリアル化されていました。
これがなぜパフォーマンスにとって悪いのかを理解するために、Hello Code!
というテキストを出力するノートブックを考えてみましょう。これは内部的にUint8Array
として保存されます。
new Uint8Array([72, 101, 108, 108, 111, 32, 67, 111, 100, 101, 33]);
そのデータは11バイト長です。古い実装では、そのバイナリデータをJSON文字列に変換していました。
'[72,101,108,108,111,32,67,111,100,101,33]';
この文字列は41バイト長で、元のデータの3.5倍以上のサイズです!これは転送するのに非常に多くの余分なバイトであり、受信側はこれをJSONとして解析して再びUint8Array
に変換する必要がありました。この解析は、数十MBサイズのノートブック出力にとって大きなボトルネックとなる可能性がありました。
新しい実装では、ノートブックの出力は転送中にバイナリデータとして保持されます。この実装の詳細については、プルリクエストで詳しく読むことができます。
この修正により、大量の出力を保存したノートブックの読み込みと、ノートブック実行時に大量の出力を生成する際のパフォーマンスが大幅に向上します。
onNotebookアクティベーションイベントの改善
VS Codeは、ワークスペースでノートブックが開かれたときにonNotebook:{type}
およびonNotebook:*
イベントを発行し、これらのイベントをリッスンしているノートブック拡張機能がアクティブ化されるようにします。以前は、VS Codeはファイルを開く前にこれら2つのイベントをリッスンしているすべての拡張機能を待っていましたが、現在は特定のノートブックのシリアライザーが登録されるのを待つだけになりました。例えば、ユーザーが新しいワークスペースでipynb
ファイルを開くと、組み込みのipynb
シリアライザー拡張機能がアクティブ化され、ファイルがすぐに開かれます。同時に、VS Codeは他のすべての拡張機能(例: Jupyter、.NET Interactive、Julia拡張機能)にアクティベーションイベントを発行します。他の拡張機能のアクティベーションは、高速なノートブックのオープンを保証するためにファイル操作を遅くすることはありません。
ノートブックのレイアウトカスタマイズ
エディターのツールバーから直接、ノートブックのレイアウト設定をカスタマイズできるようになりました。
言語機能
TypeScript 4.4
VS CodeにTypeScript 4.4が組み込まれました。このアップデートでは、静的ブロックや新しい厳密性オプションなど、多数の新しい言語機能と改善がサポートされます。また、新しいツール機能の改善といくつかの重要なバグ修正も含まれています。
TypeScript 4.4の詳細は、TypeScriptブログでご確認いただけます。
JavaScriptとTypeScriptのインレイヒント
TypeScript 4.4で最も重要な新しいツール機能は、インレイヒントのサポートです。インレイヒントは、ソースコードにインラインで追加情報を提供し、コードの動作を理解するのに役立ちます。
例えば、パラメーター名インレイヒントは、関数呼び出しにおけるパラメーター名を表示します。
これにより、各引数の意味を一目で理解でき、ブール値のフラグを取る関数や、混同しやすいパラメーターを持つ関数に特に役立ちます。
パラメーター名ヒントを有効にするには、javascript.inlayHints.parameterNames.enabled
またはtypescript.inlayHints.parameterNames.enabled
設定を行います。可能な値は3つあります。
none
- パラメーターインレイヒントを無効にします。literals
- リテラル (文字列、数値、真偽値) のみにインレイヒントを表示します。all
- すべての引数にインレイヒントを表示します。
さらに、VS Codeは、JavaScriptおよびTypeScriptコードにおける暗黙の型情報を表示するインレイヒントも提供します。
変数型のインレイ ヒント は、明示的な型アノテーションを持たない変数の型を表示します。
設定 - javascript.inlayHints.variableTypes.enabled
および typescript.inlayHints.variableTypes.enabled
プロパティ型のインレイ ヒント は、明示的な型アノテーションを持たないクラス プロパティの型を表示します。
設定 - javascript.inlayHints.propertyDeclarationTypes.enabled
および typescript.inlayHints.propertyDeclarationTypes.enabled
パラメーター型のヒント は、暗黙的に型付けされたパラメーターの型を表示します。
設定 - javascript.inlayHints.parameterTypes.enabled
および typescript.inlayHints.parameterTypes.enabled
戻り値の型インレイ ヒント は、明示的な型アノテーションを持たない関数の戻り値の型を表示します。
設定 - javascript.inlayHints.functionLikeReturnTypes.enabled
および typescript.inlayHints.functionLikeReturnTypes.enabled
今後もインレイヒントの改善を続けていく予定ですので、新しい機能に関するご意見やご感想をぜひお寄せください!
JavaScriptファイルでのスペル提案
VS Codeは、JavaScriptファイルでの簡単なスペルミスを検出するのに役立ちます。
スペル提案は、それが実際の誤りであり、IntelliSenseエンジンが理解できない単なるコードパターンではないという、かなり高い確信がある場合にのみ表示されます。この機能が追加されたPRで詳細を読むことができます。
これらの提案は、以下を設定することで無効にすることもできます。
"javascript.suggestionActions.enabled": false
より包括的なチェックを行うには、JavaScriptコードで完全なセマンティックチェックを有効にすることを試してください。これはより多くのエラーを検出するのに役立つだけでなく、いくつかの便利なクイックフィックスも有効にします。
typescript.tsserver.useSyntaxServer
新しいtypescript.tsserver.useSyntaxServer
設定を使用すると、TypeScriptがコードの折りたたみ計算など、構文関連の操作を迅速に処理するための専用サーバーを起動するかどうかを制御できます。これは、現在非推奨となっているtypescript.tsserver.useSeparateSyntaxServer
設定に代わるものです。
可能な値は次のとおりです。
auto
- 完全なサーバーと、構文操作に特化した軽量なサーバーの両方を起動します。構文サーバーは、コードの折りたたみなどの構文操作を高速化し、プロジェクトの読み込み中にIntelliSenseを提供するために使用されます。(デフォルト)always
- すべてのIntelliSense操作を処理するために軽量の構文サーバーを使用します。この構文サーバーは、開いているファイルに対してのみIntelliSenseを提供できます。never
- 専用の構文サーバーを使用しません。すべてのIntelliSense操作を処理するために単一のサーバーを使用します。
プレビュー機能
ロックされたエディターグループ
エディター領域でのターミナルの導入により、ターミナルエディターがファイルエディターに簡単に、あるいは誤って置き換えられてしまうことに不満を感じるユーザーからの報告を受けました。デフォルトでは、ファイルは常にアクティブなエディターグループで開かれるため、ターミナルがアクティブな場合でも、ファイルが開かれてターミナルが隠れていました。
ロックされたエディターグループは、この問題に対処する新しい方法を提供します。ターミナルだけでなく、あらゆるエディターに適用されます。複数のエディターグループを開いている場合、新しいコマンドを使用するか、"..."オーバーフローメニューから、それらをロックできるようになりました。
ロックされたグループは、ロック解除されたグループとは異なる動作をします。
- 新しいエディターは、ユーザーが明示的にそこに移動しない限り(例:ドラッグ&ドロップ)、ロックされたグループでは開きません。
- エディターがロックされたグループを開くのをスキップした場合、それは最近使用したロック解除されたグループで開かれるか、ロックされたグループの隣に新しいグループを作成します。
- エディターグループのロック状態は、再起動後も保持され、復元されます。
- 空のグループもロックできるため、より安定したエディターレイアウトが可能になります。
- ロックされたグループは、アクションツールバー(右上)の鍵アイコンで示されます。
ロックされたエディターグループが実際にどのように動作するかを示す以下のデモをご覧ください。Markdownプレビューがアクティブであっても、新しいファイルは左側のエディターグループで開かれます。
この機能のために追加されたコマンドは次のとおりです。
workbench.action.experimentalLockEditorGroup
workbench.action.experimentalUnlockEditorGroup
workbench.action.experimentalToggleEditorGroupLock
新しいコンテキストキーactiveEditorGroupLocked
が利用可能になり、グループのロック状態に応じて条件付きでコマンドをバインドできます。
注: 関連する設定とコマンドは、ロックされたエディターグループの設計が最終決定されるまで実験的なものです。この新機能に関するフィードバックをお待ちしておりますので、お気軽に問題を報告してください。
エディターグループの自動ロック
新しいロックされたエディターグループの概念を基盤として、新しいworkbench.editor.experimentalAutoLockGroups
設定を使用すると、開いたときに自動的にグループをロックするエディターを選択できます。これは、エディターがそれ以外は空または新しいグループで最初に開く場合にのみ適用されます。
ターミナルはデフォルトで新しいグループを自動的にロックするように設定されています。以下の短いビデオでは、ターミナルがアクティブであっても、ターミナルから選択されたファイルは左側のエディターグループで開かれます。
Markdownプレビューが自動的にグループをロックするようにしたい場合は、experimentalAutoLockGroups
設定にmainThreadWebview-markdown.preview: true
を追加できます。
次のマイルストーンでは、エディターの識別子を知らなくてもエディターを選択できるように、設定のUXを改善する作業を行います。関連する設定とコマンドは、ロックされたエディターグループの設計が最終決定されるまで実験的なものです。繰り返しになりますが、皆様のフィードバックをお待ちしております。
「ファイル名で検索」クイックピックでの引用符サポート
今回のイテレーションでは、「ファイル名で検索」クイックピック (⌘P (Windows、Linux Ctrl+P)) から、検索文字列を引用符で囲むことで、ファジー検索の結果を除外する機能を追加しました。
この機能が光るシナリオ
クエリが数文字しかない場合
結果の「乱雑さ」を減らしたい場合
この引用符による検索体験は直感的で、多くの検索エンジンが同様のメカニズムを使用しているため、気に入っていますが、皆様からのフィードバックをお待ちしております。また、issue #131431で議論されている他のアプローチも検討しています。
拡張機能への貢献
Jupyter
行単位実行
VS CodeはJupyterノートブックで行単位実行機能をサポートするようになりました。これは、セルのコードを行ごとに実行できるシンプルなデバッグモードです。試すには、選択したカーネルとしてipykernel
v6以上がインストールされていることを確認し、行単位実行ボタンを選択してください。
デバッグ
VS Codeのフルデバッグ機能を使用してJupyterノートブックをデバッグするための実験的なサポートもあります。試すには、選択したカーネルとしてipykernel
v6以上がインストールされていることを確認し、"jupyter.experimental.debugging": true
を設定し、ブレークポイントを設定して、セルをデバッグコマンドを選択してください。
Jupyterキーマップ
Jupyterのクラシックキーバインディングは、別のJupyter Keymap拡張機能として抽出されました。マーケットプレイスの別のノートブックキーバインディングのセットを使用したい場合は、これを無効にできます。
Python
刷新されたテストインターフェース
新しいテストAPIのおかげで、Python拡張機能のテスト機能が刷新されました。テストの検出、ナビゲーション、ステータスレンダリングがより安定した体験で利用できるようになったほか、テストの検索、テストの選択実行、最後に実行されたテストの再実行など、新しい機能も追加されました!
エディターからターミナルでPythonファイルを実行およびデバッグ
Python拡張機能を使用すると、エディターから直接ターミナルでPythonファイルを実行およびデバッグできるようになりました。
GitHubプルリクエストとIssue
GitHubプルリクエストとIssue拡張機能で長らく要望されていた、すべてのコメントを展開/折りたたむ機能が利用可能になりました。すべてのコメントは、コマンドGitHubプルリクエスト: すべてのコメントを展開とGitHubプルリクエスト: すべてのコメントを折りたたむを介して展開および折りたたむことができます。また、展開/折りたたみ状態を制御する設定githubPullRequests.commentExpandState
もあります。最後に、コメントUI内からすべてのコメントを折りたたむこともできます。
すべての新機能と更新について学ぶには、拡張機能の0.30.0リリースの完全な変更ログをご覧ください。
拡張機能作成
Web拡張機能
VS Codeがブラウザーで実行されている場合、拡張機能はブラウザー内でも実行される拡張機能ホストに読み込まれます。「Web拡張機能ホスト」はブラウザーによって制約され、拡張機能はローカルファイルシステムやプラットフォーム機能にアクセスできません。拡張機能の作成者がWeb版VS Codeでの実行をサポートするように拡張機能を更新するのを助けるため、Web拡張機能作成者ガイドが提供されています。ここでは、Web上で最適に機能する拡張機能の種類、VS Code APIへのアクセス方法、仮想ファイルシステムとの連携方法について学ぶことができます。
Web拡張機能ガイドに加え、yo code
拡張機能ジェネレーターにWeb拡張機能をスキャフォールドするオプションが追加され、コマンドラインからWeb拡張機能をテストするための@vscode/test-web
モジュールもサポートされるようになりました。
Web版Visual Studio Codeの動作を見たことがない場合は、GitHubリポジトリの<> Codeタブで'.'
(ピリオドキー) を押すと、ソースコードの閲覧と編集のためにWebベースのVS Codeが起動します。
コマンドの短いタイトル
コマンドのコントリビューションポイントでは、拡張機能がタイトル、カテゴリ、アイコンなど、コマンドのUIプロパティを定義できます。一方、メニューはコマンドを表示する「場所」であり、メニューはコマンドのUIプロパティの一部またはすべてを表示する場合があります。たとえば、一部のメニューはアイコンのみをレンダリングし、他のメニューはタイトルまたはカテゴリとタイトルをレンダリングします。拡張機能の作成者にとって、グローバルメニューとローカルメニューの両方で同様に機能するコマンドタイトルを考案することは難しい場合があります。たとえば、コマンドパレットはコンテキストメニューよりも多くの単語を表示できます。
異なるタイトルを可能にするために、新しいshortTitle
プロパティがあります。これにより、コマンドはUIに応じて適切に機能する短いタイトルを提供できます。例えば、コマンドパレットではノートブック: すべてのセルの出力をクリア、ノートブックツールバーではより短いすべてクリアなどです。
環境名前空間にアプリケーションホストを追加
.env
名前空間に、アプリケーションホストappHost
プロパティが追加されました。appHost
を使用すると、拡張機能開発者はVS Codeがホストされている環境(デスクトップ、GitHub Codespaces、github.dev、vscode.devなど)を判別できます。
ノートブックレンダラーのRendererContext.workspace.isTrusted
ノートブックレンダラーに渡されるコンテキストオブジェクトの新しいworkspace.isTrusted
プロパティにより、拡張機能の作成者は現在のワークスペースが信頼されているかどうかを確認できます。
import type { ActivationFunction } from 'vscode-notebook-renderer';
export const activate: ActivationFunction<void> = (ctx) => {
return {
renderOutputItem: (outputInfo, element) => {
if (ctx.workspace.isTrusted) {
// Render normally. Still take precautions to avoid script injection and
// only enable as much functionality as your renderer needs.
} else {
// Only render safe content. Always make sure it has been properly sanitized.
}
}
}
};
プラットフォーム固有の拡張機能
プラットフォーム固有の拡張機能(拡張機能の作成者が異なるプラットフォーム(Windows、macOS、Linux)用に個別の拡張機能バージョンを作成できるようにするもの)の開発を進めています。この機能についてマーケットプレイスチームと協力し、ソリューションを最終決定しました。このマイルストーンでは実装を開始し、まもなく拡張機能の作成者に提供する予定です。更新情報やフィードバックについては、issue #23251をフォローしてください。
更新された codicon
以下の新しいアイコンがcodiconライブラリに追加されました。
folder-library
run-errors
ウォークスルーコントリビューションの更新
ウォークスルーのステップメディアとしてテーマ対応SVGを使用
ウォークスルーのステップで、media
オブジェクト内にsvg
プロパティを指定できるようになりました。より優れたスケーリングサポートに加えて、SVGはテーマトークンへのアクセスを提供し、メディアがワークベンチの残りの部分と視覚的に調和できるようにします。詳細については、Webビューコンテンツのテーマ設定に関するガイドをご覧ください。
ウォークスルーの対象となるファイルの宣言
ウォークスルーは、特定のウォークスルーが適用されるファイルタイプをリストするオプションのfeaturedFor
パラメーターをサポートするようになりました。これらのファイルがワークスペースフォルダーで見つかった場合、ウォークスルーはより高い視覚的優先度でレンダリングされます。
タスクのデフォルトグループAPI
TaskGroup
のisDefault
プロパティが確定しました。拡張機能はタスクを取得し、そのタスクのgroup
のisDefault
プロパティを読み取って、そのグループのデフォルトタスクであるかどうかを判断できるようになりました。
デバッガー拡張機能の作成
「DebugSessionOptions」の新しい「managedByParent」プロパティ
新しいフラグmanagedByParent
がDebugSessionOptions
型に追加されました。startDebugging
APIに渡されると、disconnect
やrestart
などのライフサイクルリクエストが、新しく作成されたセッションに送信されるか、その親セッションに送信されるかを制御します。
Debug Adapter Protocolの「showUser」プロパティ
launch
リクエストが失敗した場合、VS Codeはデバッグアダプターからの応答で送信されたshowUser
プロパティを尊重するようになりました。showUser
プロパティが提供され、falseの場合、VS Codeはエラーを含むモーダルダイアログを表示しません。showUser
プロパティが欠落しているかtrue
の場合は、以前と同様にエラーダイアログを表示します。
他のDebug Adapter Protocol (DAP) リクエストについては変更はありません。showUser
がtrue
の場合、エラーは通知を使用して表示されます。それ以外の場合、ユーザーには何も表示されません。
VS Codeは「noDebug」デバッグセッションのブレークポイントを登録しなくなりました
DAPのlaunch
リクエストのnoDebug
プロパティがtrue
に設定されている場合、VS Codeはブレークポイント登録DAPリクエスト(setBreakpoints
、setExceptionBreakpoints
、setDataBreakpoints
、setFunctionBreakpoints
、setInstructionBreakpoints
)を呼び出さなくなります。
VS CodeはDAP「setExpression」リクエストをサポートするようになりました
デバッグアダプターがsetExpression
リクエストを実装している場合(supportsSetExpression
機能がtrue
の場合)、VS Codeは2つの状況でsetExpression
を使用します。
- VARIABLESビューとWATCHビューで変数の値を変更する場合、デバッグアダプターが
setVariable
リクエストをサポートせず(supportsSetVariable
機能がないかfalse
)、変数にevaluateName
プロパティがあり、編集可能である場合(VariablePresentationHint
のreadOnly
属性がtrue
でない場合)。 - WATCHビューで代入可能な式の値を変更する場合、ウォッチ式が編集可能である場合(
VariablePresentationHint
のreadOnly
属性がtrue
でない場合)。
DAPエラーメッセージにおける「launch.jsonを開く」ボタンの抑制
Debug Adapter Protocolでは、ErrorResponseのMessageが、メッセージに関する追加情報が見つかるurl
と、URLを開くためのUIとしてユーザーに表示されるurlLabel
を返すことを許可しています。VS Codeがモーダルダイアログでユーザーにメッセージを表示する際、urlLabel
をキャプションとしたボタンが表示されます。このリリースより前は、VS Codeはlaunch.jsonを開くとキャプションされたボタンも追加していました。メッセージのurl
が「command」スキーム(例えばcommand:myExtension.fixError
)を使用する場合、このボタンは追加されなくなりました。
Debug Adapter Protocol
新しい「memory」イベントのリリース
memory
イベントは完成し、Debug Adapter Protocolのバージョン1.49と対応するnpmモジュールで利用可能になりました。デバッグアダプターがinitialize
リクエストのsupportsMemoryEvent
機能に対してtrue
の値を受け取った場合、デバッグアダプターはmemory
イベントを発行して、特定のメモリ範囲が更新されたことを示すことができます。
提案された拡張API
各マイルストーンには新しい提案された API があり、拡張機能の作成者はそれらを試すことができます。いつものように、皆様のフィードバックをお待ちしております。提案された API を試すには、次の手順を実行する必要があります。
- 提案APIは頻繁に変更されるため、Insiders版を使用する必要があります。
- 拡張機能の
package.json
ファイルに次の行が必要です:"enableProposedApi": true
。 - 最新バージョンのvscode.proposed.d.tsファイルをプロジェクトのソース場所にコピーします。
提案された API を使用する拡張機能を公開することはできません。次のリリースで破壊的変更がある可能性があり、既存の拡張機能を壊すことは望ましくありません。
型階層のサポート
拡張機能がシンボルのスーパークラスとサブクラスを提供できるTypeHierarchyProviderのAPI提案があります。このAPIは試用可能で、問題や提案があれば、VS Codeリポジトリに入力できます。
どこでもターミナルを作成
提案されたターミナル位置APIにより、パネルとエディター領域の両方でターミナル分割を作成できます。
ターミナルが「操作された」かどうかのクエリとイベント
Terminal.stateとwindow.onDidChangeTerminalStateの新しい提案APIにより、ターミナルが「操作された」かどうかをクエリできるようになりました。操作とは、データがプロセスに送信されたことを意味し、様々な理由で発生する可能性がありますが、主なものはキーボード入力です。
QuickPickItemsのボタン
QuickPickItemにボタンを追加し、処理するための提案APIがあります。これにより、拡張機能がQuick Pickとのより豊かなユーザーインタラクションを提供できるようになることを期待しています。
ぜひ試してみて、ご意見をお聞かせください。注意点として、Quick Pickのスクロール位置に関する既知の問題が現在存在しており、この新しい提案APIによってこの問題が悪化する可能性があると考えています。この問題に対処するための適切なAPIセットに取り組んでいます。イシューでご意見をお聞かせください。
テストタグ
テストタグは、テストを整理する方法と、実行可能なテストを示す方法の両方を提供する提案APIです。
エラー以外のテスト出力
テストAPIはテスト失敗メッセージをサポートしていますが、以前はエラー以外の出力を特定のテストケースと関連付ける方法がありませんでした。オプションのTestItem
とlocation
をTestRun.appendOutput
メソッドに渡すことで、これを実現する方法を評価しています。ご意見がございましたら、issue #129201にフィードバックをお願いいたします!
インライン補完プロバイダー: オートコンプリートウィジェットとのインタラクション
InlineCompletionContext
に、オートコンプリートウィジェットで現在選択されている提案の詳細を含む新しいフィールドselectedCompletionInfo
が追加されました。また、ユーザーがオートコンプリートウィジェットで選択された項目を変更するたびに、InlineCompletionItemProvider
sはインライン提案を要求されます。インライン提案が選択された提案項目を拡張する場合、その拡張は斜体で表示されます。
エンジニアリング
RHEL7およびCentos7ディストリビューションのサポートを修正
VS Codeバージョン1.53では、より新しいElectronバージョンを使用するためにビルドイメージを更新し、ネイティブモジュールのCXXABI要件の変更により、一部のディストリビューションでrpmパッケージが破損する原因となりました (issue #115784)。Electron v13への更新により、ネイティブモジュールをランタイムと同じコンパイラツールチェーンでビルドできるようになりました。具体的には、現在Clangを使用し、ランタイムのlibcxxを静的にリンクしています。これにより、バイナリサイズを約10MBというわずかな増加に抑えつつCXXABI要件をバイパスし、これらのディストリビューションのサポートを復活させることができました。Insidersでのテストにご協力いただき、ありがとうございました。
ドキュメント
VS CodeにおけるJulia
Juliaプログラミング言語のVS Codeにおけるサポートを説明する新しいトピック「Visual Studio CodeにおけるJulia」が、Julia拡張機能と共に利用可能です。Julia拡張機能には、コード補完、コードナビゲーション、デバッグなどの豊富な言語機能に加え、統合されたREPLとプロットナビゲーターが含まれています。
Azure Machine Learning
Azure Machine Learning拡張機能がAzure Machine Learningクラウドベースの機械学習モデルをVS Codeから直接操作できるようにする方法について、VS CodeにおけるAzure Machine Learningの概要を読むことができます。
注目すべき修正点
- 82489: 「AltGr」キー使用時のキーボード入力の誤り
- 115945: ツールバーがドッキングされている場合にデバッグツールバーのコマンドが欠落する
- 118196: デバッグセッション再起動時にargs-listの要素が更新されない
- 121201: iPadでメニュー選択が正しくレンダリングされない
- 124128: デバッグ停止時に拡張機能開発ウィンドウが閉じられない
- 125259: デバッグ開始前にlaunch.jsonが保存されない
- 126102: SkipFilesがスキップ対象ファイルを一時的に開いてしまい、速度低下を引き起こす
- 126911: 拡張機能デバッグ: デバッグセッション停止時にウィンドウが閉じない
- 128484: debug: 起動失敗時のモーダルダイアログを無効にするオプション
- 129019: 閉じた状態で開始したツリービューは内容を表示するために再度更新(または再開)が必要
- 129469: 設定エディターの入力ボックスを大きくできる
- 129645: 設定UIでコードブロックのシンタックスハイライトを有効にする
- 129844: markdownEnumDescriptionsが設定UIでマークダウンの`##`を削除せず、settings.jsonでも##を削除しない
- 130265: Nodeデバッガーが未処理のPromise拒否で停止しない
ありがとうございます
最後に、今月 VS Code に貢献してくださった以下の皆様に、心からの感謝を申し上げます。
問題追跡への貢献者
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- CodeCrazy-ywt (@CodeCrazy-ywt)
- Sandeep Rajakrishnan (@san-coding)
- ArturoDent (@ArturoDent)
vscode
への貢献者
- @afonsomatos (Afonso Matos): Shadow Domでドラッグ&ドロップが動作しない問題を修正 PR #131392
- @akosyakov (Anton Kosyakov): 開いているタブに別のイベントループを使用 PR #126341
- @AkatQuas (Akat)
- コメント内のタイプミスを修正、いくつかのメソッド名を変更 PR #130470
- fix(storage): メソッドのタイプミスを修正 PR #131051
- @chrisyeh96 (Christopher Yeh): KaTeXマクロをレンダリング呼び出し全体で永続化 PR #129747
- @Chigusa0w0 (Chigusa0w0): トラックパッドで低速でスクロールした際の奇妙な動作を修正 PR #131231
- @erha19 (Dan): fix: デバッグコンソールの変数出力の問題 PR #127132
- @Eskibear (Yan Zhang): 型階層のピーク PR #130922
- @gjsjohnmurray (John Murray)
- #126842 Explorerのルートフォルダのエラーインジケーターを更新成功時にクリアする問題を修正 PR #126843
- #129296 シンプルファイルダイアログをナビゲートする際に権限、クエリ、フラグメントを保持する問題を修正 PR #129310
- DAがコマンドを提供した場合、エラーダイアログの「launch.jsonを開く」コマンドを抑制 (#_124020) PR #130754
- workbench.editor.experimentalAutoLockGroupsのテキストを改善 PR #131157
- #131743 「行まで実行」を追加する場合にのみメニューセパレーターを追加する問題を修正 PR #131744
- @jeanp413 (Jean Pierre)
- 再読み込み後、最初のターミナルが分割されると非常に狭くなることがある問題を修正 PR #129668
- 無効なリンクをCmd+クリックしてもMarkdownで新しいファイルが作成されない問題を修正 PR #130815
- ノートブックUIがターミナル上に表示される問題を修正 PR #130854
- パラメーターヒントがリンクホバー色を使用すべき問題を修正 PR #130963
- 提案の詳細がリンクホバー色を使用すべき問題を修正 PR #130966
- @jihoon-ernesto: macOSターミナルに合わせるため、cmd+. → ctrl+cのターミナルキーバインディングを追加 PR #131025
- @jsjoeio (Joe Previte): feat: 名前にポートを含むasWebviewUriテストを追加 PR #131447
- @Kingwl (Wenlu Wang): インレイヒントのある折りたたみ範囲を修正 PR #130399
- @lezgomatt (Matthew Go): カスタムセレクトボックスのホバースタイルを修正 PR #129970
- @nickofolas: ステータスバーの文法問題を修正 PR #131271
- @nrayburn-tech (Nicholas Rayburn): #124276 Markdownファイルリクエストの一括処理を修正 PR #124545
- @remcohaszing (Remco Haszing): window.MonacoEnvironmentを定義 PR #128949
- @sdissegna-maystreet: [#131407] ブラウザーでのサービスワーカーのバージョンチェックを修正 PR #131408
- @spahnke (Sebastian Pahnke): [スタンドアロンエディター]
CodeActionProvider
登録時に提供されるコードアクションの種類をリストするサポートを追加 PR #131254 - @spasche (Sylvain Pasche): ターミナル分割時にベースからURI権限をコピー、#127811を修正 PR #130291
- @ssigwart (Stephen Sigwart): マッチする括弧方向への選択を更新 PR #128931
- @suzmue (Suzy Mueller): スレッドを応答順にソート PR #128686
- @threeal (Alfi Maulana): feat: .tppと.txxをc++拡張として追加 PR #130101
- @tony-xia (Tony Xia)
- メソッド名を更新 PR #129224
- 変数名を更新 PR #129226
- @vagusX (vagusX): fix: vscode.FileDecoration APIの不要なpriorityフィールドを削除 PR #129501
- @xgdgsc: 無効なブレークポイントをクリックすると、削除ではなく有効になる #125904 PR #125931
- @xisui-MSFT
- 逆アセンブリビューでのフォーカスされたスタックフレームの色を修正 PR #129721
- 逆アセンブリビューでイベントリスナーをrenderTemplateに移動 PR #129734
- 逆アセンブリビューのアクセシビリティを改善 PR #129788
- 逆アセンブリが利用できない場合に特別なエントリを追加 PR #129797
- @yannickowow (Yanis HAMITI): [debugService #113742] デバッグセッション終了時の変数表示 PR #131016
- @yash112-lang (Yash Singhal): 垂直方向の配置を修正 PR #130327
vscode-generator-code
への貢献者
- @octref (Pine): ローカル開発のヒントを追加 PR #296
vscode-js-debug
への貢献者
- @Manish-Giri (Manish Giri): userDataDirオプションのドキュメントを更新 PR #1078
vscode-pull-request-github
への貢献者
- @joshuaobrien (Joshua O'Brien)
- @RishabhKothaari (Rishab): ビューにPRのレビュー状況を通知 PR #1833
debug-adapter-protocol
への貢献者
- @robertoaloi (Roberto Aloi): Erlangアダプターを追加 PR #202
language-server-protocol
への貢献者
- @okuramasafumi (OKURA Masafumi): 最新バージョンは3.16になりました PR #1321
- @OliverKovacs (Oliver Kovacs): タイプミスを修正 PR #1332
- @vintagedave (David Millington): 言語によるアルファベット順ソートを調整 PR #1323
- @Wilfred (Wilfred Hughes): honorsChangeAnnotationsの説明におけるタイプミスを修正 PR #1322
monaco-editor
へのコントリビューション
- @SpaceComet: ウェブサイトのプレイグラウンドに小さな更新 PR #2616
- @thien-do (Thien Do): ESM IntegrateドキュメントにViteとの使用法を追加 PR #2632
monaco-html
へのコントリビューション
- @Pranomvignesh (Pranom Vignesh): fix(workerManager.js): ワーカーの存在チェックを追加 PR #15
monaco-languages
への貢献
- @ladyrick (LadyRick): fix(cpp): cpp言語の整数サフィックスを修正 PR #156