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

2023年6月 (バージョン 1.80)

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

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

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


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

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

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

アクセシビリティ

アクセシブルビュー

新しいコマンドアクセシブルビューを開く (⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2)) を使用すると、スクリーンリーダーのユーザーはコンテンツを文字ごと、行ごとに検査できます。ホバーまたはチャットパネルの応答がフォーカスされているときにこれを呼び出します。

アクセシビリティヘルプの改善

新しいコマンドアクセシビリティヘルプを開く (⌥F1 (Windows Alt+F1, Linux Shift+Alt+F1)) は、現在のコンテキストに基づいてヘルプメニューを開きます。これは現在、エディター、ターミナル、ノートブック、チャットパネル、およびインラインチャット機能に適用されます。

アクセシビリティヘルプメニューのヒントを無効にし、ヘルプメニュー内から追加のドキュメント(あれば)を開くことができます。

ノートブックのアクセシビリティヘルプ

エディターレイアウト、ノートブックのナビゲート、操作に関する情報を提供するために、ノートブック用に新しいアクセシビリティヘルプメニューが追加されました。

チャットのオーディオキュー

GitHub Copilot チャット体験にオーディオキューが追加され、`audioCues.chatRequestSent`、`audioCues.chatResponsePending`、`audioCues.chatResponseReceived` を介して有効にできます。

チャットのアクセシビリティ改善

チャットの応答は、着信するとすぐにスクリーンリーダーに提供され、インラインおよびチャットパネルのアクセシビリティヘルプメニューには、各機能で期待されることと操作方法に関するより詳細な情報が含まれています。

設定エディターの代替テキストの改善

設定エディター (設定: 設定を開く (UI) コマンドからアクセス可能) は、スクリーンリーダーでナビゲートする際に冗長性が低下しました。特に、設定スコープスイッチャーは、ファイルパスではなくスコープの実際の名前をアナウンスし、設定の説明の代替テキストは、生の Markdown フォーマットを含まないように整理されました。

Navigating through the Settings editor with NVDA on Windows

ワークベンチ

プレビュー済みビデオの自動再生とループ

組み込みのビデオファイルプレビューでビデオの自動再生とループを有効にできるようになりました。関連する設定は次のとおりです。

  • `mediaPreview.video.autoPlay` — ビデオの自動再生を有効にします。自動再生されたビデオは自動的にミュートされます。
  • `mediaPreview.video.loop` — ビデオのループを有効にします。

これらの設定はデフォルトでオフになっています。

エディターが読み取り専用の場合のヘルプの強化

前回のマイルストーンで VS Code に読み取り専用モードが導入されたことにより、ワークスペースの構成によってエディターが読み取り専用になる場合があります。

このマイルストーンでは、読み取り専用のエディターで入力しようとしたときの通知メッセージが強化され、場合によっては `files.readonly` 設定を変更するためのリンクが提供されるようになりました。

ファイルダイアログのデフォルトの場所

新しい設定 `files.dialog.defaultPath` は、ファイルダイアログ (ファイルやフォルダーを開くときや保存するときなど) が開くときに表示されるデフォルトの場所を設定できます。このデフォルトは、他の場所が不明な場合のフォールバックとしてのみ使用されます (たとえば、空の VS Code ウィンドウの場合など)。

タブのダブルクリックによるエディターグループの最大化を無効にする

新しい設定 `workbench.editor.doubleClickTabToToggleEditorGroupSizes` は、そのグループのタブをダブルクリックしたときに、エディターグループのサイズを最大化から元に戻す切り替えを無効にします。

固定幅タブの最小幅を制御する

新しい設定 `workbench.editor.tabSizingFixedMinWidth` は、`workbench.editor.tabSizing` が `fixed` に設定されている場合のタブの最小サイズを制御します。固定タブ幅については、1.79 リリースノートで詳しく説明されています。

エディターグループの分割サイズ変更が「auto」に変更されました

`workbench.editor.splitSizing` 設定の新しい値である `auto` が新しいデフォルトになりました。このモードでは、エディターグループを分割すると、エディターグループのいずれもサイズ変更されていない場合にのみ、利用可能なサイズがすべてのエディターグループに均等に分配されます。それ以外の場合、分割されたエディターグループのスペースは半分に分割され、新しいエディターグループに配置されます。

この変更の意図は、分割時に作成したレイアウトを壊さないようにしつつ、それ以外の場合はサイズを均等に分配するという以前のデフォルトの動作を維持することです。

