2021年5月 (バージョン 1.57)
アップデート 1.57.1: このアップデートでは、以下のissueに対処しています。
ワークスペースの信頼機能は、CVE-2021-34529に対処します。
ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel シリコン | Linux: deb rpm tarball Arm snap
Visual Studio Code 2021年5月リリースへようこそ。このバージョンには多くのアップデートが含まれており、皆様に気に入っていただけることを願っています。主なハイライトは以下のとおりです。
- ワークスペースの信頼 - 不慣れなソースコードを閲覧する際のコード実行に対するセキュリティ強化。
- 新しい始め方 - VS Code のセットアップと学習を迅速に行うのに役立ちます。
- リモートリポジトリ - リポジトリをローカルにクローンせずにコードを閲覧および編集できます。
- ターミナルタブ - タブを使用すると、複数のオープンのターミナルを簡単に作成、管理、およびグループ化できます。
- Edge ブラウザのデバッグ - Microsoft Edge Developer Tools を VS Code に直接統合します。
- JSDoc @link サポート - コメントに @link タグを追加して、シンボルをすばやくナビゲートします。
- JS/TS 以外のファイルへの定義へ移動 - 画像やスタイルシートにすばやくジャンプします。
- Notebook API の最終決定 - VS Code でネイティブノートブックをサポートするための Notebook API。
- Build 2021 での VS Code ブログ記事 - VS Code を特集したオンデマンドセッションをご覧ください。
これらのリリースノートをオンラインで読む場合は、code.visualstudio.com の 更新情報にアクセスしてください。
VS Code チームのリリースパーティーで、このバージョンの新機能のハイライトをご覧ください。イベントの録画は、YouTube チャンネルでご覧いただけます。
Insiders: 最新機能をいち早く試したいですか?毎晩更新される Insiders ビルドをダウンロードして、最新のアップデートをすぐにお試しください。
ワークベンチ
ワークスペースの信頼
Visual Studio Code はセキュリティを重視しており、ソースや作成者に関係なく、安全にコードを閲覧および編集できるように支援したいと考えています。ワークスペースの信頼機能を使用すると、プロジェクトフォルダーで自動コード実行を許可するか制限するかを決定できます。
注意: 不安な場合は、フォルダーを制限付きモードのままにしてください。後でいつでも信頼を有効にできます。
安全なコード閲覧
パブリックリポジトリやファイル共有で非常に多くのソースコードが利用できるのは素晴らしいことです。コーディングタスクや問題に関係なく、おそらくすでにどこかに良い解決策があるでしょう。ただし、オープンソースのコードとツールを使用することにはリスクがあり、悪意のあるコード実行やエクスプロイトにさらされる可能性があります。
ワークスペースの信頼は、ワークスペースが制限付きモードで開かれている場合に、自動コード実行を防ぐことで、不慣れなコードを扱う際のセキュリティレイヤーを追加します。
注意: ワークスペースの信頼機能を無効にする場合は、
security.workspace.trust.enabled
をfalse
に設定できます。ワークスペースの信頼を無効にするのは、作業しているファイルのソースと整合性を確信できる場合に限ります。
制限付きモード
ワークスペースの信頼ダイアログで、いいえ、作成者を信頼しませんを選択した場合、VS Code はコード実行を防ぐために制限付きモードになります。ワークベンチの上部に、ワークスペースの信頼エディターを介してフォルダーを管理するためのリンクと、ワークスペースの信頼ユーザーガイドに移動する詳細はこちらリンクを含むバナーが表示されます。
ステータスバーにも制限付きモードバッジが表示されます。
制限付きモードは、タスク、デバッグ、ワークスペース設定、拡張機能など、いくつかの VS Code 機能の動作を無効または制限することにより、自動コード実行を防ごうとします。
制限付きモードで無効になっている機能の完全なリストを表示するには、バナーの管理リンクをクリックするか、ステータスバーの制限付きモードバッジをクリックして、ワークスペースの信頼エディターを開くことができます。
ワークスペースの信頼
プロジェクトの作成者とメンテナーを信頼する場合は、ローカルマシン上のプロジェクトのフォルダーを信頼できます。たとえば、github.com/microsoft や github.com/docker などの有名な GitHub 組織のリポジトリを信頼するのは通常安全です。新しいフォルダーを開いたときの最初のワークスペースの信頼プロンプトでは、そのフォルダーとそのサブフォルダーを信頼できます。
ワークスペースエディターを表示して、フォルダーの信頼状態をすばやく切り替えることもできます。ワークスペースエディターダイアログを表示する方法はいくつかあります。
制限付きモードの場合
- 制限付きモードバナーの 管理 リンク
- 制限付きモードのステータスバー項目
いつでも使用することもできます
- コマンドパレットから ワークスペース: ワークスペースの信頼を管理 コマンド (⇧⌘P (Windows, Linux Ctrl+Shift+P))
- アクティビティバーの 管理 ギアから ワークスペースの信頼を管理
フォルダーの選択
フォルダーを信頼すると、ワークスペースの信頼エディターに表示される 信頼されたフォルダーとワークスペース リストに追加されます。
このリストからフォルダーを手動で追加、編集、削除でき、信頼を有効にするアクティブなフォルダーが太字で強調表示されます。
親フォルダーを信頼するオプションもあります。これにより、親フォルダーとすべてのサブフォルダーに信頼が適用されます。これは、信頼されたコンテンツを含む多くのフォルダーが 1 つのフォルダーの下にまとめられている場合に役立ちます。
拡張機能の有効化
制限付きモードを使用したいが、お気に入りの拡張機能がワークスペースの信頼をサポートしていない場合はどうなりますか?これは、拡張機能が便利で機能的であっても、積極的にメンテナンスされておらず、ワークスペースの信頼サポートを宣言していない場合に発生する可能性があります。このシナリオに対処するために、extensions.supportUntrustedWorkspaces
設定で拡張機能の信頼状態をオーバーライドできます。
注意: 拡張機能のワークスペースの信頼サポートをオーバーライドする場合は注意してください。拡張機能の作成者が制限付きモードで拡張機能を無効にする正当な理由がある可能性があります。
以下に、Prettier 拡張機能のユーザー settings.json
エントリを示します。
"extensions.supportUntrustedWorkspaces": {
"esbenp.prettier-vscode": {
"supported": true,
"version": "6.4.0"
},
},
supported
属性を使用して、ワークスペースの信頼サポートを有効または無効にできます。version
属性は、適用可能な正確な拡張機能バージョンを指定し、すべてのバージョンの状態を設定する場合は、バージョンフィールドを削除できます。
拡張機能の作成者が制限付きモードで制限する機能を評価および決定する方法の詳細については、ワークスペースの信頼拡張機能ガイドをお読みください。
設定
以下は、利用可能なワークスペースの信頼設定です。
security.workspace.trust.enabled
- ワークスペースの信頼機能を有効にします。デフォルトは true です。security.workspace.trust.startupPrompt
- 起動時にワークスペースの信頼ダイアログを表示するかどうか。デフォルトは、個別のフォルダーまたはワークスペースごとに 1 回のみ表示することです。security.workspace.trust.emptyWindow
- 空のウィンドウ (開いているフォルダーなし) を常に信頼するかどうか。デフォルトは true です。security.workspace.trust.untrustedFiles
- ワークスペース内の非関連ファイルをどのように処理するかを制御します。デフォルトはプロンプトを表示することです。extensions.supportUntrustedWorkspaces
- 拡張機能のワークスペースの信頼宣言をオーバーライドします。true または false のいずれか。
ワークスペースの信頼の詳細については、ワークスペースの信頼ユーザーガイドをお読みください。
新しい始め方
過去数回のイテレーションで、VS Code のウェルカムページのリフレッシュに取り組んできましたが、今回のイテレーションから、新しいウェルカムページ (始めましょう) がすべてのユーザーに対してデフォルトで有効になることを発表できて嬉しく思います。この新しいエクスペリエンスでは、VS Code のコアとインストールされた拡張機能の両方が、ウェルカムページに「ウォークスルー」を提供できます。ウォークスルーは、VS Code 自体または新しい拡張機能を使い始めるのに役立つように設計されています。たとえば、Luna Paint 拡張機能は、イメージエディターの各コンポーネントを理解するのに役立つガイドを含むウォークスルーを提供します。
さらに、すべてのウォークスルーを完了 (または無視) すると、VS Code はコンテンツを再配置して、ワンクリックでアクセスできる最近のワークスペースの数を 2 倍にします。
設定
workbench.startupEditor
- 起動時に表示するデフォルトのエディターを制御します。新しい値gettingStarted
は、古いデフォルトwelcome
を置き換えます。その他の利用可能なオプションには、readme
、gettingStartedInEmptyWorkbench
、newUntitledFile
、またはnone
があります。workbench.welcomePage.walkthroughs.openOnInstall
- 拡張機能が提供するウォークスルーをインストール時に自動的に開くかどうか。
新しいページは、既存のウェルカムページを完全に段階的に廃止するまで、始めましょう と呼ばれます。
リモートリポジトリ
リモートリポジトリ拡張機能は、1.56 の組み込みプレビュー機能として導入され、現在パブリックに利用可能ですが、VS Code に組み込まれなくなったため、VS Code Marketplace からインストールする必要があります。
簡単なまとめとして、リモートリポジトリ拡張機能を使用すると、リポジトリをローカルにクローンしたり、ローカルにリポジトリを持ったりすることなく、VS Code 内から直接 GitHub リポジトリを即座に参照、検索、編集、コミットできます。
今回のイテレーションでは、主にバグ修正と拡張機能のリリースに向けた磨き込みに重点を置いていましたが、いくつかの新機能を追加しました。リモートエクスプローラーでリモートリポジトリを確認して、保留中の変更をすばやく開いたり比較したりできるようになりました。さらに、同じリポジトリからの変更を現在のリモートリポジトリに適用して、コミットされていない変更をあるブランチから別のブランチにすばやく簡単に移動できます。
テーマ: Amethyst Dark Theme
リモートリポジトリの詳細については、リモートリポジトリブログ記事と YouTube ビデオをご覧ください。
ウィンドウ間のエディターのドラッグアンドドロップの改善
今回のリリースでは、エディターを別のウィンドウにドラッグするサポートが改善されました。差分エディター、カスタムエディター、およびエディターグループ全体を別のウィンドウにドラッグして、そこにエディターを開くことができるようになりました。
テーマ: GitHub Light Theme
注意: この機能を頻繁に使用する場合は、自動保存を有効 (files.autoSave
) にして、一方のウィンドウでの変更がもう一方のウィンドウに自動的に反映されるようにしてください。
エディターが開いていないときに Cmd+W / Ctrl+W キーバインドでウィンドウを閉じる機能を削除
ユーザーが最後のエディターをすばやく Cmd+W
/ Ctrl+W
を使用して閉じた後、VS Code ウィンドウ (インスタンス) が突然閉じることに不満を感じているというフィードバックがありました。チーム内の簡単なアンケートでも、多くの人がウィンドウを閉じるためのこのキーバインドを割り当て解除していることが明らかになったため、エディターが開いていないときにウィンドウを閉じるためのキーバインドとして Cmd+W
/ Ctrl+W
を削除しました。
ユーザーの keybindings.json
ファイルで次のように構成することで、キーバインドを簡単に元に戻すことができます。
macOS
{
"key": "cmd+w",
"command": "workbench.action.closeWindow",
"when": "!editorIsOpen && !multipleEditorGroups"
}
Windows/Linux
{
"key": "ctrl+w",
"command": "workbench.action.closeWindow",
"when": "!editorIsOpen && !multipleEditorGroups"
}
注意: すべてのプラットフォームで、ウィンドウを閉じるための専用の割り当てられたキーバインドがあります。
- macOS:
Cmd+Shift+W
- Linux:
Alt+F4
- Windows:
Alt+F4
ノートブックレイアウトのカスタマイズ
今月は、ユーザーがワークフローに合わせてノートブックエディターをカスタマイズできるように、いくつかのノートブックレイアウト設定を追加しました。デフォルトでオンになっているカスタマイズは次のとおりです。
ノートブックツールバー
エディターにノートブックツールバーを追加しました。ここでは、セルの挿入、すべてのセルの実行、カーネルの切り替えなどのアクションに簡単にアクセスできます。ツールバーは、notebook.globalToolbar
を false
に設定することで無効にできます。
出力ツールバー
セル出力のクリアアクションと、別の出力レンダラーまたはMIMEタイプを選択するためのボタンが、セル出力の横にある単一の ... エリプスメニューに結合されました。これは、notebook.consolidatedOutputButton
を false
に設定することで無効にできます。
ガターのフォーカスされたセルハイライト
VS Code は、ノートブックに多数のセルが含まれている場合に、どのセルにフォーカスされているかを識別するのに役立つ、セルのガター領域でのフォーカスされたセルハイライトのレンダリングをサポートするようになりました。設定 notebook.cellFocusIndicator
は、新しいデフォルトである gutter
にすることも、セル境界全体を強調表示する border
にすることもできます。
マウスオーバー時に折りたたみアイコンを表示
Markdown セルの折りたたみアイコンは、常に表示されるのではなく、マウスオーバー時に表示されるようになりました。notebook.showFoldingControls
を mouseover
(デフォルト) または always
のいずれかに設定することで、動作をカスタマイズできます。
今月実装されたノートブックレイアウト設定の完全なリストは次のとおりです。
notebook.cellFocusIndicator
: セルがフォーカスされた状態を、Jupyter と同様に、セルの側面にある色付きのバー (gutter
) で示すオプションを追加します。notebook.cellToolbarVisibility
: セルツールバーをセルがフォーカスされたとき、またはホバーされたときに表示するかどうかを決定します。デフォルトは、セルがフォーカスされたときにのみ表示することです。notebook.compactView
: 有効にすると、セルはよりコンパクトなスタイルで、空きスペースを少なくしてレンダリングされます。デフォルトで有効になっています。notebook.consolidatedOutputButton
: セル出力のクリアアクションと、別の出力レンダラーまたはMIMEタイプを選択するためのボタンが、セル出力の横にある単一の ... エリプスメニューに結合されました。新しいメニューは、この設定で無効にできます。notebook.consolidatedRunButton
: 2 つの新しいアクション、上のセルを実行とセルと下を実行があります。これらはデフォルトでセルツールバーに表示されますが、この設定を有効にすると、実行ボタンの横にある新しいコンテキストメニューに移動します。notebook.dragAndDropEnabled
: セルのドラッグアンドドロップを無効にします。コマンド (Alt+Up/Alt+Down がデフォルト) を使用してセルを再配置することはできます。notebook.globalToolbar
: ノートブックエディターの上部にツールバーを追加します。notebook.insertToolbarLocation
: 新しいセルを挿入するためのボタンをセル間、ツールバー、両方、または非表示にするかどうかを制御します。notebook.showCellStatusBar
: この設定には、新しいオプションvisibleAfterExecute
があり、セルが実行されるまでセルステータスバーを非表示にしてスペースを節約します。実行されると、ユーザーが実行の詳細を確認できるように表示されます。notebook.showFoldingControls
: Markdown ヘッダーに表示される折りたたみシェブロンを常に表示するか、マウスオーバー時のみ表示するかを制御します。notebook.editorOptionsCustomizations
: ユーザーがノートブックでセルエディターの設定をカスタマイズできるようにします。
下の画像は、これらの設定のいくつかの効果を示しています (上部のツールバー、ガターハイライト、出力 ... ボタン)。
クイックピックと候補ウィジェットの色の更新
クイックピックと候補ウィジェットのフォーカス状態を更新して、ツリーウィジェットのスタイルとの整合性を高めました。これにより、フォーカス前景を制御するいくつかの新しいカラートークンが導入されました。
list.focusHighlightForeground
quickInputList.focusForeground
editorSuggestWidget.selectedForeground
アイコンテーマ: Fluent Icons
macOS 用 Touch Bar アイコンの更新
更新されたアイコンスタイルに合わせて、macOS Touch Bar アイコンを更新しました。
デフォルトビュー
デバッグ中
WebView のコンテキストメニュー
VS Code は、Markdown プレビュー、リリースノート、拡張機能の詳細ページなど、WebView 内で簡単なコンテキストメニューを表示することをサポートするようになりました。
このコンテキストメニューには現在、テキストのコピーと貼り付けのアクションが含まれています。将来、メニューに追加のアクションを追加する可能性があります。
このコンテキストメニューが拡張機能の WebView を妨害している場合は、contextmenu
イベントで preventDefault
を呼び出すことで、表示されないようにすることができます。
document.body.addEventListener('contextmenu', e => {
e.preventDefault(); // cancel the built-in context menu
});
エディター
候補プレビュー
新しい設定 editor.suggest.preview
を有効にすると、選択した候補またはスニペットのプレビューがカーソル位置に表示されます。
テーマ: Dark+ (デフォルトダーク)
非推奨の候補を非表示にする
新しい設定 editor.suggest.showDeprecated
があります。デフォルトは on
ですが、off
にすると、非推奨としてマークされている項目は候補に表示されなくなります。
統合ターミナル
ターミナルタブ
ターミナルタブは、1.56 のプレビュー機能として導入され、デフォルトで有効になりました。新しいタブビューは、少なくとも 2 つのターミナルがある場合にのみデフォルトで表示されます。単一のターミナルの場合、タブはパネルタイトルに「インライン」で表示されます。これにより、タスクの実行中、成功、失敗などのターミナルのステータスの概念も導入されます。
以下は、今回のリリースのハイライトの一部です。
- タブの色を変更して、タブ間のすばやいナビゲーションと区別を有効にできます。
- タブはドラッグアンドドロップして、再配置できます。
- ターミナルグループのタブを空の領域にドラッグすると、グループから削除されます (ターミナルを分割解除、コンテキストメニューからも利用可能)。
- タブをメインターミナル領域にドラッグすると、グループに参加できます (コンテキストメニューからも利用可能)。
- Alt キーを押しながらタブ、+ ボタン、または単一のタブをクリックすると、ターミナルが分割されるようになりました。ターミナルを強制終了するための中クリックでも同じように機能します。
- インラインアクションは、タブリストがターミナルを誤って分割/強制終了しないように十分に大きくない限り表示されません。
- ターミナルを強制終了して 1 つだけになる場合、マウスがビューから離れるまでタブリストは非表示になりません。
新しい UX が気に入らない場合は、"terminal.integrated.tabs.enabled": false
を設定してドロップダウンに戻ることができます。これは、今後もオプションとしてサポートし続ける予定です。
ターミナルプロファイルの改善
今回のリリースでは、ターミナルプロファイルシステムに多くの改善が加えられました。以下にハイライトをいくつか示します。
- VS Code の起動時にターミナルが復元された場合、
defaultProfile
が尊重され、タスクとデバッグに使用されます。 - IntelliSense が
settings.json
のicon
とdefaultProfile
で動作するようになりました。 overrideName
がデフォルトプロファイルで動作するようになりました。defaultProfile
をワークスペース設定で設定できるようになりました。これは、新しいワークスペースの信頼機能によっても制御されるようになりました。defaultProfile
とshell
またはshellArgs
設定を使用している場合、非推奨の設定をプロファイルシステムに移行するように求められるようになりました。color
をプロファイルで設定できるようになりました。
タイトルシーケンスのサポート
設定 terminal.integrated.experimentalUseTitleEvent
設定が、terminal.integrated.titleMode
として安定版に昇格しました。デフォルトでは、この設定は executable
になり、検出されたフォアグラウンドプロセスに基づいてターミナルに名前が付けられます。
これが sequence
に設定されている場合、タイトルはシェルが設定するものに基づきます。これが機能するにはシェルのサポートが必要であり、動作中の例として、セッションに関する追加情報を表示する oh-my-zsh のデフォルトプロンプトがあります。
クリーンな環境での起動の改善
設定 terminal.integrated.inheritEnv
は、v1.36 以降利用可能ですが、実装には Linux でのアクセス許可の問題が原因で失敗したり、macOS で期待どおりに動作しない可能性があるという欠陥がありました。
VS Code が基盤となる環境をセットアップする方法が改善されたため、起動時の初期環境にアクセスできるようになりました。これは、ほとんどのターミナルが動作する方法です。inheritEnv
が true
に設定されている場合、VS Code は初期環境を使用し、false
の場合は、ソースされた「シェル環境」を使用します。この設定は、ターミナルを通常のターミナルとして動作させるのに役立ちます。ただし、プロファイル/rc 構成が正しく設定されていない場合、問題が発生する可能性があります。
Windows でのネイティブな行の折り返しサポート
ターミナルでの行の折り返しは、タスクの問題マッチャーとリンク検出を駆動します。これまで、Windows ターミナルは、Unix pty をシミュレートするエミュレーションテクノロジーが折り返しをサポートしていなかったため、ヒューリスティックを使用して行を折り返しとしてフラグを立てていました。これは、最近のバージョンの Windows で変更され、Windows 10 21376 以降 (現在は Insiders のみ) に更新すると、このヒューリスティックが無効になり、折り返された行は Windows ターミナルと同様に正しく機能するはずです。
タスク
ターミナルタブのタスクステータス
タスクのステータスがターミナルタブに表示されるようになりました。バックグラウンドタスクの場合、ステータスは関連付けられた問題マッチャーがある場合にのみ表示されます。
タスクターミナルを自動的に閉じる
タスクの presentation
プロパティに新しい close
プロパティがあります。close
を true
に設定すると、タスクが終了したときにターミナルが閉じます。
{
"type": "shell",
"command": "node build/lib/preLaunch.js",
"label": "Ensure Prelaunch Dependencies",
"presentation": {
"reveal": "silent",
"close": true
}
}
デバッグ
JavaScript デバッグ
いつものように、変更の完全なリストは、vscode-js-debug changelog にあります。
Edge Developer Tools の統合
JavaScript デバッガーは、Microsoft Edge Developer Tools と統合して、ブラウザデバッグ用の DOM、スタイル、およびネットワークインスペクターを提供します。これは、デバッグツールバーの新しい「検査」アイコンからアクセスできます。
以下の短いビデオでは、「検査」ボタンを選択し、Edge DevTools の要素をナビゲートする様子を示しています。
テーマ: Codesong
ブラウザデバッグに Microsoft Edge をまだ使用していない場合は、launch.json
で "type": "chrome"
または "type": "pwa-chrome"
を "type": "pwa-msedge"
に置き換えることで切り替えることができます。これは、Blazor アプリケーションでも、起動構成で "browser": "edge"
を設定することでサポートされています。
ソースマップで名前変更された識別子のサポート
長らく要望の多かった機能である JavaScript デバッガーが、ソースマップで名前変更された識別子をサポートするようになりました。これは、minify されたコードをデバッグする場合に特に役立ちます。
テーマ: Codesong
名前変更された変数は、変数ビュー、ウォッチビュー、およびデバッグコンソール REPL でサポートされています。ツールが名前変更を出力するかどうかは、生成するソースマップファイルで空でない「names」配列を探すことで確認できます。
ヒットしたブレークポイントをブレークポイントビューで表示
ブレークポイントがヒットすると、VS Code はブレークポイントビューでそれを選択して表示するようになりました。これにより、プログラムが中断した正確なブレークポイントを理解しやすくなるはずです。
現在、JS-debug 拡張機能のみがこの機能をサポートしていますが、他のデバッグ拡張機能もすぐに追随すると予想されます。
言語
TypeScript 4.3.2
VS Code に TypeScript 4.3.2 が同梱されるようになりました。このメジャーアップデートには、多くの TypeScript 言語の改善と、JavaScript および TypeScript ツールの多くの改善とバグ修正が含まれています。
TypeScript 4.3 の詳細については、TypeScript ブログをお読みください。
JSDoc @link サポート
VS Code は、JavaScript および TypeScript コメントで JSDoc @link タグ をサポートするようになりました。これにより、ドキュメント内のシンボルへのクリック可能なリンクを作成できます。
JSDoc @link
タグは、{@link symbolName}
として記述されます。シンボル名の代わりにレンダリングするテキストをオプションで指定することもできます: {@link class.property Alt text}
。
@link
は、ホバー、候補、およびシグネチャヘルプでサポートされています。また、VS Code 拡張機能タイプ宣言ファイル vscode.d.ts
を @link
を使用するように更新しました。
import ステートメントの補完
JavaScript および TypeScript の自動インポートは、候補を受け入れると自動的にインポートを追加します。VS Code 1.57 では、import ステートメント自体を記述するときにも機能するようになりました。
これは、手動でインポートを追加する必要がある場合に時間を節約できます。
JS/TS 以外のファイルへの定義へ移動
多くの最新の JavaScript バンドラーとフレームワークは、import
ステートメントを使用して、画像やスタイルシートなどのアセットをインポートします。定義へ移動でこれらのインポートをナビゲートすることをサポートするようになりました。
これは、コードをナビゲートするために Ctrl
/Cmd
クリックを使用する場合に最も役立つ可能性があります。
インポートソースのアクションをソート
JavaScript および TypeScript の インポートをソート コードアクションは、インポートをソートします。ただし、インポートを整理とは異なり、未使用のインポートを削除しません。
保存時にインポートのソートを有効にすることもできます。設定:
"editor.codeActionsOnSave": {
"source.sortImports": true
}
関数戻り値の型を推論するクイックフィックス
TypeScript の 関数戻り値の型を推論する リファクタリングは、関数に明示的な戻り値の型注釈を追加します。
明示的な型指定を追加したい場合に便利です。このリファクタリングは、戻り値の型を名前付きの型/インターフェースとして抽出したい場合や、関数の戻り値の型を変更する必要がある場合にも時間を節約できます。
TS Serverのログ記録を無効にするプロンプト
TypeScriptサーバーのログ記録が長期間有効になっている場合、VS Codeがプロンプトを表示するようになりました
ログ記録はパフォーマンスに大きな影響を与える可能性があるため、積極的に問題を診断しようとしている場合を除き、無効にしておくのが最善です。
拡張機能への貢献
リモート開発
Remote Development 拡張機能の作業が継続されており、コンテナー、リモートマシン、またはWindows Subsystem for Linux (WSL) をフル機能の開発環境として使用できます。
1.57 の機能ハイライトは次のとおりです
- 転送されたポートに必要なプロトコルを制御します。
- 転送されたポートの衝突をオプションで監視します。
- Dev Containers はワークスペースの信頼セキュリティ機能をサポートします。
- Dev Containers での環境変数検出が向上しました。
新しい拡張機能やバグ修正については、Remote Development リリースノートをご覧ください。
拡張機能の作成
Notebook API
Notebook API の大部分が最終決定しました。API は 3 つの独立した部分に構造化されています。
NotebookSerializer
API は、notebooks
contribution point と組み合わせて使用することで、VS Code が Notebook ドキュメントを開き、変更し、保存できるようにします。- セル出力を表示する Notebook レンダラー。これらは、拡張機能の
package.json
ファイルのnotebookRenderer
contribution point を介して追加されます。 - コードセルの出力を生成する
NotebookController
API。
シンプルな Notebook Serializer とエコーコントローラーのサンプル。Serializer は JSON.parse
と stringify
を使用し、空のファイルを特別に処理します。コントローラーは、セルのテキストの大文字バリアントを返します。プレーンテキストとして 1 回、HTML として 1 回です。
// serialize/deserialize notebook
vscode.workspace.registerNotebookSerializer(
'echobook',
new (class implements vscode.NotebookSerializer {
// serializer is relying on JSON.parse/stringify
deserializeNotebook(content: Uint8Array) {
return JSON.parse(new TextDecoder().decode(content) || '{"cells":[]}');
}
serializeNotebook(data: vscode.NotebookData) {
return new TextEncoder().encode(JSON.stringify(data));
}
})()
);
// notebook controller
vscode.notebooks.createNotebookController(
'myId',
'echobook',
'Echo',
(cells, _notebook, controller) => {
for (let cell of cells) {
// execution means to echo in upper-case, once as plain text and once as html
const execution = controller.createNotebookCellExecution(cell);
execution.start();
const echo = cell.document.getText().toUpperCase();
const textItem = vscode.NotebookCellOutputItem.text(echo, 'text/plain');
const htmlItem = vscode.NotebookCellOutputItem.text(`<b>${echo}</b>`, 'text/html');
const output = new vscode.NotebookCellOutput([textItem, htmlItem]);
execution.replaceOutput(output);
execution.end(true);
}
}
);
この例では、*.echobook
ファイルの Notebook タイプを静的に登録します。また、VS Code は、そのような Notebook が開かれるたびに onNotebook:echobook
アクティベーションイベントを発行します。
"contributes": {
"notebooks": [{
"type": "echobook",
"displayName": "Echobook",
"selector": [{
"filenamePattern": "*.echobook"
}]
}]
}
ステータスバー項目 'id' および 'name' プロパティ
StatusBarItem
の識別子と名前プロパティの API が最終決定しました。識別子は、createStatusBarItem
メソッドの新しいオーバーロードから渡すことができ、name
プロパティは StatusBarItem
自体で動的に変更できます。
これらの新しいプロパティは、ステータスバーのコンテキストメニューで個々のエントリに名前を付けたり、ユーザーがエントリを表示/非表示にしたりするために使用されます。これらのプロパティを提供しない場合、メニューは 1 つの拡張機能からのすべてのステータスエントリを単一のエントリに集約します。
拡張機能がステータスバーに貢献している場合は、新しい API への更新を検討してください。
新しいターミナルにメッセージを出力する
window.createTerminal
を使用してターミナルを作成する場合、TerminalOptions.message
を介してターミナルの上部に表示されるメッセージを設定できるようになりました。このメッセージは、テキストスタイルを有効にする ANSI エスケープシーケンスをサポートしています。
vscode.window.createTerminal({
name: `My terminal`,
message: '\x1b[3;1mSome custom message\x1b[0m'
});
インライン値の新しいテーマカラー
デバッガーのインライン値をテーマ設定するための新しいカラーが追加されました。
editor.inlineValuesBackground
: デバッグインライン値のフォアグラウンドテキストの色editor.inlineValuesForeground
: デバッグインライン値の背景色。
念のためですが、インライン値は、インライン値プロバイダーが登録されているデバッグ拡張機能の場合、または設定 debug.inlineValues
が true
の場合にデバッグ中に表示されます。
vscode-webview.d.ts
新しく公開された @types/vscode-webview
パッケージは、VS Code が WebView 内で公開する API の型定義を追加します。
これらの型は、npm install --save-dev @types/vscode-webview
でインストールできます。WebView の型がプロジェクトで認識されない場合は、jsconfig
/ tsconfig
の typeAcquisition
セクションに追加してみてください。
"typeAcquisition": {
"include": [
"@types/vscode-webview"
]
}
または、コードにトリプルスラッシュ参照を追加します。
///<reference types="@types/vscode-webview"/>
WebView の配列バッファー転送の改善
以前のバージョンの VS Code では、型付き配列を WebView との間で送受信する際に、いくつかの癖がありました。
UInt8Array
などの型付き配列は、非効率的にシリアル化されます。これにより、数メガバイトのデータを転送する必要がある場合にパフォーマンスの問題が発生する可能性があります。- 送信された型付き配列は、受信側で正しい型として再作成されません。
UInt8Array
を送信すると、受信者は代わりにUInt8Array
のデータ値を持つ汎用オブジェクトを取得します。
これらの問題はどちらもバグですが、既存の動作に依存している拡張機能を壊してしまう可能性があるため、修正することはできません。同時に、新しく作成された拡張機能が現在の紛らわしくて非効率的な動作を望む理由はまったくありません。
したがって、既存の拡張機能については既存の動作を維持し、新しい拡張機能をより正しい動作に移行することにしました。これは、拡張機能の package.json
の engines
値を参照することで行われます。
"engines": {
"vscode": "^1.57.0",
}
拡張機能が VS Code 1.57 以降をターゲットにしている場合、型付き配列は受信側で再作成されるはずであり、WebView との間での大きな型付き配列の転送ははるかに効率的になるはずです。
デバッグセッションの parentSession
しばらく前に、VS Code は階層型デバッグセッションのサポートを追加しましたが、階層に関する情報は拡張機能 API に公開されていませんでした。これに対処するために、親セッション (存在する場合) を参照する新しいプロパティが DebugSession
インターフェースに追加されました。セッションの親が変更されることはありません。
export interface DebugSession {
/**
* The parent session of this debug session, if it was created as a child.
* @see DebugSessionOptions.parentSession
*/
readonly parentSession?: DebugSession;
// ...
VS Code Insiders バージョンターゲティングの改善
提案された API を使用する拡張機能に取り組んでいる場合、破壊的な変更を含む新しい Insiders ビルドがリリースされる可能性があります。ユーザーへのよりシームレスな移行を提供するために、日付タグを使用して Insiders バージョンを正確にターゲットにできるようになりました。たとえば、engines.vscode
を ^1.56.0-20210428
に設定すると、2020 年 4 月 28 日 0:00 UTC 以降に作成された VS Code 1.56 (以降) ビルドをターゲットにします。これにより、今後の Insiders バージョンがリリースされる前に、日付が後の拡張機能の更新を安全にリリースできます。
"engines": {
"vscode": "^1.56.0-20210428",
}
ツリーホバーはコマンド URI をサポートします
TreeItem
に信頼された Markdown ツールチップがある場合、そのツールチップには [this is a link](command:workbench.action.quickOpenView)
形式のコマンドを含めることができます。これは、Markdown でコマンドリンクがサポートされている他のすべての場所と同じ形式に従います。
提案された拡張機能 API
すべてのマイルストーンには、新しい提案された API が付属しており、拡張機能の作成者はそれらを試すことができます。いつものように、フィードバックをお待ちしています。提案された API を試すには、次のことを行う必要があります。
- 提案された API は頻繁に変更されるため、Insiders を使用する必要があります。
- 拡張機能の
package.json
ファイルに次の行を含める必要があります:"enableProposedApi": true
。 - vscode.proposed.d.ts ファイルの最新バージョンをプロジェクトのソースロケーションにコピーします。
提案された API を使用する拡張機能を公開することはできません。次のリリースで破壊的な変更が発生する可能性があり、既存の拡張機能を絶対に壊したくありません。
テスト
このイテレーションでは、テスト API の最初の部分を最終決定する予定でしたが、他の進行中の機能の数が多かったため延期されました。今回のイテレーションではテスト API に破壊的な変更はありませんでしたが、エディターエクスペリエンスの向上に引き続き取り組んでいます。たとえば、ピークビューには、現在および過去のテスト実行の結果を閲覧できる分割ビューが追加されました。
テーマ: Codesong
テストには、Ctrl+; で始まるコードとしての新しいキーバインドが追加され、ピークビューは Markdown メッセージのサポートが向上し、多くのバグが修正されました。
テストに Test Explorer UI 拡張機能を使用している場合は、設定 testExplorer.useNativeTesting
をオンにして、新しいネイティブ UI に切り替えることができます。次のイテレーションでは、この設定の普及を増やし、パートナー拡張機能チームとの採用を開始する予定です。
ターミナルプロファイル contributions
この API により、拡張機能はターミナルプロファイルシステムに貢献できるようになります。拡張機能がこれを機能させるには、いくつかのことを行う必要があります。まず、package.json
でプロファイルを contribution します。
"contributes": {
"terminal": {
"profiles": [
{
"title": "Profile from extension",
"id": "my-ext.terminal-profile",
"icon": "lightbulb"
}
]
},
}
次に、新しい onTerminalProfile
アクティベーションイベントで拡張機能をアクティブ化します。
"activationEvents": [
"onTerminalProfile:my-ext.terminal-profile"
]
最後に、アクティベーションイベントでプロバイダーを登録します。
vscode.window.registerTerminalProfileProvider('my-ext.terminal-profile', {
provideProfileOptions(token) {
return {
name: 'Profile from extension',
shellPath: 'cmd.exe'
};
}
});
提案された API が有効になっている場合、拡張機能によって contribution されたプロファイルがプロファイルリストに表示されるはずです。
ターミナルオプションでの iconPath のサポート
標準の iconPath
タイプは、ターミナルのタブに表示されるターミナルのアイコンを設定するために、TerminalOptions
および TerminalExtensionOptions
でサポートされています。
readonly iconPath?: Uri | { light: Uri; dark: Uri } | ThemeIcon;
Pseudoterminal のタイトルの変更
新しいイベント Pseudoterminal.onDidChangeName
により、Pseudoterminal ベースのターミナルの制御が可能になりました。
const writeEmitter = new EventEmitter<string>();
const nameEmitter = new EventEmitter<string>();
const pty = {
onDidWrite: writeEmitter.event,
open: () => writeEmitter.fire('Type to change the title of the terminal'),
close: () => {
/* noop*/
},
handleInput: (data: string) => nameEmitter.fire(data)
};
const terminal = vscode.window.createTerminal({
name: `My Terminal`,
pty
});
terminal.show();
ファイルシステムプロバイダーがファイルを読み取り専用として宣言できるようにする
ファイルシステムプロバイダーは、FileStat
の新しい permissions
プロパティに FilePermission.Readonly
の値を設定することで、個々のファイルを読み取り専用としてマークできるようになりました。読み取り専用ファイルは編集できません。
注: すべてのファイルを読み取り専用として扱う必要がある場合は、registerFileSystemProvider
を呼び出すときに既存の isReadonly
オプションを使用できます。
asExternalUri でワークスペース URI をサポートする
既存の vscode.env.asExternalUri
API は、ワークスペース URI の処理をサポートするようになりました。これにより、拡張機能の作成者は、特定のワークスペースを直接開くシステム全体の URI を作成できます。
例
const uri = await vscode.env.asExternalUri('file:///Users/john/work/code');
結果の uri
はオペレーティングシステムで開くことができ、VS Code はそのワークスペースを開きます。
エンジニアリング
Electron サンドボックスサポートの進捗状況
このマイルストーンでは、VS Code ウィンドウを Electron のサンドボックスおよびコンテキスト分離機能を有効にする準備を継続しました。
具体的には
- レンダラーで使用されるより多くのコードから Node.js 依存関係を削除しました。
webview
の使用を完全に停止し、カスタムビューとエディターにiframe
に切り替えることを引き続き検討しました。
ドキュメント
Build 2021 での VS Code
Microsoft Build 2021 デベロッパーイベントを見逃した場合でも、オンデマンドでセッションを視聴できます。Build 2021 での Visual Studio Code ブログ記事をご覧ください。VS Code ユーザーにとって興味深いと思われるセッションのリストをまとめました。
ブラウザーのデバッグ
新しいトピック VS Code でのブラウザーのデバッグ では、Edge および Chrome ブラウザーの組み込みデバッグサポートについて説明しています。VS Code を構成して、新しいブラウザーデバッグセッションを起動 (デバッグ: リンクを開く コマンドを使用) するか、実行中のブラウザーにアタッチすることができます。
PyTorch
VS Code 内で PyTorch 機械学習フレームワークを使用する方法に関する新しいトピックがあります。VS Code での PyTorch サポート の記事では、Jupyter Notebooks を PyTorch および TensorFlow データ型で拡張する方法を学ぶことができます。
注目すべき修正
- 71966: しばしばウィンドウ全体がハングする
- 85332: Windows: ファイル削除でフリーズする
- 95077: ターミナルの「単語」リンクプロバイダーが折り返しをサポートしていない
- 108804: シェル環境の解決を待たずにウィンドウを開く
- 120004: VS Code の統合ターミナルでの奇妙な文字間隔
- 125035: デバッグコンソールフィルターテキストをリロード間で保持する必要がある
- iOS/iPadOS: iOS/iPadOS プラットフォームに対していくつかの修正が行われました。
謝辞
最後になりましたが、今月 VS Code に貢献してくださった以下の皆様に、心から感謝申し上げます。
Issue tracking への貢献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Nicholas Rayburn (@nrayburn-tech)
- Alessandro Fragnani (@alefragnani)
- ArturoDent (@ArturoDent)
vscode
への貢献
- @Ashray123 (Ashray Jha): Markdown プレビューのネストされたリストのスタイルを修正しました PR #124445
- @barbaravaldez (Barbara Valdez): ドラッグアンドドロップ API の初期実装 PR #122239
- @CommaNet (Melvin ): README.md を更新 PR #124654
- @danielgary (Daniel Gary): wmic 呼び出しを windows-process-tree に置き換えました PR #123895
- @DonJayamanne (Don Jayamanne): DTO 変換時に実行概要を保持 PR #124549
- @eltociear (Ikko Ashimine): files.ts のタイプミスを修正 PR #124693
- @gjsjohnmurray (John Murray)
- FileSystemProvider がファイルを読み取り専用として stat できるようにする (#_73122) PR #111237
- fix #123831 デバッグアダプターからの ErrorResponse メッセージでコマンド URL を処理 PR #123833
- @habibkarim (Habib Karim): Pseudoterminal.onDidChangeName を実装 PR #115276
- @hantatsang (Sang): ウェルカムビューのリンクにホバー色が欠落しているのを修正 PR #121835
- @huszkacs (Csaba Huszka): Android スクリーンキーボードのバックスペースの問題を修正 PR #124288
- @inidaname (Hassan Sani): Markdown プレビューのテーブルに下の間隔を追加 PR #124385
- @jeanp413 (Jean Pierre)
- pascalCase スニペットフォーマッターが数値を処理できない問題を修正 PR #122796
- ターミナルタブへのファイルのドロップのサポートを追加 PR #123429
- パーセントエンコードされた Markdown リンクの誤ったデコードを修正 PR #123584
- プロセスのエクスプローラーがツイスティーを表示しない問題を修正 PR #123910
- プロセスのエクスプローラーのリストスタイルが機能しない問題を修正 PR #123919
- ターミナルの検索ウィジェットがタブを覆うべきではない問題を修正 PR #124317
- ターミナルペインアクションの更新中にリスナーリークが発生する問題を修正 PR #124741
- リロードを通じて REPL フィルター値を保持 PR #125221
- @kabel (Kevin Abel): GitHub Enterprise 認証プロバイダーを実装 PR #115940
- @leilapearson (Leila Pearson): エクスプローラーの新しい辞書式順序オプション設定 PR #97272
- @mzainuddin51 (Mohammad Zainuddin): issue #123772 の誤ったリンクを修正 PR #124203
- @nrayburn-tech (Nicholas Rayburn)
- インラインデバッグ値の色カスタマイズを追加 PR #123065
- 送信時に issue reporter が閉じない問題を修正し、送信をデバウンス PR #123340
- 候補に showDeprecated オプションを追加し、非推奨オプションをフィルタリング PR #123351
- tsserver ログが 7 日以上オンになっている場合に通知を追加 PR #124149
- グループが 1 つしかない場合にターミナルタブを非表示にするオプション PR #124480
- @plankp (Paul Teng): パターンマッチング 'in' を追加 PR #121941
- @rtzoeller (Ryan Zoeller): Make 言語の .mak 拡張子を登録 PR #122614
- @shskwmt (Shunsuke Iwamoto): Fixes #116335: ドロップされたターミナル領域にファイルパステキストを送信 PR #116621
- @suzmue (Suzy Mueller): 例外のデバッグコールスタック表示の設定を修正 PR #123726
- @tejasvi (Tejasvi S. Tomar): TextEditor.setDecorations のドキュメントを改善 PR #122785
- @ValeraS (Valeriy): fix: メディアクエリリストを監視するために addEventListener の代わりに addListener を使用 PR #121557
- @vibhavsarraf (Vibhav): ターミナルワードリンクのパスを正規化 PR #123246
- @wendellhu95 (Wendell): test: イベント Relay のテストを追加 PR #119070
vscode-css-languageservice
への貢献
- @jeanp413 (Jean Pierre): ドットを含むサフィックスを持つファイル名のリンク解決を修正 PR #241
vscode-eslint
への貢献
- @edupsousa (Eduardo Pereira de Sousa): severity "off" を eslint.rules.customizations に追加 PR #1243
- @karlhorky (Karl Horky): システムバージョンの Node.js の "node" をドキュメント化 PR #1247
vscode-js-debug
への貢献
- @danielgary (Daniel Gary): 990 - 起動構成名をターミナルタイトルとして使用するサポート PR #991
- @lhchavez: feat: debugServerMain.ts の呼び出し元がホストを指定できるようにする PR #1006
vscode-languageserver-node
への貢献
- @yanmofeixi: クライアントが準備できていないエラーに詳細情報を追加 PR #764
vscode-pull-request-github
への貢献
- @IllusionMH (Andrii Dieiev): TSLint の推奨事項と残りの言及を削除 PR #2758
vscode-vsce
への貢献
- @jedwards1211 (Andy Edwards): .vscodeignore にカスタムコードの代わりに ignore npm パッケージを使用 PR #418
- @oliversalzburg (Oliver Salzburg): fix: エラー応答処理の欠落 PR #564
language-server-protocol
への貢献
- @DanTup (Danny Tuppeny): textDocument/selectionRange が一部の欠落結果をどのように処理できるかを明確化 PR #1272
- @HO-COOH: specification-3-16.md を更新 PR #1259
- @narnaud (Nicolas Arnaud-Cormos)
- @NTaylorMullen (N. Taylor Mullen)
monaco-languages
への貢献
- @akonatala (apoorva konatala): cameligo 言語サポートを更新 PR #137
- @anark: liquid 言語にエイリアスと MIME タイプを追加 PR #136
- @mattvague (Matt Vague): liquid の誤ったファイル名を修正 PR #135
monaco-typescript
への貢献
- @paranoidjk (paranoidjk): fix: extraLib ファイルの定義への移動をサポート PR #79