VS Codeのエージェントモードを拡張するには、を試してください!

2021年6月 (バージョン 1.58)

Update 1.58.1: このアップデートでは、これらのセキュリティ問題に対処しています。

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

ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


Visual Studio Code 2021年6月リリースへようこそ。このバージョンには、皆さんに気に入っていただけるであろう多くのアップデートがあります。主なハイライトは以下の通りです。

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

太平洋時間7月13日火曜日午前8時(ロンドン時間午後4時)に開催されるVS Codeチームのライブストリームライブでご参加ください。このリリースで新しくなったもののデモをご覧になり、ライブで質問をしてください。

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

ワークベンチ

ワークスペースの信頼

ワークスペース信頼機能は、1.57リリースで導入された大きな変更であり、開発者がソースに不慣れな場合でも安全にコードを閲覧できることが重要だと考えています。このマイルストーンでは、お客様からのフィードバックを吸収し、問題の修正と提案への対応に注力してきました。

ワークスペースの信頼をカスタマイズできるユーザー設定を人々が発見できるように、ワークスペース信頼エディターのヘッダーに新しい設定を構成アクションが追加されました。このアクションは、@tag:workspaceTrustでフィルタリングされた設定エディターを表示します。

Configure your settings action in the Workspace Trust editor

設定について言えば、現在のウィンドウが制限モードであることを示すバナーが表示されるタイミングを設定する新しい設定があります。security.workspace.trust.startupPrompt設定と同様に、新しいsecurity.workspace.trust.bannerは、ワークスペースの信頼機能に慣れて、制限モードで作業していることをリマインダーする必要がない場合にバナーを無効にできます。デフォルトでは、このバナーはワークスペースごとに1回表示され、却下されるまで表示されます("untilDismissed")。制限モードバナーを表示するための他のオプションは、"always""never"です。

ワークスペース信頼の理論的根拠と開発については、最近のワークスペース信頼ブログ投稿で詳しく知ることができます。この投稿では、制限モードが意図しない、潜在的に悪意のあるコード実行からあなたを保護するのにどのように役立つか、そして開発マシンを迅速かつ安全に作業できるように設定するためのヒントが説明されています。

設定エディター

このイテレーションでは、設定エディターに、固定数のブール型プロパティを持つ設定オブジェクトのサポートが追加され、プロパティがチェックボックスのリストとしてレンダリングされるようになりました。

Settings editor Boolean object renderer demo

このイテレーションでは、列挙型の配列に対する追加のサポートも追加され、編集モードでプレーンなテキストボックスの代わりにドロップダウンが使用されるようになりました。

Settings editor enum array renderer demo

一時的なワークスペース

「一時的な」ワークスペースと呼ばれる新しい種類のワークスペースが追加されました。これは通常のワークスペースとは異なる動作をします。具体的には、

  • VS Code を再起動またはリロードしても、ワークスペースを再度開こうとはしません。
  • 一時的として設定されたワークスペースは、最近開いたワークスペースのリストに表示されません。

ワークスペースの.code-workspaceファイルにtransientプロパティをtrueに設定して追加することで、一時的なワークスペースを指定します。

{
  "folders": [],
  "transient": true
}

設定の同期

設定同期のトラブルシューティングビューが新しくなり、すべてのログと最後の同期状態が含まれています。このビューには、設定同期: 同期データを表示コマンドを実行し、ビューサブメニューを開いてトラブルシューティングにチェックを入れることでアクセスできます。

Settings Sync Troubleshoot command in the Settings Sync view menu

テーマ: GitHub Light Theme

検索最大結果設定

新しい設定search.maxResultsが追加され、テキスト検索の最大結果数を設定できるようになりました。デフォルトは以前の10,000から20,000に増えました。非常に多数の検索結果を読み込む際に、多少の遅延が発生する場合があります。

統合ターミナル

エディター領域のターミナル

ターミナルをエディター領域に作成または移動できるようになり、パネルの状態に関係なく持続し、表示され続ける多次元グリッドレイアウトが可能になりました。