検索 .gitignore 除外動作

`search.useIgnoreFiles` が `true` に設定されている場合、ワークスペースが Git リポジトリとして初期化されているかどうかにかかわらず、ワークスペースの `.gitignore` が尊重されるようになりました。

コメントの最大高さ

設定 `comments.maxHeight` を使用すると、GitHub Pull Requests and Issues 拡張機能を使用している場合にプルリクエストに対して表示されるような、コメントの最大高さの制限を無効にできます。

VS Code の問題のトラブルシューティング

コマンドパレットに、VS Code の問題をトラブルシューティングするための新しいコマンド ヘルプ: 問題のトラブルシューティング が追加されました。起動されるワークフローは、特殊なトラブルシューティングプロファイルと VS Code の拡張機能バイセクト機能を使用して、問題の原因を特定するのに役立ちます。拡張機能バイセクトは、問題が再現するかどうかを示す間、インストールされている拡張機能をバイナリ検索で有効/無効にします。これにより、問題を引き起こしている拡張機能が絞り込まれ、問題を報告する際に適切な情報を提供できるようになります。

Chromium サンドボックスを無効にする

VS Code デスクトップを昇格されたユーザーとして起動することが避けられないシナリオがある場合 (たとえば、Linux で `sudo` を使用して VS Code を起動したり、Windows の AppLocker 環境で管理者として起動したりする場合) は、アプリケーションが期待どおりに動作するように、`--no-sandbox --disable-gpu-sandbox` コマンドラインオプションを指定して VS Code を起動する必要があります。

issue #184687 のフィードバックに基づいて、Chromium サンドボックスを無効にする必要がある場合にこれを容易にするための 2 つの新しい設定が追加されました。

  1. アプリケーション内のすべてのプロセスで Chromium サンドボックスを無効にする新しいコマンドラインオプション `--disable-chromium-sandbox`。この新しいオプションは、`--no-sandbox --disable-gpu-sandbox` の代わりに使用できます。このオプションは、今後のリリースでランタイムによって追加される可能性のある新しいプロセスサンドボックスにも適用されます。

  2. 起動後も Chromium サンドボックスを無効にしたままにするには、次のようにします。

    • コマンドパレットを開きます (⇧⌘P (Windows, Linux Ctrl+Shift+P))。
    • Preferences: Configure Runtime Argumentsコマンドを実行します。
    • このコマンドは、ランタイム引数を構成するための `argv.json` ファイルを開きます。すでにいくつかのデフォルト引数が表示されている場合があります。
    • `"disable-chromium-sandbox": true` を追加します。
    • VS Code を再起動します。

注: 問題が発生している場合を除き、この設定を使用しないでください!

エディター

選択範囲を縮小および拡張する際にサブワードをスキップする

選択範囲の拡張選択範囲の縮小コマンドは、サブワードをスキップするように設定できるようになりました。これは、`editor.smartSelect.selectSubwords` 設定で行います。デフォルトでは、サブワードが選択されますが、これを無効にできるようになりました。

  • `true` -> Co|deEditor は [Code]Editor を選択し、次に [CodeEditor] を選択します。
  • `false` -> Co|deEditor は [CodeEditor] を選択します。

この設定は、複数のカーソルと異種の単語で選択範囲を頻繁に拡張および縮小する場合に便利です。

JSX/TSX における CSS モジュール向けの Emmet サポートの改善

Emmet は、JSX/TSX ファイル用の新しい略語セットをサポートしています。JSX または TSX ファイルで `..test` と入力して略語を展開すると、行 `

` が追加されます。

属性名と値のプレフィックスは、`emmet.syntaxProfiles` 設定を使用して構成できます。`emmet.syntaxProfiles` 設定を次のように構成することで、

"emmet.syntaxProfiles": {
    "jsx": {
        "markup.attributes": {
            "class*": "className",
        },
        "markup.valuePrefix": {
            "class*": "myStyles"
        }
    }
}

その後、JSX または TSX ファイルで `..test` 略語を展開すると、代わりに `

` という略語が得られます。

サイズ変更可能なコンテンツホバー

コンテンツホバーコントロールのサイズを変更できるようになりました。コントロールの境界線にカーソルを合わせ、サッシをドラッグしてホバーのサイズを変更できます。

ターミナル

画像のサポート

