に参加して、VS Code の AI 支援開発について学びましょう。

2021年7月 (バージョン 1.59)

アップデート 1.59.1: このアップデートでは、これらの問題に対処しています。

このリリースでは、CVE-2021-26437にも対処しています。

ダウンロード: Windows: x64 Arm64 | Mac: ユニバーサル Intel シリコン | Linux: deb rpm tarball Arm snap


Visual Studio Code 2021年7月リリースへようこそ。このバージョンには、皆さんに気に入っていただけるであろう多くの更新が含まれています。主なハイライトは次のとおりです。

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

太平洋時間8月10日火曜日午前8時 (ロンドン時間午後4時) にVS Codeチームのライブストリームで、今回のリリースの新機能のデモンストレーションをご覧いただき、ライブで質問してください。

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

Workbench

拡張機能

サイズ変更時の拡張機能ビューの改善。次の短いビデオでは、デフォルトの幅を持つ拡張機能ビューがすべての詳細を表示しています (以前はアイコン、評価、インストール数が表示されていませんでした)。ビューが縮小すると、より小さな拡張機能アイコンが表示され、さらに幅が縮小すると、アイコンと評価が非表示になります。

Dynamic Extensions view

テーマ: GitHub Light Theme

拡張機能ビューは、拡張機能にカスタムホバーを表示するようになりました。この豊富なホバーには、拡張機能の完全な説明と、拡張機能が無効または推奨される理由などの他の有用な情報が含まれています。

Custom Extension hover

テーマ: GitHub Light Theme

拡張機能ペインの新しいランタイムステータスタブで、拡張機能のランタイムステータスを確認できるようになりました。ステータス情報には、アクティベーション時間、起動時にアクティベートされるかどうか、警告やエラーがあるかどうかが含まれます。この情報の一部は、拡張機能ビューとそのホバー (上の画像に表示) に表示されます。

Extension Runtime Status

テーマ: GitHub Light Theme

拡張機能ペインの「詳細」タブに、カテゴリ、リソースリンク、および拡張機能のリリース日や更新日などのその他の情報が表示されるようになりました。カテゴリを選択すると、そのカテゴリの他の拡張機能が拡張機能ビューに表示されます。

Extension Details

テーマ: GitHub Light Theme

設定エディター

設定エディターは、オブジェクトの検証をサポートするようになりました。この検証は、JSONファイルを直接編集する際に発生する可能性のある型エラーをチェックします。

Object setting showing validation errors

配列設定は、編集モードでないときにドラッグアンドドロップをサポートするようになりました。さらに、uniqueItemsプロパティがtrueに設定された列挙型配列設定は、ドロップダウンにすべてのオプションではなく、残りのオプションのみを表示するようになりました。

Drag and drop for array settings

設定エディターは、複数行の文字列設定もサポートするようになりました。この場合、値は単一行の入力ボックスではなく、複数行のテキストエリアでレンダリングされます。

An example of a multiline string setting

拡張テーマのカスタマイズ構文

以下のカラーカスタマイズ設定により、ユーザーは現在のテーマのカラーをカスタマイズできます。

  • workbench.colorCustomizations
  • editor.tokenColorCustomizations
  • editor.semanticTokenColorCustomizations

複数のテーマを一度にカスタマイズするための新しい構文があります。

    "workbench.colorCustomizations": {
        "[Abyss][Red]": {
            "activityBar.background": "#ff0000"
        },
        "[Monokai*]": {
            "activityBar.background": "#ff0000"
        }
    },

複数のテーマを一覧表示できるほか、名前の最初と最後に*ワイルドカード文字を使用できます。

Jupyter Notebookのサポート

今月、*.ipynbファイルの読み取りを処理するコードを、Jupyter Notebook拡張機能から新しい組み込み拡張機能に移動しました。これにより、Jupyter拡張機能をすべてインストールすることなく、VS CodeのクリーンインストールでJupyter Notebookを開くことができるようになりました。ただし、セルを実行したり、ipywidgetsまたはその他の複雑なレンダラータイプを使用する出力を表示したりする場合は、Jupyter拡張機能をインストールする必要があります。

ノートブックレイアウトの改善