エディター領域でターミナルを使用するには、いくつかのオプションがあります。

  • エディター領域にターミナルを作成コマンドから作成します。
  • タブリストからエディターにターミナルをドラッグアンドドロップします。
  • ターミナルがフォーカスされている状態でターミナルをエディター領域に移動を実行します。
  • ターミナルタブのコンテキストメニューでエディター領域に移動を選択します。

4 terminals in the editor area are laid out in a 2 by 2 grid

新しいterminal.integrated.defaultLocation設定をeditorに設定することで、新しく作成されたターミナルをデフォルトでエディター領域に直接表示できます。

キャンバスレンダラーの明示的な設定

以前のイテレーションで、WebGLターミナルレンダラーをデフォルトで有効にし、terminal.integrated.rendererType設定をよりシンプルなterminal.integrated.gpuAccelerationに置き換えました。残念ながら、一部のマシンではWebGLでパフォーマンスが低下し、利用可能な唯一のオプションはGPUアクセラレーションを完全に無効にして、はるかに遅いDOMベースのレンダラーに移行することでした。terminal.integrated.gpuAccelerationは明示的にcanvasに設定できるようになり、これらの環境ではこれが好ましい場合があります。

新しいterminal.integrated.showLinkHover設定を使用すると、ターミナル内のリンクホバーを無効にできます。ターミナルリンクのホバーが煩わしいと感じる場合に便利です。

エディター

エディタースクロールバーのカスタマイズ

エディターのスクロールバーをカスタマイズするための新しい設定があります。

  • editor.scrollbar.horizontaleditor.scrollbar.vertical を使用してスクロールバーの表示を制御します。
  • editor.scrollbar.horizontalScrollbarSize および editor.scrollbar.verticalScrollbarSize で太さを変更します。
  • editor.scrollbar.scrollByPage を使用して、クリックでページごとにスクロールするか、クリック位置にジャンプするか(デフォルトの動作)を決定します。

エディターの垂直スクロールバーの幅は30ピクセルに設定されています。

Vertical editor scroll bar width set to 30 pixels

言語

Markdownプレビューでの数式レンダリング

VS Code の組み込みMarkdownプレビューが、KaTeXを使用して数式をレンダリングできるようになりました。

Math rendering in the built-in Markdown preview

インライン数式は単一のドル記号で囲まれます

Inline math: $x^2$

二重のドル記号で数式ブロックを作成できます。

Math block:

$$
\displaystyle
\left( \sum_{k=1}^n a_k b_k \right)^2
\leq
\left( \sum_{k=1}^n a_k^2 \right)
\left( \sum_{k=1}^n b_k^2 \right)
$$

この機能を無効にするには、"markdown.math.enabled": false を設定します。

Markdown数式構文のハイライト表示

VS Code は、Markdownソース内の数式の強調表示もサポートするようになりました。

Syntax highlighting of a math equation in a Markdown file

これは、通常のMarkdownファイルとノートブック内のMarkdownセルの両方で機能します。

TypeScript 4.3.5

TypeScript 4.3.5 をバンドルしました。このマイナーアップデートでは、JSX でオートインポートが機能しないなど、いくつかの重要なバグが修正されています。

デバッグ

ファイルごとに選択された環境を記憶する

launch.jsonファイルなしでデバッグが開始されると、VS Code はアクティブなエディターを調べ、そのエディターの言語モードに基づいて使用するデバッグ拡張機能を決定します。しかし、一部の言語では複数のデバッグ拡張機能が使用可能であり、その場合、VS Code はそれらのうちの1つを選択するよう促します。デバッグをよりスムーズにするために、VS Code はファイルごとに選択されたデバッガーを記憶するようになり、次回デバッグを開始するときにプロンプトなしでセッションが開始されます。

以下の短いビデオでは、ユーザーは単一のJavaScriptファイルをデバッグするためにNode.jsデバッグ環境を選択し、その選択は新しいデバッグセッションがそのファイルに対して開始されたときに記憶されます。

Debug is started first time and the environment prompt is presented. The next time there is no prompt when the debug session starts

デバッグコンソールの候補がEnterで承認されなくなりました

デバッグコンソールの候補はEnterでは受け入れられず、Shift+EnterTabでのみ受け入れられます。以前は、デバッグコンソールの入力にすでに入力されているものを評価したいだけなのに、誤って候補を受け入れてしまうことがよくありました。