前回のリリースでプレビューされたターミナル内の画像が、デフォルトで有効になりました。ターミナル内の画像は通常、画像ピクセルデータをテキストとしてエンコードし、特殊なエスケープシーケンスを介してターミナルに書き込むことで機能します。現在サポートされているプロトコルは、sixeliTerm が先駆けたインライン画像プロトコルです。

画像をを手動でテストするには、libsixel リポジトリから `.six` のサンプルファイルをダウンロードして `cat` できます。

Running cat with a sixel file will print an image

または、.png、.gif、.jpg ファイルでimgcat python パッケージまたはimgcat スクリプトを使用します。

Running imgcat with a png file will print the image

この機能は、次の設定で無効にできます。

"terminal.integrated.enableImages": false

新しいリンク形式のサポートが追加されました。これには、ファイルを検索するために上方向にスキャンする必要があるリンクや、範囲 (行から行、または文字から文字) を持つリンクが含まれます。

  • @@ git 範囲リンク

    Links from git in the style '@@ - + @@' are now detected

  • OCAML の Dune スタイルの範囲リンク

    Links in the style 'File "src/cli.js", lines 15-19' are now detected
    Links in the style 'File "src/cli.js", line 15, characters 8-34' are now detected
    Links in the style 'File "src/cli.js", lines 15-19, characters 8-34' are now detected

  • ESLint スタイルの複数行リンク

    Links from ESLint that prefix a result with 'line:col' now are detected

  • Ripgrep スタイルの複数行リンク

    Links from ripgrep that prefix a result with 'line:' now are detected

非推奨の shell および shellArgs 設定が削除されました

`terminal.integrated.shell.*` および `terminal.integrated.shellArgs.*` の設定は、1 年以上前にターミナルプロファイルに置き換えられ、削除されました。古い `shell` および `shellArgs` 設定をまだ使用している場合は、移行に役立つ before/after の例を次に示します。

// Before
{
  "terminal.integrated.shell.windows": "pwsh.exe",
  "terminal.integrated.shellArgs.windows": ["-Login"],

  "terminal.integrated.shell.osx": "bash",
  "terminal.integrated.shellArgs.osx": ["-l"],
}

// After
{
  "terminal.integrated.profiles.windows": {
    "PowerShell Login": {
      // Source is a special property that will use VS Code's logic to detect
      // the PowerShell or Git Bash executable.
      "source": "PowerShell",
      "args": ["-Login"],
      "icon": "terminal-powershell"
    },
  },

  "terminal.integrated.profiles.osx": {
    // This will override the builtin bash profile
    "bash": {
      "path": "bash",
      "args": ["-l"],
      "icon": "terminal-bash"
    }
  }
}

テスト

ターミナル出力のサポート

以前は、テスト結果ビューに表示されるテスト出力は常に埋め込みテキストエディターに表示されていました。これにより、ターミナルで実行された場合に持っていた色、スタイル、シンボルなどのリッチなスタイルが失われました。このリリースでは、実際の xterm.js ターミナルに出力を表示します。

Results shown in the Tests Results panel with green checkmarks

テーマ: Codesong (vscode.devでプレビュー)

テスト結果ビューが完全に機能するようになったため、テスト出力を表示コマンドは、一時的なターミナルを作成する代わりにテスト結果ビューを開くようにリダイレクトされました。

ソース管理

リポジトリを閉じる機能の改善

以前は、ユーザーはGit: リポジトリを閉じるコマンドまたはソース管理ビューのリポジトリを閉じるアクションを使用してリポジトリを閉じることができましたが、特定のアクション (たとえば、閉じられたリポジトリからファイルを開くなど) では、閉じられたリポジトリが再び開かれていました。このマイルストーンでは、リポジトリが閉じられているという事実がワークスペースごとに永続化されるようにいくつかの改善を行いました。ユーザーはGit: 閉じられたリポジトリを再開...コマンドを使用して閉じられたリポジトリを再開できます。

ノートブック

リモート開発における保存パフォーマンスの向上

以前は、VS Code のリモート拡張機能でノートブックを保存するには、ノートブック全体を拡張ホストに送信する必要があり、大きなノートブックや自動保存が有効になっている低速なネットワーク接続では遅くなる可能性がありました。ノートブックへの変更のみを拡張ホストに送信することでパフォーマンスが向上し、ノートブックの保存と実行が高速化されました。この機能はまだデフォルトで無効になっていますが、まもなく有効にできると確信しています。試すには、設定に `"notebook.experimental.remoteSave": true` を追加してください。詳細については、issue #172345 を参照してください。