今回のイテレーションでは、ノートブックのレイアウトにいくつかの改善を加えました。

  • セルが折りたたまれているときに、セル入力の最初の行がレンダリングされるようになりました。
  • ウィンドウの幅が十分に広くなく、すべての主要なアクションをレンダリングできない場合、ノートブックエディターのツールバーのアクションはオーバーフローメニュー (...) に移動します。
  • notebook.undoRedoPerCellのデフォルト値がtrueに変更されました。

notebook layout improvements

コードセルのデフォルトスタイルも更新し、セルを区別しやすくするために背景色を表示するようになりました。テーマはnotebook.cellEditorBackgroundを使用してこの色をカスタマイズできます。

Example of updated notebook code cells

最後に、notebook.globalToolbarShowLabel設定を使用して、ノートブックツールバーのテキストラベルを切り替えることができるようになりました。

Example of notebook toolbar text

相対パスをコピーするためのパス区切り文字を設定する

新しい設定explorer.copyRelativePathSeparatorを使用すると、関連パスをコピーアクションを呼び出すときに、パス区切り文字を明示的に設定できます。

利用可能な区切り文字オプションは次のとおりです。

  • auto (デフォルト) - オペレーティングシステム固有のパス区切り文字を使用します。
  • / - スラッシュをパス区切り文字として使用します。
  • \\ - バックスラッシュをパス区切り文字として使用します。

エディターグループ間でビューの状態を共有する

エディターのビューの状態 (例: エディターのスクロール位置) がエディターグループ間でどのように共有されるかを構成するために、新しい設定workbench.editor.sharedViewStateが追加されました。

デフォルトでは、この設定は現在の動作を維持するために無効になっています。エディターを横に開き、後でそのエディターグループを閉じても、再度エディターを横に開くと、新しいエディターグループを開いているため、ビューの状態は復元されません。ただし、この設定を有効にすると、最新のエディターのビューの状態がすべてのエディターグループで保持され、エディターグループにより具体的なビューの状態が見つからない限り、それが使用されます。

以下では、package.jsonファイルを横に再度開いたときに選択状態が保持されます。

Shared editor group view state

Editor

折りたたみ領域間のナビゲーション

対応する折りたたみにカーソル位置を設定するための新しいコマンドがあります。

  • 次の折りたたみに移動 (editor.gotoNextFold)
  • 前の折りたたみに移動 (editor.gotoPreviousFold)
  • 親の折りたたみに移動 (editor.gotoParentFold)

これらのコマンドには現在デフォルトのキーバインドはありませんが、Preferences: Open Keyboard Shortcuts (⌘K ⌘S (Windows, Linux Ctrl+K Ctrl+S)) を介して独自のキーボードショートカットを追加できます。

インポートを自動的に折りたたむ

設定editor.foldingImportsByDefaultを使用して、インポートステートメントを自動的に折りたたみます。折りたたみ状態は、ファイルが一度開かれると保存されます。この機能は、TypeScript、JavaScript、Java、C#、C++、およびインポートステートメントにFoldingRangeKind.Importsを注釈付けする折りたたみ範囲プロバイダーを持つすべての言語で機能します。

選択範囲から検索文字列をシードする

検索コントロール設定editor.find.seedSearchStringFromSelectionが拡張され、空でない選択範囲からのみ検索文字列をシードするのをサポートするようになりました。デフォルトでは、検索コントロールが表示されるとき、エディターは選択範囲または空の選択範囲の周りの単語を検索キーワードとして使用します。

インラインサジェストの改善

インラインサジェストのレンダリング方法を変更しました。これにより、多くのバグが修正されるだけでなく、単語の折り返しがインラインサジェストを認識するようになりました。

さらに、末尾以外の位置での複数行のインラインサジェストがサポートされるようになりました。

インレイヒントの改善

インレイヒントのレンダリング方法も変更しました。インラインサジェストと同じメカニズムを使用することで、インレイヒントも単語の折り返しで考慮されるようになりました。このメカニズムにより、インレイヒントの周りに個別のカーソル停止も可能になります。

ターミナル

ウィンドウ間でターミナルをドラッグアンドドロップする