Tabキーが提案を受け入れる方法としてより発見しやすくなるように、VS Code はデバッグコンソール入力にヒントのステータスバー(「Insert (Tab)」)を表示するようになりました。

Debug console input box showing a Status bar rendered in the bottom that says "Insert (Tab)"

拡張機能への貢献

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

ノートブックエコシステムの上に組み込みの対話型ウィンドウエクスペリエンスを提供するための作業を開始し、Jupyter拡張機能は、jupyter.enableNativeInteractiveWindowという設定の背後でそれを採用しました。この機能が有効になっている場合、Jupyter拡張機能は、Pythonファイルからコードを実行したり、コマンドパレットから直接起動したりするときに、ウェブビューの実装の代わりに組み込みエディターを開きます。組み込みエディターは、ワークベンチと深く統合されているため、カスタマイズされたキーバインディング/キーマップや言語拡張機能で動作します。

Jupyter built-in interactive window demo

Jupyterノートブックのデバッグ

Jupyterノートブックでのデバッグをサポートする作業を進めており、ノートブックセルにブレークポイントを設定したり、セルをステップバイステップで実行したり、他のすべてのVS Codeデバッガー機能を使用したりできます。これは実験的な機能ですが、"jupyter.experimental.debugging": trueを設定し、選択したカーネルにipykernelバージョン6をインストールし、ノートブックツールバーのデバッグボタンをクリックすることで試すことができます。

Jupyter debugging

リモートリポジトリ

今回のイテレーションでは、主にRemote Repositories拡張機能のバグ修正とパフォーマンス改善、およびGitHub Pull Requests and Issues拡張機能との統合強化に注力しました。さらに、Remote ExplorerRemote Repositoriesビューからリモートリポジトリを削除できるようになり、行範囲を含む\blob URLを開く際のサポートが改善されました。

GitHubプルリクエストと課題

今回のイテレーションにおけるGitHub Pull Requests and Issues拡張機能の焦点はバグの修正でした。変更ログでハイライトをご覧ください。

リモート開発

コンテナー、リモートマシン、またはWindows Subsystem for Linux (WSL) をフル機能の開発環境として使用できるリモート開発拡張機能の作業が続けられています。

1.58 の主な機能ハイライトは次のとおりです。

  • 転送されたポートに対してブラウザを一度だけ開くオプション。
  • キャッシュされたイメージに対するdevcontainer.jsonのサポート。
  • Dev Containers は「hostRequirements」をチェックするようになりました。

Remote Development リリースノートで、新しい拡張機能の機能とバグ修正について学ぶことができます。

ライブプレビュー

Live Preview拡張機能を開発しました。これは、Web開発のプレビューのためにローカルサーバーをホストします!🎉

エディター内ブラウザプレビュー、ライブプレビューのリフレッシュ(ファイル変更時または保存時)、マルチルートサポートなどを備えています!

Live Preview Quick Walkthrough

この拡張機能には、永続的なサーバーを実行し、サーバーのトラフィックとその関連ファイルを表示できるLive Previewタスクも含まれています。

Live Preview Tasks

その機能の詳細については、マーケットプレイスをご覧いただくか、そのリポジトリをチェックしてください。

プレビュー機能

TypeScript 4.4 のサポート

このリリースには、近日公開予定のTypeScript 4.4リリースに対する初期サポートが含まれています。TypeScript 4.4 の新しい言語機能と改善点については、TypeScript ブログで詳しく読むことができます。

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

TypeScript 4.4でバグに遭遇した場合は、フィードバックを共有し、お知らせください。

ウィンドウ間でターミナルを移動する

ターミナル: セッションのデタッチを介して1つのウィンドウからターミナルをデタッチし、ターミナル: セッションにアタッチを介して別のウィンドウにアタッチすることで、ウィンドウ間でターミナルを移動できるようになりました。将来的には、これによりウィンドウ間のドラッグアンドドロップが実現されるはずです!

拡張機能作成

詳細な補完項目のラベル