ノートブックグローバルツールバーの再構築

ノートブックエディターのグローバルツールバーは、ワークベンチツールバーを採用するように書き換えられ、ユーザーはツールバーアクションをより細かくカスタマイズできるようになりました。ユーザーは右クリックでツールバーからアクションを非表示にできます。ツールバー内のアクションを右クリックすると、そのアクションを非表示にするオプションと、メニューをリセットして非表示のアクションを元に戻すオプションが表示されます。

ツールバーは、`always`、`never`、`dynamic` の 3 つのラベル戦略すべてで引き続き機能します。設定 `notebook.globalToolbarShowLabel` を介してラベル戦略を変更できます。

テーマ: Monokai Pro (Filter Ristretto) (vscode.devでプレビュー)

インタラクティブウィンドウのバックアップと復元

Python インタラクティブウィンドウは、ホットエグジット機能と完全に統合され、VS Code の再ロード間でエディターの状態を復元します。`interactiveWindow.restore` 設定はもはや効果がなく、削除されました。

ホットエグジットが無効になっている場合、VS Code を閉じるときにプロンプトが表示され、エディターの状態を `.ipynb` ファイルとして保存するオプションが提供されます。

_テーマ: Bearded Theme feat. Gold D Raynh (vscode.devでプレビュー)

言語

プレビューから Markdown 画像をコピー

Markdown プレビューの画像に新しいコンテキストメニューが追加され、プレビューから画像をコピーして Markdown エディターに貼り付けることができるようになりました。画像をコピーする際は、プレビューエディターがフォーカスされている必要があります。

新しい `markdown.editor.pasteUrlAsFormattedLink.enabled` 設定 (デフォルトは `false`) を使用すると、Markdown エディターにリンクを挿入する際に自動的に Markdown リンクとして整形されます。貼り付けられたリンクで置き換えるテキストを選択した場合、選択されたテキストが自動的にリンクのタイトルになります。テキストが選択されていない場合は、デフォルトのリンクタイトルが設定されます。この機能は、外部ブラウザリンクだけでなく、ワークスペース内のファイルにも適用されます。

この新しい設定が機能するためには、`editor.pasteAs.enabled` 設定を有効にする必要があります。

リモート開発

Remote Development 拡張機能を使用すると、開発コンテナー、SSH 経由のリモートマシン、リモートトンネル、またはLinux 用 Windows サブシステム (WSL) をフル機能の開発環境として使用できます。

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

リモートメニュー

このマイルストーンでは、必要な拡張機能をインストールすることで、リモート接続 (SSH、リモートトンネルGitHub Codespaces など) をすばやくインストールして開始するのに役立つエントリでリモートメニューを更新しました。VS Code デスクトップからリモート接続を開始するのに役立つ「ようこそ」ページの接続...開始エントリもあります。

vscode.dev の「ようこそ」ページも、リモートトンネルに接続するための開始エントリで更新されました。

トンネル経由の WSL

前回のイテレーションでは、リモートトンネルを介した WSL への接続をプレビューしました。この機能は今回のイテレーションで安定版となりました。WSL がインストールされた Windows マシンでリモートトンネルを実行している場合、リモートエクスプローラーから WSL に直接接続するオプションがあります。

Remote Tunnels view with a Connect to WSL option

テーマ: Codesong (vscode.devでプレビュー)

この機能は、VS Code デスクトップだけでなく、vscode.dev でも動作するようになりました。Windows デバイスですでにトンネルを実行している場合は、VS Code を最新バージョンに更新してこの機能を有効にしてください。

拡張機能への貢献

GitHub Copilot

チャットビューにプレビュー専用のスラッシュコマンドを導入しました。これにより、プロジェクトやノートブックを作成したり、ワークスペース内のテキストを検索したりできます。

: チャットビュー、インラインチャット、スラッシュコマンド (例: `/search`、`/createWorkspace`) にアクセスするには、GitHub Copilot Chat 拡張機能をインストールする必要があります。

ワークスペースの作成

Copilot に `/createWorkspace` スラッシュコマンドを使って一般的なプロジェクトタイプのワークスペースを作成するよう依頼できます。Copilot はまず、リクエストに基づいてディレクトリ構造を生成します。

その後、ワークスペースを作成ボタンを使用して、プロジェクトディレクトリを新しいワークスペースとして作成および開くことができます。