あるウィンドウのタブリストまたはエディター領域から、別のウィンドウのタブリスト、エディター領域、またはパネルにターミナルをドラッグアンドドロップできます。

Drag and drop terminal across windows

子プロセスの追跡と終了時の警告

既存のterminal.integrated.confirmOnExitと新しいterminal.integrated.confirmOnKill設定は、子プロセスの追跡を使用して、シェルプロセスの下に子プロセスがあるターミナルを閉じようとするときに警告を表示します。デフォルトでは、この追跡はエディター領域のターミナルのみに影響しますが、すべてのターミナルまたはパネル領域のターミナルに警告を表示するように設定できるようになりました。

貢献されたターミナルプロファイルをデフォルトとして設定する

拡張機能によって貢献されたターミナルプロファイルをデフォルトプロファイルとして設定できるようになりました。デフォルトのターミナルプロファイルは、ターミナルドロップダウンのDefaultサフィックスで示されます。

The terminal profile dropdown displays indicates the extension terminal profile is set as the default

下線と取り消し線のサポート

統合ターミナルは、下線と取り消し線の属性をサポートするようになりました。たとえば、Gitを構成して、これらの新しい属性を使用できます。

Git output in terminal with underline and strikethrough text

テーマ: Sapphire Theme

上記の例では、.gitconfigで以下の設定を使用しています。

[color "status"]
  added = green bold
  changed = red bold strike
  untracked = cyan
  branch = yellow black bold ul

エディター領域の横にターミナルを作成する

アクティブなエディターの横のエディター領域にターミナルを作成する新しいコマンドworkbench.action.createTerminalEditorSideがあります。

アクティブなターミナルタブインジケーター

テーマは、テーマキーterminal.tab.activeBorderを使用して、アクティブなターミナルタブを示す垂直線の色を設定できるようになりました。

Highlighted active terminal

terminal.tab.activeBorderが設定されていない場合、色はtab.activeBorderにフォールバックされます。

ターミナルタブアイコンのアニメーションを無効にする

新しい設定terminal.integrated.tabs.enableAnimationは、ターミナルタブアイコンのアニメーションを無効にします。タスクの場合、スピナーアニメーションの代わりに再生ボタンが使用されます。

Terminal tab without animation and play button displayed

デバッグ

エディタタイトル内の実行/デバッグボタンの改善

2月のリリースでは、エディタのタイトル領域の中央 (かつコンパクトな) 位置に実行コマンドとデバッグコマンドをグループ化するドロップダウンボタンを導入しました (1.54リリースノートを参照)。ユーザーのフィードバックに基づいて、最後に実行されたアクションを記憶することでドロップダウンボタンを改善しようとしました。ドロップダウンボタンには2つのクリックゾーンがあり、1つはデフォルトアクション用 (左)、もう1つはドロップダウン用 (右) で、選択するとアクションが実行され、新しいデフォルトとして記憶されます。

Debug/run split button shown for Java

ドロップダウンの動作

  • 実行アクションまたはデバッグアクションが1つしかない場合、ドロップダウンメニューは省略されます。
  • 実行アクションまたはデバッグアクションが複数ある場合、すべてのアクションがドロップダウンメニューに表示され、デフォルトアクションはドロップダウンメニューの最初のアクションに設定されます (記憶されているアクションがない場合)。
  • デフォルトアクションは、VS Codeの再起動後も特定のワークスペースに対して保持されます。エディターごとに保持されるわけではありません。

拡張機能への貢献

ライブプレビュー

Live Preview拡張機能は、先月リリースされ、いくつかのエキサイティングな新機能が含まれています。これには以下が含まれます。

  • 外部プレビュー用の組み込みJavaScriptデバッガーとの互換性。
    • Live Preview: Show Debug Previewを実行して試してみてください!
  • "Find in Page"サポートやwebvivew DevToolsへのクイックアクセスなど、組み込みブラウザーの改善。
  • 自動生成されたファイルのファイルシステム監視。
  • その他多数! 🎉

今月の進捗状況の詳細については、拡張機能のリリースノートをご覧ください。

Live Preview Debugging

Live Preview new browser features

テーマ: GitHub Dark Theme