より詳細で構造化された補完項目ラベルをサポートする新しいAPIを追加しました。項目ラベルにvscode.CompletionItemLabelタイプを使用できるようになり、ラベル、詳細、説明を指定できます。

これらの新しいプロパティにより、言語拡張機能はシグネチャや修飾子を表示できますが、他の補完プロバイダーもこれを活用できます。たとえば、GitHub Pull Request and Issues拡張機能は、エイリアスとともにフルネームを表示するようになりました。

Completion for Github aliases with full names

モーダルメッセージの詳細

モーダルな情報、警告、エラーメッセージを表示するためのAPIは、詳細の提供をサポートするようになりました。詳細テキストは、実際のメッセージよりも下で目立たないようにレンダリングされます。

A modal dialog with details

上記のダイアログは、以下のコードスニペットで生成されます。詳細テキストはモーダルメッセージのみでサポートされていることに注意してください (modal: true)。

vscode.window.showInformationMessage('This is the message', {
  modal: true,
  detail:
    'This is the detail. Rendered less prominent, but with more space for, well, details.'
});

ターミナルプロファイルを提供する

ターミナルプロファイルは拡張機能によって提供できるようになり、プロファイルピッカーに表示されます。

A contributed profile will show up along side detected and configured terminal profiles

ターミナルプロファイルを提供するには、3つのことを行う必要があります。

まず、package.jsonに貢献を追加します。

"contributes": {
  "terminal": {
    "profiles": [
      {
        "title": "Custom Profile",
        "id": "custom_profile"
      }
    ]
  },
}

次に、ユーザーがプロファイルを要求したときに拡張機能がアクティベートされるようにアクティベーションイベントを追加します。

"activationEvents": [
  "onTerminalProfile:custom_profile"
]

最後に、ターミナルを作成するために使用されるオプションのセットを返すターミナルプロバイダーを登録します。オプションは、標準のプロセスベースのTerminalOptionsまたはカスタムのExtensionTerminalOptionsのいずれかです。

vscode.window.registerTerminalProfileProvider('custom_profile', {
  provideTerminalProfile() {
    return {
      options: {
        name: 'Profile from extension',
        shellPath: 'cmd.exe'
      }
    };
  }
});

ExtensionTerminalOptions ベースのターミナル名を変更する

新しいPseudoterminal.onDidChangeNameイベントにより、ExtensionTerminalOptionsで作成されたターミナルの名前を変更できるようになりました。

const writeEmitter = new vscode.EventEmitter<string>();
const nameEmitter = new vscode.EventEmitter<string>();
const pty = {
  onDidWrite: writeEmitter.event,
  onDidChangeName: nameEmitter.event,
  open: () => writeEmitter.fire('Press and key to set the terminal title'),
  close: () => {
    /* noop*/
  },
  handleInput: (data: string) => {
    writeEmitter.fire(`Set title to "${data}"`);
    nameEmitter.fire(data);
  }
};
const terminal = (<any>vscode.window).createTerminal({ name: `My Extension REPL`, pty });
terminal.show();

拡張機能APIを介して作成されたターミナルのアイコンを設定する

window.createTerminaliconPath を受け入れるようになり、ターミナルのタブにアイコンを関連付けることができるようになりました。

const term = vscode.window.createTerminal({
  name: `Serve`,
  iconPath: new vscode.ThemeIcon('server-process')
});
term.show();

The iconPath will show up next to the terminal's name

保存されたMementoキーを列挙する

保存されたMementoキーのセットを列挙するための新しいMemento.keys() APIが追加されました。このAPIにより、以前に保存されたデータを扱いやすくなり、保存されたデータを移行する必要がある場合に役立ちます。

言語サーバープロトコル

新しいバージョンの言語サーバープロトコルが、対応するnpmモジュールとともに公開されました。このバージョンには、診断プルモデル仕様の最終提案が含まれています。

デバッグアダプタープロトコル

「Memory write」リクエストと「Memory changed」イベントの進捗