Create and open workspace using GitHub Copilot

ノートブックの作成

Copilot に `/createNotebook` スラッシュコマンドを使って、要件に基づいて Jupyter ノートブックを作成するよう依頼できます。Copilot は、要件に基づいてノートブックのアウトラインを生成します。

その後、ノートブックを作成コマンドを使用してノートブックを作成し、提案されたアウトラインに基づいてコードセルを埋めることができます。

検索パラメータの生成

Copilot にワークスペース検索の検索パラメータを自動入力するよう依頼できます。これを行うには、`/search` コマンドの後に、テキスト内で見つけたいものの説明を記述します。

これらのプレビュー版スラッシュコマンドは、`github.copilot.advanced` 設定を次のように構成することで有効にできます。

"github.copilot.advanced": {
   "slashCommands": {
      "createWorkspace": true,
      "createNotebook": true,
      "search": true
   }
}

Copilot YouTube プレイリスト

YouTube のVS Code Copilot シリーズに、Copilot for PowerShellに関する新しいコンテンツが追加されました。このシリーズを見逃した方のために、開発に Copilot を使用する際の言語固有の解説や、効果的なプロンプトの作成に関するガイダンスも掲載されています。

Python

Mypy 拡張機能

プレリリース版としてプレビューで利用可能な、mypy を使用して Python の型チェックをサポートするMypy Type Checker 拡張機能が利用可能になりました。この新しい拡張機能は、現在のファイルだけでなく、コードベース全体にわたるエラーと警告を提供します。また、より高速な型チェックのためにdmypyも使用します。

この新しい拡張機能に関する問題がある場合、またはフィードバックを提供したい場合は、Mypy 拡張機能 GitHub リポジトリで問題を提出できます。

Debugpy 拡張機能

Python 拡張機能から Python 2.7 および Python 3.6 のサポートが削除されたとき、コードベースを最新バージョンの Python にアップグレードできず、最新バージョンの Python 拡張機能でアプリケーションをデバッグする機能を失ったユーザーから多くのフィードバックを受け取りました。この問題の解決に向けて、Debugpy という別の Python Debugger 拡張機能を作成しました。デバッガーを Python 拡張機能から分離することで、最終的には最新バージョンの Python 拡張機能を使用しながら、デバッガーの古いバージョンを使用できるようになります (これにより、拡張機能の自動更新を無効にできます)。この拡張機能は、最新バージョンの debugpy を使用したプレリリース版としてプレビューで利用可能です。近い将来、debugpy の古いバージョンもサポートする予定です。

ぜひお試しいただき、すべてが適切に動作するかどうかお知らせください。当社の計画では、この独立した拡張機能に有利なように、組み込みのデバッグ機能を非推奨にすることです。

Pylance のローカライズ

Pylance 拡張機能がローカライズされました!これは、VS Code に言語パックがインストールされ、有効に設定されている場合、設定、コマンド、および拡張機能のその他のテキストが希望する言語に翻訳されることを意味します。

テスト検出と実行の再構築

今月も引き続き、テスト再構築のロールアウトを実験として進めています。ご存知のとおり、この再構築は、拡張機能におけるunittestpytest の両方のテスト検出および実行の背後にあるアーキテクチャを再設計するものです。この再構築は現在、VS Code Insiders ユーザーの 100% で有効になっており、今月中に安定版に展開され始めます。再構築はまもなく採用されますが、現時点では、`pythonTestAdapter` というオプトイン/オプトアウト設定がまだ存在します。

pytest と unittest の動的な実行結果

新しい実験とともに、pytest と unittest の動的な実行結果が展開されます。以前は、テスト結果はすべてのテストが実行を完了した後にのみ返されていましたが、この機能により、テスト結果は個別に配信されるため、テストがリアルタイムで合格および失敗するのを確認できます。

サードパーティライブラリのインデックス永続化

Pylance は、オートコンプリート、自動インポート、コードナビゲーションなどの IntelliSense 機能を有効にするために、環境にインストールされているサードパーティライブラリのインデックス作成を行います。以前は、Pylance は VS Code でワークスペースを開くたびにこれらのライブラリをインデックス作成していました。今回、Pylance はこれらのライブラリのインデックスを永続化し、繰り返しインデックス作成プロセスを実行する必要性を減らします。

Python 3.7 のサポート終了