GitHub Pull Requests and Issues

プルリクエストとイシューの作成、管理、作業ができるGitHub Pull Requests and Issues拡張機能の開発は継続中です。今月のハイライトの1つは、イシューで作業を開始する機能が拡張され、現在のリポジトリ外のイシューでも作業できるようになったことです。

すべての新機能と更新については、拡張機能の0.29.0の完全な変更ログをご覧ください。

Jupyter

Jupyter拡張機能の開発は継続中です。すべての新機能と更新については、拡張機能の7月の完全な変更ログをご覧ください。

VS Codeがノートブックのネイティブサポートを可能にするまでの道のりについて詳しく知りたい場合は、最近のブログ記事Coming of Age of Notebooksをご覧ください。

インタラクティブウィンドウ

Jupyterインタラクティブウィンドウは、ノートブックインターフェースの代わりにテキストファイルを使用してJupyterノートブックを構築および操作する別の方法を提供します。先月、テーマ、カスタムキーバインド、スニペット、拡張機能との互換性など、より深いワークベンチ統合を特徴とするJupyterインタラクティブウィンドウのアップグレード版をプレビューしました。プレビューエクスペリエンスに関するGitHubイシューを通じてフィードバックを提供してくださったユーザーの皆様に感謝いたします。組み込みのインタラクティブウィンドウは、バージョン1.59でデフォルトのインターフェースになりました。以前のインターフェースは、設定"jupyter.enableNativeInteractiveWindow": falseの背後に引き続き利用できますが、今後のリリースで削除される予定です。皆様からのフィードバックをお待ちしております。

Shift+Enter to run code in the Interactive window

行ごとに実行

Jupyter Notebookで「行ごとに実行」機能のサポートに取り組んできました。この機能は基本的に、複雑なデバッグUIなしで、セルのコードを1行ずつステップ実行できる簡素化されたデバッグモードです。これはまだ実験的ですが、"jupyter.experimental.debugging": trueを設定し、選択したカーネルにipykernelのバージョン6をインストールし、セルツールバーの行ごとに実行ボタンを選択することで試すことができます。

Run by line

Python

Python拡張機能では、Pythonインタープリターのリストのソートを改善しました。以前は、仮想環境がリストの下部に表示され、多くのスクロールや検索が必要でした。プロジェクトルートにある仮想環境が最初に表示され、次にグローバルにインストールされた環境が表示されるようになりました。

List of Python interpreters

Dev Containers devcontainer CLI

VS Code内からDockerコンテナーを操作するためのDev Containers拡張機能に、devコンテナー内のフォルダーを開く (devcontainer open) またはdevコンテナーイメージをビルドする (devcontainer build) ためのdevcontainerコマンドラインインターフェースが追加されました。

新しいRemote Development拡張機能の機能とバグ修正については、Remote Developmentリリースノートをご覧ください。

プレビュー機能

無題ファイルの自動言語検出

機械学習を使用してコーディングしている言語を検出し、無題ファイルの言語モードを自動的に設定する、無題ファイルの自動言語検出の初期プレビューを発表できることを嬉しく思います。この機能は、オープンソースのMLライブラリTensorflow.jsと、GitHubユーザー@yoeoによるGuesslangのMLモデルを使用しています。

このリリースでは、この機能はデフォルトでオフになっていますが、次のイテレーションでデフォルトにする予定です。有効にするには、次の設定を適用してください。

"workbench.editor.untitled.experimentalLanguageDetection": true

この機能を実際に見てみるには、無題ファイル (ファイル > 新規ファイル) を開き、ソースコードをエディターに貼り付けます。

以下は、Pythonコードの自動検出の例です。

paste a code snippet right into VS Code and it will detect the language

テーマ: Panda Theme

さらに、言語ピッカーを開くことで、どの言語が検出されているかを確認できます。

the language picker also shows the detected languages if there are any

テーマ: Panda Theme

: 言語検出の信頼度が十分でない場合、現在の言語モードのままとなり、言語検出の信頼度が高まるまで言語ピッカーには結果が表示されません。

この設定では、自動的に切り替わってほしくない言語モードを指定するための言語オーバーライドも提供できます。