VS Codeのデバッグエクスペリエンスの将来のバージョンにメモリビューアを統合することを計画しています。このサポートのために、Debug Adapter Protocolには以前からReadMemoryリクエストが存在していました。現在、対応するWriteMemoryリクエストとMemoryイベントに取り組んでいます。WriteMemoryリクエストには最終提案があり、次のマイルストーンでDAPに追加される予定です。Memoryイベントの提案はまだ議論中です。デバッグ拡張機能の作成者で、これらのDAPプロトコルの追加に興味がある場合は、フィードバックをいただけると幸いです。

提案された拡張API

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

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

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

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

ステータスバーアイテムの豊富なホバーをサポートする新しい提案されたAPIがあります。試すには、StatusBarItem.tooltip2MarkdownStringを提供します。

Rich Status bar hover

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

テスト

テストAPIの最終決定への歩みは続いています。今回のイテレーションでは、拡張ホストの他のAPIのスタイルに合わせるために、いくつかのテストAPIをリファクタリングしました。最終決定プロセスを追跡し、APIの変更について知るには、issue #122208をフォローしてください。

私たちが予測する主な変更は、「実行構成」の提供方法にあります。これらのランナーAPIの進捗を追跡または検討するには、issue #127096をフォローしてください。

最後に、テストカバレッジの調査と初期実装を開始しました。これは今後数週間でUIに表面積を持つ予定です。

インライン提案

インライン提案APIにより、拡張機能は提案ウィジェットから独立したインライン提案を提供できます。インライン提案は、すでに受け入れられたかのようにレンダリングされますが、色はグレーです。ユーザーは提案を順に切り替え、Tabキーで受け入れることができます。

vscode.languages.registerInlineCompletionItemProvider(
  { pattern: '**' },
  {
    provideInlineCompletionItems: async (document, position) => {
      return [{ text: '< 2) {\n\treturn 1;\n\t}' }];
    }
  }
);

Inline suggestions in the editor

エンジニアリング

ES2020

Promise.allSettledString.replaceAllなどの最新のJavaScript APIを使用できるようにTypeScriptプロジェクトを更新しました。また、よりモダンなJavaScriptであるES2020を出力し、メインバンドルの全体的なサイズをわずかに削減しました。

Electron サンドボックスサポートの進捗

今回のマイルストーンでは、Electronのサンドボックスコンテキスト分離機能を有効にするために、VS Codeウィンドウの準備を進めました。

具体的には

  • VS Codeウィンドウを開くために必要なリソースを読み込む際のNode.jsへの依存を削除しました。
  • 非推奨のwebviewコンポーネントに近い動作を得るために、iframe要素への検索を追加し、将来的にwebviewを削除できるようにしました。この機能は、settings.jsonファイルで"webview.experimental.useIframes": trueを設定することで有効にできます。

ドキュメント

データサイエンスのチュートリアルとトピック

データサイエンスのチュートリアルとトピックは、https://vscode.dokyumento.jpの目次で独自のセクションになりました。Jupyter Notebooksの使用方法、Python Interactiveウィンドウ、さらにはタイタニック号の乗客データを分析するデータサイエンスのチュートリアルを見つけることができます。

Data Science table of contents on code.visualstudio.com

注目すべき修正点

  • 120956: iPad: エディター外でコンテキストメニューをトリガーできない
  • 122448: 依存関係が無効になっている場合、拡張機能を自動的に無効にする
  • 124169: アクティブなデバッグ行をインデントしないようにする
  • 125144: スレッドが停止しなくなったときに、フォーカスが自動的に別のスレッドに渡されない
  • 125528: ブレークポイントビューで、ブレークポイントで停止しなくなったときに選択解除する
  • 126211: デバッガーを介して開始されたNodeプロセスがVS Code終了時に強制終了されない
  • 126702: macOS: コマンドラインcode .が機能しない
  • 127716: デバッグホバー: キーボードでプロパティを検索できるようにする

ありがとうございます

最後に、今月 VS Code に貢献してくださった以下の皆様に、心からの感謝を申し上げます。

問題追跡への貢献者

vscodeへの貢献者

vscode-extension-samplesへの貢献

vscode-html-languageserviceへの貢献

vscode-js-debugへの貢献者

vscode-languageserver-nodeへの貢献者

language-server-protocolへの貢献者

monaco-editorへのコントリビューション

monaco-languages への貢献

monaco-typescriptへの貢献