Python 3.7 は2023 年 6 月 27 日にサポート終了 (EOL)となりました。そのため、Python 拡張機能の Python 3.7 の公式サポートは、3 か月後の拡張機能の 2023.18 リリース (VS Code の 2023 年 9 月リリースに対応) で終了します。Python 3.7 のサポートを積極的に削除する計画はなく、したがって、Python 拡張機能は当面、Python 3.7 で非公式に動作し続けると予想されます。

他のすべての Python リリースが年間リリースサイクルになったため、Python リリースが EOL に達すると、翌年の最初の Python 拡張機能リリースで公式サポートを終了する予定です。たとえば、Python 3.8 は 2024 年 10 月に EOL に達する予定であり、2025 年の最初の Python 拡張機能リリースで公式サポートが終了します。

GitHub Pull Requests and Issues

プルリクエストや課題の作成、管理ができるGitHub Pull Requests and Issues 拡張機能がさらに進歩しました。

  • プルリクエストには、最大 1000 (以前は 100) のコメントスレッドを読み込むことができます。
  • 読み取り専用メッセージに関する新しい VS Code API 提案により、チェックアウトされていない差分から直接 PR をチェックアウトできます。
  • ツリーとコメントのアバターが正方形ではなく円形になりました。

その他のハイライトについては、拡張機能の0.68.0 リリース向けチェンジログを参照してください。

プレビュー機能

TypeScript 5.2 のサポート

このアップデートには、今後の TypeScript 5.2 リリースに対するサポートが含まれています。TypeScript チームが現在取り組んでいることの詳細については、TypeScript 5.2 イテレーション計画をご覧ください。今後のツール機能のハイライトには、次のものがあります。

  • 新しいインライン定数のリファクタリング。
  • シンボルを既存のファイルに移動できる新しいファイルへ移動リファクタリング。

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

新しい差分エディター

今回のイテレーションでは、差分エディターの書き換えが完了しました。書き換えにより、いくつかの新機能の追加、パフォーマンスの向上、およびいくつかのバグの修正が可能になりました。

新しい差分エディターを試すには、設定に `"diffEditor.experimental.useVersion2": true` を追加してください。新しい差分エディターはまだ実験段階ですが、将来のアップデートで現在の差分エディターに置き換えられる予定です。

提示されたすべての機能は、新しい差分エディターが必要です。

変更されていない領域を折りたたむ

`diffEditor.experimental.collapseUnchangedRegions` を使用して、新しい差分エディターで変更されていない領域を非表示にすることができます。この機能は、多くの変更されていないコードを含む大きな差分をレビューする場合に役立ちます。

非表示行ブロックの境界線は、ドラッグしたりクリックしたりすることで、下または上からコードを表示できます。

A screenshot of the "Collapse Unchanged Regions" feature in the new diff editor

挿入/削除マーカーの表示

挿入/削除マーカーは、行のどこに単語が挿入または削除されたかを示し、行に挿入と削除の両方がある場合に特に役立ちます。

`diffEditor.experimental.showEmptyDecorations` を使用して、挿入および削除マーカーを有効/無効にできます。

Deletion markers

装飾の改善

行全体の削除/挿入に、全幅の背景色がつくようになりました。これにより、ノイズが大幅に軽減されます。

新しい差分エディターが変更をハイライトする方法の例です。

New Diff Editor highlighted changes

古い差分エディターが装飾をレンダリングする方法です (右側の 57 行目に全幅の背景色がないことに注目してください)。

Current Diff Editor highlighted changes

同期差分更新

新しい差分エディターで入力すると、変更はヒューリスティックにすぐに適用され、しばらくすると非同期差分計算がトリガーされます。古い差分エディターでは、変更はすぐに適用されず、入力時に目に見えるちらつきが発生していました。

新しい機能 - 入力時に差分が即座に更新されます

Diffs update immediately when typing

古い機能 - 目に見えるちらつきがあります

Diffs did only update after a delay in the old diff editor

移動検出

この実験的機能は、ファイル内の移動されたコードブロックを検出します。`diffEditor.experimental.showMoves` を使用して有効にします。現時点では単純な移動のみが検出されますが、将来的にこの機能を改善する予定です。移動されたコードブロックが選択されると、ソースとターゲットの場所が整列され、それらの間の差分が表示されます。

Move detection displays line connecting moved code block

移動検出はまだ実験段階であるため、今後のアップデートで大幅な変更が予想されます。

拡張機能作成