Markdownファイルを自動検出しない例を次に示します。

"workbench.editor.untitled.experimentalLanguageDetection": true
"[markdown]": { "workbench.editor.untitled.experimentalLanguageDetection": false }

上記の設定では、無題のMarkdownファイルを編集している間は自動言語検出は実行**されません**。ただし、他の種類の無題ファイルを変更すると、それらのファイルの内容で自動言語検出が**実行されます**。

MLモデルとやり取りするコードは、npmパッケージとしてvscode-languagedetectionリポジトリにリリースされた独自のライブラリに分離されました。

無題ファイルの自動言語検出がどのように機能するか、ぜひお知らせください!

TypeScript 4.4

このリリースには、次期TypeScript 4.4リリースのサポートが含まれています。TypeScript 4.4の新機能と改善点については、TypeScriptブログで詳しく読むことができます。主なツール機能のハイライトは次のとおりです。

  • JavaScriptおよびTypeScriptファイルの両方におけるパラメーター名と型のインレイヒント。
  • プレーンなJavaScriptファイルにおける基本的なスペルサジェスト。これらは、TypeScript言語サービスがエラーと修正に十分な自信を持っている場合にのみ表示されます。

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

フィードバックをお寄せいただき、TypeScript 4.4でバグが発生した場合はお知らせください。

逆アセンブリビュー

Microsoft C++チームによる多大な貢献のおかげで、今回のマイルストーンでデバッグ逆アセンブリビューのプレビューを組み込むことができました。

逆アセンブリビューは、エディターのコンテキストメニューから開くことができ、アクティブなスタックフレームの逆アセンブルされたソースを表示し、アセンブリ命令のステップ実行や個々の命令へのブレークポイントの設定をサポートしています。

逆アセンブリビューは、アクティブなデバッグセッション中で、基となるデバッグ拡張機能がそれをサポートしている場合にのみ利用できます。現在、MicrosoftのC++およびMock Debug拡張機能のみが逆アセンブリビューにフィードできます。

Disassembly view in Mock Debug extension

技術的な観点から、VS Codeの逆アセンブリビューの実装は、Debug Adapter Protocolのさらに4つの機能をサポートするようになりました。

  • メモリ位置の逆アセンブルされたソースを提供するdisassemblyリクエスト。
  • スタックフレームのinstructionPointerReferenceプロパティ。
  • ステップ実行リクエストのgranularityプロパティ。
  • 命令ブレークポイントとsetInstructionBreakpointsリクエスト。

拡張機能作成

テストAPI

昨年秋、VS Codeでテストを実行するためのネイティブサポートの追加に取り組み始め、今月、テスト関連APIの最初のセットが完成しました。これらのAPIは、これまでの拡張機能で提供されていたものよりも、柔軟性、パフォーマンス、UXが向上しています。テスト拡張機能の作成ガイドをチェックして、詳細を確認してください。

Image showing the test explorer and rich diff view experience

テーマ: codesong

Test Explorer UI拡張機能の既存ユーザーは、testExplorer.useNativeTestingtrueに設定することでネイティブエクスペリエンスを利用できます。ただし、変換はTest Explorer UI拡張機能の既存APIを反映しているため、リッチ差分サポートなどの一部の機能は含まれていません。

テストAPIを採用した最初の拡張機能の1つは、Extension Pack for Javaに含まれるMicrosoftのTest Runner for Javaでした。

Java extension using the native test API in VS Code

新規ファイルメニューへの貢献ポイント

ノートブックやカスタムエディターなど、新しいファイルエディターを作成する方法を提供する拡張機能は、新しいfile/newFileメニュー貢献ポイントにコマンドを貢献できるようになりました。このメニューは、ウェルカムページの新規ファイル...項目またはファイルメニューからアクセスできます。

New File menu in use via Welcome page

リッチステータスバーホバー

リンクやアイコンを含むリッチホバーが、ステータスバー項目StatusBarItem.tooltip: string | IMarkdownStringでサポートされるようになりました。

Rich Status bar hover

  • MarkdownString.supportThemeIconsがtrueの場合、$(iconName)構文でアイコンを使用できます。
  • MarkdownStringが信頼されている場合、コマンドリンクも追加できます。構文: ([test](command:vscode.newWindow))

