Visual Studio Code の バージョン 1.19 がリリースされたので、リリースノートを眺めてみてどんな機能が追加されたのか見てみる。(過去分はこちら。1.18 / 1.17 / 1.16 / 1.15)
パフォーマンス関連
約50個のパフォーマンス関連のIssueが対応された。例えば、
- コンフィグレーションモデルの改善による起動と全体的なパフォーマンスの向上(#37426, #37539)
- package.jsonの拡張機能情報をキャッシュすることによる起動の改善(#28331)
- ヘルパープロセスの生成を遅らせることによる起動の改善(#38230, #38235, #38323)
- 起動時のパフォーマンスを向上させるためのファイル読み込みの改善(#37541)
- ツリーに代わるより高速なリストウィジェットの使用による、ブレークポイントビューとエクスプローラのファイルオープンの改善(#38638)
- タッチイベント処理の最適化によるパフォーマンス改善(#37917)
- 不要なレイアウトと計算のスキップによるワークベンチの全体的なパフォーマンス改善(#39699, #39185, #38966, #38963, #38962, #38960)
- 未使用コードの除去による起動パフォーマンスの改善(#38414)
今まではワークベンチ関連とかエディタ関連とかのトピックが先頭に来ていたが、今回のリリースの目玉はパフォーマンス改善なのか!
サービスアビリティ関連
今回のリリースでは、問題を追跡するために必要な情報を簡単に提供できるよう、VS Codeのサービスアビリティにも注力した。これらの機能の一部はまだ開発中だが、手元にあるツールを早急に提供したいと考えた。
ロギング
- クラッシュや遅延などの予期しない問題の診断のためにアクティビティログを出力するようになった。
- VS Codeでは4つの主要なプロセス(main, shared, renderer, extension-host)を生成するが、それぞれのプロセスについてのログが各ログファイルに出力される。
- それぞれのログファイルを参照するには、「開発者: ログの表示...」コマンド(Developer: Show Logs...)を使用する。プロセスの一覧のピッカーが表示されるので表示したいプロセスを選択する。
- サポートしているログレベルは、critical/error/warn/info/debug/trace/off。
- デフォルトではinfoレベルに設定されており、info以上(critical/error/warn/info)のログが出力される。
- ログレベルを変更するにはコマンドラインの引数
--log <level>
にて指定する。ログ出力を抑止する場合は<level>
にoff
を指定する。 - いざという時は確かに便利そう。
コマンドラインオプション--status
- VS Codeの有用な診断情報をターミナルに表示する新しいコマンドライン引数が追加された。
- これにより、GitHubのIssueでこの情報を共有することができ、問題の時点でのVS Codeの状態をよりよく理解することができるようになる。
- 現在実行中のVS Codeとは別インスタンスで
code --status
をコマンドラインから実行すると、情報が収集されて表示される。 - 出力される情報には、環境の情報、実行されているプロセス、ワークスペース内の特定のファイルタイプ別のファイル数が含まれている。
- Issueに問題を報告する場合は、こういう共通のフォーマットがあったほうが、報告する側にとっても、それを見る側にとってもわかりやすくてよいね!
VS Codeプロセスビュー
- 上記コマンドラインオプション
--status
の副産物として、VS Codeのすべての子プロセスをカスタムビューで表示し、プロセスの進捗状況に応じて動的に更新する実験的な拡張機能vscode-processes
を作成した。 - プロセスの役割をよりよく理解するために、この拡張機能ではプロセス引数を分析し、それに応じてプロセスにラベルを付ける。また、CPU負荷とメモリ消費量も括弧内に表示している。
- さらに、VS Code自体でデバッグできるプロセスを特定し、コンテキストメニューのデバッグアクションを提供する。すべてのプロセスについて、メニューから終了させたりkillさせたりもできる。
- ただし、この拡張機能はまだプロトタイプであり、マーケットプレイスからはまだ利用できないが、GitHubリポジトリからcloneしてインストールすれば使える。
実行中の拡張機能ビュー
- ユーザーが不完全な拡張機能や不十分な拡張機能を簡単に検出できるように、「実行中の拡張機能」ビューが追加された。
- このビューには現在実行中のすべての拡張機能と有用なパフォーマンス情報が表示される。
- このビューでは、VS Codeのプロファイルを作成して、どの拡張機能が最も時間を要しているかを検出し、パフォーマンスの問題の原因となる可能性を調査できる。
- このビューを表示するには、コマンドパレットから「開発者: 実行中の拡張機能の表示」コマンド(Show Running Extensions)を実行する。
- ただしこのビューはまだ開発中であり、将来のリリースで更新される予定。
パフォーマンスとネイティブクラッシュの問題をファイルに記録する方法
以下のガイドが作成された。
- パフォーマンスの問題 - パフォーマンス問題の追跡とファイル化
- ネイティブクラッシュの問題 - ネイティブクラッシュ時の情報収集方法
新しいエディタタブのレイアウトオプション
- 新たな設定項目として
workbench.editor.tabSizing
が追加され、ウィンドウ幅に応じてタブのサイズを変更することができるようになった。 - デフォルト値
fit
はこれまでと同じように機能し、常にタブにファイルの名前全体が表示される。 -
shrink
を指定することでこの動作を変更でき、使用可能なスペースがほとんどない場合、タブ付きヘッダーは最小限に収まる。 - なるほどー。
パイプ出力のVS Codeへの直接出力
- ターミナルコマンドの出力をVS Codeに直接パイプし、エディタで開けるようになった。
- おおー!これはいろいろ便利そう!コマンドラインで情報を取得/加工してそれをコードで使いたい場面ってよくあるからね!
開いているファイルとクリップボードの比較
- コマンド「ファイル: クリップボードとアクティブファイルを比較」(File: Compare Active File with Clipboard)を使用して、現在開いているファイルの内容とクリップボードの内容を比較できるようになった。
workbench.panel.locationが非推奨に
- 前回のリリースで追加された、パネルの配置を下部から右部に変更できる機能について、設定状態の保持場所がユーザー設定からストレージに変更された。
エディタ関連
より賢くなったインテリセンス
- 今回のリリースで、インテリセンスが複数候補をリストした時に、以前選択したものがどれかを覚えていて、あらかじめそれを選択しておいてくれるようになった。
- また、タイプミスをしてもインテリセンスが判断して、正しいと思われる候補を優先的に表示するようになった。
- すげー!あったまいぃー!!(←頭悪いリアクション)
折りたたみの改善
- 折りたたみ行の左横にあるアイコン(
+
とか-
)をクリックすると、子の折りたたみについてはそれぞれの折りたたみ状態が保持されるが、Shiftを押しながらクリックすることにより、子についてもすべて折りたたみ/展開されるようになった。 - 次の言語において新しい折り畳み領域が追加された。
- CSS/Less/SCSS:
/*#region*/
および/*#endregion*/
- Coffeescript:
#region
および#endregion
- PHP:
#region
および#endregion
- Bat:
::#region
および::#endregion
- CSS/Less/SCSS:
- 以下の新しい折りたたみコマンドが追加された。
- すべての領域を折りたたむ(Fold All Regions) (Ctrl+K Ctrl+8)
- すべての領域を展開(Unfold All Regions) (Ctrl+K Ctrl+9)
- すべてのブロックコメントの折りたたみ(Fold All Block Comments) (Ctrl+K Ctrl+/)
行番号表示のオプション追加
- 設定
editor.lineNumbers
の選択肢としてinterval
が追加され、行番号を10行おきに表示させることができるようになった。
macOSのグローバル検索クリップボード
- エディタはmacOSグローバル検索クリップボードと統合され、VS Codeや別のネイティブmacOSアプリケーションで何かを検索してから別のmacOSアプリケーションに切り替えると、検索ウィジェットには同じテキストが含まれる。
- この機能はmacOSではデフォルトで有効になっており、
editor.find.globalFindClipboard
をfalse
に設定すると無効にすることができる。
言語関連
HTMLの特殊文字のコード補完
- HTMLにおいて、
>
や&
のような&
で始まる特殊文字のコード補完をサポートするようになった。
JSON with commentsの追加
- コメントが許可されたJSONライクなファイルと、標準のJSON仕様に従ったJSON形式のファイルを区別するために、新しいモード
JSON with Comments(jsonc)
が追加された。 - VS Codeの設定ファイルについては新しいモードが適用されコメントが許可されるが、通常の.jsonファイルはデフォルトでは標準JSONモードとなり、コメントはエラー扱いとなる。
TypeScript 2.6.2
- 今回のリリースにはTypeScript 2.6.2が含まれている。
- これによりfixされたIssueはこちら。
JSXフラグメント構文
- TypeScript 2.6.2はReact 16.2の新しいJSXフラグメント構文をサポートしている。
TypeScript: スタイルチェックを警告で表示
- TypeScriptのコードスタイルの問題がエラーではなく警告として表示されるようになった。
- 適用対象は、
- 宣言のみで未使用の変数
- 宣言のみで読み込まれないプロパティ
- 到達不能コード
- 未使用ラベル
- switch内のcaseの失敗
- 値を返さないコードパス
- これらを警告として扱うことは、TSLintなどの他のツールと一貫している。
- これらはコマンドラインからtscを実行するとエラーとして表示される。
- このふるまいを抑止するには、設定項目
typescript.reportStyleChecksAsWarnings
にfalseを設定する。
言語サーバプロトコル
- 言語サーバプロトコルにおいていくつかの新しい機能が拡張された。
- 追加されたプロトコルは、クライアントおよびサーバーのnpmモジュールのバージョン4.0.0-next.xにて利用できる。
Git関連
画像の変更表示
デバッグ関連
「ブレークポイントの編集」コマンド
- ブレークポイントのコンテキストメニューに新たに「ブレークポイントの編集」コマンドが追加され、ブレークポイント条件の設定やヒットカウントの設定ができるようになった。
- デバッグ機能もどんどんできることが増えていってよいね!
環境変数の定義の解除
- 多くのデバッグ拡張機能は、デバッグ対象に渡される環境変数の追加(またはオーバーライド)をサポートしているが、今回のリリースでは、環境変数の定義解除(削除)ができるようになった。
- 環境変数にnullが設定されている場合、この変数はデバッグ対象が起動される前に環境から削除される。これにより、定義されていない変数に依存するコードのテストやデバッグがはるかに簡単になる。
- 今回のリリースではNode.jsデバッガのみがこれをサポートしている。
変数ビューの表示スタイルの工夫
- デバッガの変数ビューにおいて、実際の変数と区別するためにビュー上の仮想の表示要素を控えめなスタイルで表示するようにした。
- 今回のリリースでは大きな配列の範囲ノードのみがこの対象となる。
- 将来的にはさらに多くのデバッグ拡張機能で採用される予定。
- うん、確かにこのほうがわかりやすい!
新しいデバッグ設定項目
-
debug.showInStatusBar
によって、デバッグのステータスバーの表示を制御できるようになった。デフォルトはonFirstSessionStart
で、他にnever
とalways
を指定できる。 -
debug.openDebug
によって、デバッグビューの表示を制御できるようになった。デフォルトはopenOnFirstSessionStart
で、他にneverOpen
とopenOnSessionStart
を指定できる。 - 今まではデバッグの際にいちいちデバッグビューを開く必要があったが、これらの設定により、デバッグビューを開かなくてもデバッグが開始できたり、デバッグ中にデバッグビューに切り替えさせさせないことが可能になった。場面によってはありがたい設定!
拡張機能関連
ワークスペースごとに拡張機能を有効にさせることが可能に
- 全体またはワークスペースごとに機能拡張を無効にする機能はサポートしていたが、ワークスペースごとに拡張機能を有効にする機能が無かった。
- 今回のリリースでは、特定のワークスペースに対してのみ実行される拡張機能を設定できるようになった。
- というか、ワークスペースごとに拡張機能を無効にできることを知らなかった・・・
新しいドキュメント
Java
- Java Extention Packを使用してデバッグ、クラウド開発、Azure関数の開発を行うトピックの追加
Python
- Pythonにも独自のセクションがあり、そこにはMicrosoft Python拡張機能のチュートリアルがある。トピックは「Hello World」から始まり、デバッグ、LINT、単体テストと続いている。
デバッグレシピ
- 新たにいくつかのデバッグレシピが追加された。
拡張機能開発関連
プレリリースバージョン
- バージョン番号の末尾に
-alpha
や-beta
などを付加したプレリリースバージョンで拡張機能のVSIXを配布できるようになった。 - VS Codeはこれらを検出し、ここで定義されているバージョン増分に従ってアップデートを提供する。
拡張機能ジェネレータyo code
- TypeScriptとJavaScriptの拡張機能を提供するyeomanジェネレータは、拡張機能のチェックをさらに有効にするための追加オプションを提供するようになった。
- TypeScriptエクステンションの場合、ジェネレータはTSLintをセットアップし、厳密なTypeScriptコンパイラオプションを有効にするためのオプションを提供する。
- JavaScriptの場合、JavaScriptファイルの型チェックを可能にするcheckJSオプションを有効にするためのプロンプトが表示される。
デバッグAPIの更新
ブレークポイントAPI(プレビュー)
- ワークスペースのすべてのブレークポイントのセット(vscode.debug.breakpoints)にアクセスし、追加、削除、または変更されたブレークポイント(vscode.debug.onDidChangeBreakpoints)に関する通知を登録することが可能になった。
- ブレークポイントにアクセスすると最初は空の配列が返されるが、その後のBreakpointsChangeEventイベントがトリガされ、vscode.debug.breakpointsが正しいセットに更新される。よって、コードが正しいブレークポイントセットに依存している場合は、BreakpointsChangeEventsに登録する必要がある。
- 異なるタイプのブレークポイントは、ブレークポイントの異なるサブクラスとして表される。現在、SourceBreakpointとFunctionBreakpointがサポートされている。具体的なタイプを判別するには、instanceof checkを使用する。
- 現在提案中のこのAPIを使用するには、package.jsonの"enableProposedApi"にtrueを設定し、vscode.proposed.d.tsを拡張機能プロジェクトにコピーする必要がある。また、enableProposedApi属性を使用する拡張機能はマーケットプレイスで公開することはできない。
デバッグコンソールでのテキスト出力
- 前回提案されていたデバッグコンソールAPIはわずかに変更され、「提案済み」から「公式」に移行した。
- 拡張機能は、vscode.debug.activeDebugConsole.append(text)またはvscode.debug.activeDebugConsole.appendLine(text)を使用して、デバッグコンソールにテキストを追加できる。
- 非推奨のdebug.logToDebugConsoleは、マーケットプレイスの拡張機能で使用されなくなればすぐに削除される。
package.json関連
詳細なデバッガ起動イベント
- デバッグ拡張機能がDebugConfigurationProviderを使用する場合、最初に使用する前にDebugConfigurationProviderを登録できるように、拡張機能を早めにアクティブにすることが重要。
- これを簡単に実現するには、拡張機能のpackage.jsonのactivationEventsセクションにonDebugアクティベーションイベントを追加する。 拡張機能が起動に時間がかからない限りうまく動作する。 例えば、言語サーバーを起動するなどの場合は、他のデバッグ拡張機能に悪影響を及ぼす可能性があるため、早期のアクティブ化は避けなければならない。
- 起動を簡単にするために、さらに2つの細かい起動イベントを導入した。
- onDebugInitialConfigurationsは、DebugConfigurationProviderのprovideDebugConfigurationsメソッドが呼び出される直前に発生する。
- onDebugResolve:typeは、指定された型のDebugConfigurationProviderのresolveDebugConfigurationメソッドが呼び出される直前に発生する。
- デバッグ拡張機能の起動が軽い場合はonDebugを使用したほうがよいが、重い場合は、DebugConfigurationProviderが対応するメソッドprovideDebugConfigurationsかresolveDebugConfigurationを実装するかどうかによって、onDebugInitialConfigurationsかonDebugResolveを使用する。
デバッグアダプタプロトコル
Variable型のpresentationHint.kind属性用の新しいenum値virtual
- 新しいenum値virtualは、変数が、レンダリングまたはユーザー対話の目的でデバッガによって導入された合成オブジェクトであることを示す。
- クライアントは、この要素を通常の変数とは異なる方法でレンダリングすることが期待される。
環境からの変数の削除のサポート
- runInTerminalリクエストは、デバッグアダプタが統合ターミナルや外部ターミナルでデバッグターゲットを起動するために使用される。
- リクエストに対するパラメータは、デバッグターゲットに渡す一連の環境変数。
- 今回のリリースでは、環境変数のvalue型に「ターゲットを起動する前に環境変数を環境から削除する」という意味でnullが追加された。
エンジニアリング関連
Yarn
- 現在、開発チームでは生産と開発の依存関係を管理するためにYarnを使用している。
- これにより、開発とビルドの両方でVS Codeリポジトリを準備する時間が大幅に短縮された。 詳細はこのプルリクエストを参照。
新しいコマンド
-
基本設定: 規定の設定をRawで開く (Preference: Open Raw Default Settings)
- デフォルトの設定のファイル(defaultSettings.json)を直接開く。上書き不可。
-
表示: タブ表示の切り替え (View: Toggle Tab Visibility,
Ctrl
+Win
+W
)- エディタのタブ表示のON/OFFの切り替え
-
表示: グループ内の最後のエディターを開く (View: Open Last Editor in Group,
Ctrl
+9
,Alt
+0
)- エディタグループの一番最後のエディタをアクティブにする。
- が、これは前のバージョンから存在していた(ショートカット:
Alt
+0
)はずだが、今回、ショートカットCtrl
+9
として追加されている。以前のショートカットも生きたまま。謎。
-
ファイル: クリップボードとアクティブファイルを比較 (File: Compare Active File with Clipboard,
Ctrl
+K
C
) -
検索: 最新の情報に更新 (Refresh)
- 検索ビューの検索結果を更新する
-
検索: すべて折りたたむ (Collapse All)
- 検索結果のツリービューを折りたたむ
-
検索: クリア (Clear)
- 検索ビューをクリアする
注目すべき変更
- 36491: コード補完中にバックスペースを押すとコード補完がキャンセルされてしまう問題
- 39594: ネストされたスニペット挿入に関する問題
- 11928: 未保存ファイルを閉じる際にダイアログが複数表示される問題
- 31667: リモートネットワークドライブ上のファイルから設定値が取得できない問題
- 18733: 半分隠れているタブをドラッグした際にタブの表示がおかしくなる問題
- 16690: マウスホイールでタブを閉じた時の問題
-
30530: クイックオープン時にプレビューをスキップされるショートカット
-
Ctrl
+P
でファイルを開くとプレビューモードで開いてしまうが、場合によってはプレビューモードをスキップしたいというIssue。ファイルを選ぶ時にEnter
ではなくAlt
+Enter
を押すとプレビューモードがスキップされるように改善された。
-
- 17552: 未保存のファイルを他のタブで「その他を閉じる」した時に確認ダイアログは表示されるが未保存ファイルにタブが切り替わらない問題
- 15477: VSIX拡張機能での依存関係のサポート
- 26871: 問題パネルに件数バッジを表示
-
35580: ワークスペースの設定・フォルダの設定をより見つけやすくする
- 設定画面で、ユーザ/ワークスペース/フォルダの設定がタブで表示されるようになった。
- 38609: VSIXを用いた拡張機能のインストールで、より古いバージョンがインストールできない問題
- 28331: 拡張機能のマニフェストファイルのキャッシュ化
- 38481: 依存関係の管理のためのYarnの使用
- 35749: Gitワーキングツリー上の画像ファイルがプレビューできない問題