SecretStorage API が keytar の代わりに Electron API を使用するようになりました

SecretStorage API は、パスワード、アクセストークンなどの機密情報を保存するための推奨される方法として長年使用されてきました。その内部では、OS のキーリングに機密情報を保存するために使用される抽象化レイヤーであるkeytarを使用していました。keytar の非推奨化とアーカイブ化に伴い、特にランタイムである Electron に解決策を求め、他のソリューションを探しました。

このリリースでは、keytar から Electron の safeStorage API への移行を開始しました。機密情報は keytar から取得され、Electron の `safeStorage` API を介して復元されるため、この切り替えは透過的であるはずです。将来的には、keytar への依存関係を完全に削除できるように、この移行を削除する予定です。

keytar 非推奨化計画

しばらくの間、VS Code は OS のキーリングに秘密情報を保存するための抽象化レイヤーであるkeytarに大きく依存していました。さらに、SecretStorage API の導入前に拡張機能が依存していた keytar シムを VS Code に含めていました。keytar 自体は公式にアーカイブ化されており、メンテナンスされていません…アーカイブ化されたソフトウェアに秘密情報の保存を依存させないという良いセキュリティプラクティスを推進するために、このシムを VS Code から削除する計画を進めています。

この keytar シムをまだ使用している人気拡張機能の作者に直接連絡しており、彼らはそれから移行しようと努力しています。この変更による混乱を最小限に抑えるために、直接連絡していない方々にも、私たちの GitHub ディスカッションでもこのことを伝えておきたいと思います。私たちも keytar への依存関係を削除するためにかなりの作業が必要だったため、これが最高のニュースではないことは承知していますが、拡張機能が安全な API を使用していることを保証するために、これは正しいことだと考えています。

拡張機能で keytar を直接使用している場合は、いくつかの選択肢があります。

  • (推奨) ExtensionContext で VS Code が提供するSecretStorage APIを使用します。この API はクロスプラットフォームであり、VS Code がサポートするすべてのプラットフォームで動作します。また、VS Code チームによって維持されており、今後も維持され、長年 VS Code API の一部となっています。
  • (非推奨) keytar モジュールを拡張機能にバンドルできます。keytar はネイティブの Node モジュールであるため、サポートしたい各プラットフォーム用にプラットフォーム固有の拡張機能を公開する必要があることに注意してください。

タイムライン: 現在の計画では、8 月上旬に VS Code Insiders からこのシムを削除する予定です。つまり、2023 年 9 月の安定版リリースが、このシムなしの最初のリリースとなります。

この作業はissue #115215で追跡されており、質問がある場合は、私たちの GitHub Discussionsで遠慮なく質問してください。

ローカルファイルに対する vscode.fs.writeFile パフォーマンスの向上

`vscode.fs.writeFile` API を使用してファイルにデータを書き込む場合 (推奨!)、拡張機能ホストにローカルなファイルへの書き込み操作がはるかに高速に解決されるようになりました。

以前は、拡張機能ホストは書き込み操作を VS Code クライアントに委譲して実行していましたが、現在は操作が拡張機能ホスト内で直接実行され、ラウンドトリップが削減されます。

ツリーチェックボックス API

`TreeItem` の `checkboxState` API が最終版になりました。デフォルトでは、チェックボックスを持つツリーアイテムのチェック状態は VS Code によって管理されます。この動作は、`TreeViewOptions` プロパティ `manageCheckboxStateManually` を `true` に設定することで変更できます。`manageCheckboxStateManually` が設定されている場合、拡張機能は親および子のチェックボックスのチェックとチェック解除を管理する責任を負います。

EnvironmentVariableCollection.description

この新しい API を使用すると、`EnvironmentVariableCollection` の説明を指定できます。これは、変更が正確に何を行っているかを説明するために、ターミナルタブのホバーでユーザーに表示されます。

// Example of what the Git extension could use
context.environmentVariableCollection.description =
  'An explanation of what the environment changes do';

この API は、組み込みの Git 拡張機能で実際に動作しているのを確認できます。これにより、変更が何を行っているかが説明されるようになりました。

Environment variable collection descriptions are explained in a terminal tab's hover

提案されたAPI