ステータスバーの警告色

警告を表すステータスバー項目は、新しく追加された色statusBarItem.warningBackgroundstatusBarItem.warningForegroundを使用できます。

additionalPropertiesのないオブジェクト設定

設定エディターでオブジェクトがサポートされるには、オブジェクト設定のadditionalPropertiesfalseに設定する必要があります。そうでない場合、設定エディターは設定を任意の形状を取ることができる複雑な設定として解釈し、ユーザーを設定JSONファイルに誘導します。

複数行の文字列設定

設定エディターで複数行の文字列設定をサポートするには、文字列設定に"editPresentation": "multilineText"をキーと値のペアとして追加します。文字列設定を複数行に変更すると、設定エディターは設定値を単一行の入力ボックスではなく、複数行のテキストエリアでレンダリングします。

更新された codicon

当社のcodicon ライブラリに以下の新しいアイコンを追加しました。

List of updated icons

  • Azure
  • コンパス - アクティブ
  • コンパス - アクティブ
  • コンパス - ドット
  • コンパス
  • すべてをデバッグ
  • デバッグカバレッジ
  • git-pull-request-closed
  • git-pull-request-draft
  • issue-draft
  • レイヤー - アクティブ
  • レイヤー - ドット
  • レイヤー

テキストドキュメント変更理由

イベントworkspace.onDidChangeTextDocumentが発行される際、イベントオブジェクトの新しいプロパティreasonは、テキストの変更が元に戻す操作またはやり直す操作によって引き起こされたかどうかを示します。

Language Server Protocol

Language Server Protocolの新しい次のバージョンと、対応するnpmモジュールが公開されました。バージョン3.17には、VS Code自体の最新の変更に沿った補完項目ラベルの詳細に関する提案が含まれています。

Debug Adapter Protocol

"writeMemory"リクエストと"memory"イベント提案の最終化

writeMemoryリクエストは最終決定され、Debug Adapter Protocolのバージョン1.48および対応するnpmモジュールで利用できるようになりました。デバッグアダプターがsupportsWriteMemoryRequest機能を備えている場合、クライアントはwriteMemoryリクエストを使用して、指定されたメモリ位置にバイトを書き込むことができます。

memoryイベントには、次のマイルストーンでDAPに追加される提案があります。

提案された拡張API

各マイルストーンには新しい提案された API があり、拡張機能の作成者はそれらを試すことができます。いつものように、皆様のフィードバックをお待ちしております。提案された API を試すには、次の手順を実行する必要があります。

  • 提案APIは頻繁に変更されるため、Insiders版を使用する必要があります。
  • 拡張機能のpackage.jsonファイルに次の行が必要です: "enableProposedApi": true
  • 最新バージョンのvscode.proposed.d.tsファイルをプロジェクトのソース場所にコピーします。

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

TaskGroupのisDefault

tasks.jsonファイルで定義されたタスクにはgroupプロパティがあり、タスクAPIを通じて公開されています。groupプロパティにはisDefaultプロパティがありますが、これはこれまでAPIで利用できませんでした。この提案では、isDefaultプロパティをTaskGroup上で読み取り専用として公開するため、拡張機能はグループのデフォルトタスクを読み取ることができますが、グループのデフォルトを設定することでユーザーの設定を上書きすることはできません。

AuthenticationGetSessionOptionsのforceRecreate

これまで、認証セッションオブジェクトを取得するために使用されるgetSession APIには、ユーザーにログインを要求する機能がありませんでした。GitHubのような認証サービスでは、SSOセッションの有効期限が切れるとリソースへのアクセスを失うアクセスSAML/シングルサインオン (SSO) を使用しているため、ログインプロンプトが必要です。この提案では、AuthenticationGetSessionOptionsforceRecreateという別のプロパティを追加し、ユーザーに再度サインインを要求できるようにします。createIfNoneを指定した場合と同様のモーダルエクスペリエンスがユーザーに表示されます。

エンジニアリング

iframeベースのウェブビューがデスクトップでどこでも使用されるように

今月、Electronのwebviewタグ要素から通常の