すべてのマイルストーンには新しい提案された API が含まれており、拡張機能の作者はそれらを試すことができます。いつものように、皆様からのフィードバックを歓迎します。提案された API を試す手順は次のとおりです。

  1. 試したい提案を見つけて、その名前をpackage.json#enabledApiProposalsに追加します。
  2. 最新の@vscode/dtsを使用し、npx @vscode/dts devを実行します。これにより、対応するd.tsファイルがワークスペースにダウンロードされます。
  3. これで提案に対してプログラミングできます。

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

ファイルシステムプロバイダーの読み取り専用メッセージ

`registerFileSystemProvider` を使用する際、ファイルシステムを単に読み取り専用とマークする代わりに、読み取り専用メッセージを提供できるようになりました。ユーザーがそのプロバイダーからファイルを編集しようとすると、以下のメッセージがエディターに表示されます。

Read-only file system message

エンジニアリング

エクスポートされたシンボル名の難読化

昨年、コードサイズを削減するためにプライベートプロパティとメソッドの名前を難読化し始めました。今回、エクスポートされたシンボル名も難読化し、メインのワークベンチ JavaScript ファイルのサイズをさらに 8% 削減しました。

当社の名前難読化ビルドステップは、VS Code コアと組み込み拡張機能全体で合計 3.9 MB の JavaScript を削減しました。この削減により、ダウンロードが高速化され、VS Code のインストールサイズが縮小され、VS Code を起動するたびにコードの読み込みが高速化されます。

Node.js、組み込み拡張機能、および Electron のチェックサム整合性チェック

ビルドの一部として、リモートサーバー用の Node.js、Marketplace からの組み込み拡張機能、Electron など、他の場所からバイナリリソースを使用しています。このマイルストーンでは、`vscode` GitHub リポジトリにチェックインされている SHA256 チェックサムに対して検証することで、これらのバイナリリソースの整合性を確保しています。

新しい Linux パフォーマンスマシン

私たちは VS Code のパフォーマンス、特にテキストエディターを開いてカーソルが点滅するまでの経過時間を非常に重視しています。その経過時間を監視するために、Windows と macOS で毎日パフォーマンス テストを実行しています。

このマイルストーンでは、テストセットに Linux マシンを追加し、Ubuntu 22 での起動時間を報告しています。

Linux performance machine

イベントエミッターの最適化

VS Code では、コードベース全体でイベントエミッターが広範囲に使用されています。今回のイテレーションでこれらのエミッターを最適化し、起動時間とメモリ使用量をわずかに改善しました。

この改善の詳細については、issue #185789 を参照してください。

ターミナル pty ホストの改善

「Pty ホスト」プロセスは、ターミナルによって起動されたすべてのシェルプロセスを管理し、いくつかの改善が加えられました。

  • パフォーマンス
    • pty ホストプロセスへの直接通信チャネルが追加されました。これにより、ターミナルの入力遅延が大幅に削減されます。
    • 複数ターミナルが復元される際の不要な呼び出しの削減とタスクの並列化により、再接続 (ウィンドウの再読み込み) およびプロセス復活 (再起動) のパフォーマンスが向上しました。
    • ターミナル起動時および再接続時のパフォーマンスメトリックを収集するようになり、開発者: 起動パフォーマンスコマンドから確認できます。
  • 診断
    • ターミナル関連のすべてのログは、ウィンドウ出力チャネルから新しいターミナル出力チャネルに移動しました。
    • トレースログレベルがPty ホスト出力チャネルで有効になっている場合、ターミナルはすべての RPC 呼び出しをログに記録し、ターミナル問題の診断に役立ちます。

ドキュメント

新しい C# トピック

C# Dev Kit 拡張機能を使用した VS Code での C# 開発について、新しい一連のC# 記事で学ぶことができます。そこには、入門方法、拡張機能の言語機能 (コードナビゲーションリファクタリングデバッグ) の説明、プロジェクトおよびパッケージ管理などの開発ライフサイクルを支援するトピックが見つかります。

Glob パターンリファレンス

VS Code には独自の Glob パターン実装があり、これはファイルやフォルダーの検索フィルタリング、ファイルエクスプローラービューのカスタマイズなどの機能に使用されます。詳細については、新しいGlob パターンリファレンスを参照してください。

注目すべき修正点

  • 統合ターミナルを最大化するとテキストが失われる #134448
  • fish シェル統合の自動注入をサポート #139400

ありがとうございます

最後に、VS Codeの貢献者の皆様に心からの感謝を申し上げます。

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-emmet-helperへの貢献

vscode-livepreview への貢献

vscode-pull-request-githubへの貢献者