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

2018年8月 (バージョン 1.27)

更新 1.27.2: この更新では、これらの問題に対処しています。

ダウンロード: Windows: x64 | Mac: Intel | Linux 64-bit: deb rpm tarball | 32-bit: deb rpm tarball


Visual Studio Code 2018年8月版へようこそ。このバージョンには、気に入っていただけるような重要な更新が多数あります。主なハイライトは以下の通りです。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com更新 にアクセスしてください。
また、Cloud Developer Advocate のBrian Clarkによる、この1.27リリースハイライトビデオもご覧ください。

Insiders: 新機能をいち早く確認したいですか? 毎晩のInsidersビルドをダウンロードして、利用可能になり次第最新の更新を試すことができます。Visual Studio Code の最新ニュース、更新、コンテンツについては、Twitter で@codeをフォローしてください!

ワークベンチ

設定エディター

過去数ヶ月間、私たちは設定編集用の GUI を開発してきました。バージョン 1.27 では、これをデフォルトの設定エディターにしています。

Settings UI

JSON 設定エディターには、コマンド基本設定: ユーザー設定を開く (JSON)を使用するか、"workbench.settings.editor" 設定でデフォルトの設定エディターを変更することで、引き続きアクセスできます。

今月行った改善の1つは、設定値の説明 (enumDescriptions) をカスタムドロップダウンコントロールに移動することで、UI を整理したことです。

dropdown

変更された設定は、エディターの変更された行のように、青い線で示されるようになりました。歯車アイコンをクリックするとコンテキストメニューが開き、設定をデフォルト値にリセットするオプションが表示されます。

modified indicator and context menu

設定値が検証されるようになり、検証エラーが表示されます。

validation error

検索中も目次が引き続き表示され、一致するカテゴリのみが表示されるようにフィルタリングされます。カテゴリをクリックすると、そのカテゴリ下の設定のみに結果をフィルタリングできます。検索中に目次を非表示にしたい場合は、"workbench.settings.settingsSearchTocBehavior""hidden" に設定してください。

settings search

設定で検索すると、Bing を利用した検索サービスが引き続き関連性のある結果を提供します。このサービスでは、関連する設定を持つ Marketplace の拡張機能も表示されるようになりました。設定検索結果の下部に、一致する拡張機能を表示ボタンが表示されます。クリックすると、一致する拡張機能と共に拡張機能ビューが開きます。

extension settings

Windows および Linux でのカスタムタイトルバーとメニュー

この数回のイテレーションでは、Windows および Linux のタイトルバーとメニューのルックアンドフィール、および使いやすさの向上にも取り組んできました。今回のイテレーションでは、近いうちに Windows のデフォルトエクスペリエンスとするため、プレビューラベルを削除しています。この機能を有効にするには、設定 "window.titleBarStyle""custom" に設定します。

Custom Title Bar and Menus

新しいエクスペリエンスには、デフォルトに対していくつかの利点があります。

  • 製品全体でテーマ設定可能なタイトルバー、メニューバー、およびコンテキストメニュー。これにより、ダークテーマはダークのままになります!
  • メニューバーでのキーボードナビゲーションの改善。キーボードでのメニュー間の切り替えや、メニューニーモニックの使用がより簡単になりました。
  • 侵入性の低いメニューバー。"window.menuBarVisibility""toggle" に設定すると、新しいエクスペリエンスはよりコンパクトになり、煩わしさが軽減されます。
  • アクセシビリティの向上。スクリーンリーダーでのメニューの使いやすさを向上させるために、いくつかのアクセシビリティの問題が解決されました。

この新しいエクスペリエンスを Windows のデフォルトにしたいと考えているため、ぜひお試しいただき、最高の体験を提供できるようフィードバックをお寄せください。

ブレッドクラムの改善

新しいブレッドクラムバーを調整し、さまざまな改善を行い、バグを修正しました。

  • フォーカスされたドキュメントシンボルがエディターでハイライトされるようになりました。
  • ブレッドクラムは、フォーカスコマンド(⇧⌘; (Windows、Linux Ctrl+Shift+;))が実行されると自動的に有効になります。
  • ブレッドクラムはテーマとの相性がはるかに良くなりました。
  • ブレッドクラムはファイル除外設定を尊重するようになりました。

Breadcrumbs Highlights

新しいターミナルメニュー

タスクメニューがターミナルに名称変更され、統合ターミナルのエントリがいくつか追加されました。

Terminal Menu

プラットフォーム固有のキーバインディング

キーバインディングの when 句内で isLinuxisMacisWindows を使用して、特定のオペレーティングシステム用のキーボードショートカットを有効にできるようになりました。

[
  {
    "key": "ctrl+o",
    "command": "workbench.action.files.openFolder",
    "when": "!isMac"
  },
  {
    "key": "cmd+o",
    "command": "workbench.action.files.openFolder",
    "when": "isMac"
  }
]

これにより、keybindings.json ファイルを異なるマシン間で共有することがはるかに容易になります。

ウィンドウを新しいネイティブタブとして開く

新しい macOS 専用コマンド workbench.action.newWindowTab は、ウィンドウを新しいネイティブタブとして開きます。newWindowTab にはデフォルトのキーバインディングがなく、window.nativeTabs 設定が有効になっている必要があります。

外部で削除/名前変更されたときにファイルが閉じなくなりました

私たちは workbench.editor.closeOnFileDelete 設定のデフォルトを true から false に変更しました。これは、VS Code の外部(または Git などの別のプログラムや統合ターミナルからのコマンド)で削除または名前変更されたファイルが、エディタータブとして開かれているファイルを閉じなくなることを意味します。代わりに、ファイルはディスクから削除されたことを示し、ファイルを保存するだけで復元できます。

Deleted from Disk

注意: ファイルがダーティでない限り、ファイルのコンテンツは再起動間で保持されません。

中央クリックでファイルを新しいエディターで開く

エクスプローラービューでマウスの中央クリックを使用して、ファイルを新しいエディターで開くことができ、プレビューモードで前のエディターを再利用しないようになりました。

アクセシビリティの改善

キーボードナビゲーション、スクリーンリーダーのサポート、フォーカスを中心に、かなりのアクセシビリティの問題を修正しました。完全なリストはこちらで確認できます。これは継続的な取り組みであり、9月も継続する予定です。

Windows バックグラウンド更新の改善

一部のユーザーでインストールが破損する原因となる問題に対処するため、カスタムの Windows バックグラウンドアップデーターの安定化作業を行いました。これは今後のリリースでさらなる改善が予定されている継続的な作業項目です。

エディター

文字の自動閉じと囲み

特定の括弧(例: {[、または ()を入力する際、プログラミング言語によっては、式を開始できない特定の文字(例: ;:.,=}])>)が後に続く場合、デフォルトで自動的に閉じられます。この動作は editor.autoClosingBrackets 設定でカスタマイズできます。同様に、editor.autoClosingQuotes を使用して、引用符(例: "'、または `)を入力する際の自動閉じ動作をカスタマイズできます。

テキストが選択されているときにこれらの文字のいずれかを入力すると、選択範囲が括弧または引用符で囲まれます。この動作は、新しい editor.autoSurround 設定で個別に調整できるようになりました。

言語

CSS インポートのパス補完

CSS、SCSS、Less の @import のパス補完が利用可能になりました。SCSS の部分的な @import も処理されます。

css-import

CSS、SCSS、Less の @import および url() リンクに対する定義へのジャンプ機能が追加されました。

css-definition

JSON

組み込みの JSON 言語拡張機能は、新しいJSON Schema Draft-07をサポートするようになりました。

最も興味深い追加機能は、条件付きスキーマ評価を可能にする ifthenelse キーワードです。

{
  "type": "integer",
  "minimum": 1,
  "maximum": 1000,
  "if": { "minimum": 100 },
  "then": { "multipleOf": 100 },
  "else": {
    "if": { "minimum": 10 },
    "then": { "multipleOf": 10 }
  }
}

if キーワードは、値スキーマの結果が検証に合格した場合に then スキーマを適用し、そうでない場合に else スキーマを適用することを意味します。

HTML

HTML フォーマッターがJS Beautifierのバージョン 1.8.1 に更新されました。

これにより、"html.format.wrapAttributes" 設定に新しいオプションが追加されます。

  • "aligned-multiple" は、最大行長に達したときに属性を折り返し、すべての折り返された行を最初の属性に揃えます。

aligned-multiple

TypeScript 3.0.3

VS Code に TypeScript 3.0.3 が同梱されるようになりました。このマイナーリリースでは、多数のバグが修正され、安定性が向上しています。変更点の詳細についてはこちらをご覧ください。

デバッグ

読み込まれたスクリプトビューが再利用可能に

1年以上にわたり、デバッグビューの読み込まれたスクリプトエクスプローラーは Node.js デバッグ拡張機能によって提供され、他のデバッガーでは利用できませんでした。このリリースでは、読み込まれたスクリプトビューを組み込みのデバッガー機能として追加しました。"スクリプト" の概念を持つすべてのデバッグ拡張機能は、動的に更新されるビューでスクリプトへのアクセスをサポートできるようになります。

さらに、以前の読み込まれたスクリプトエクスプローラーのいくつかの欠点を改善しました。

  • 単一子フォルダーのチェーンが単一ノードに折りたたまれるようになりました。これにより、深くてもまばらなフォルダー階層を掘り下げることがはるかに容易になります。
  • アクセシビリティの問題への対応を開始しました。

中央クリックでブレークポイントを削除

ブレークポイントビューでマウスの中央クリックを使用して、ブレークポイントを簡単に削除できるようになりました。

"openDebug" のデフォルトをセッション開始ごとに開くように変更

新規ユーザーにとって、デバッグセッションを開始してもデバッグビューが毎回自動的に開かない場合、混乱することがあります。ユーザーがまだ UI に慣れていない場合、UI を開くためにどのようなキーワードを探せばよいかわかりません。混乱を避けるため、debug.openDebug のデフォルトを openOnSessionStart に変更しました。これにより、デバッグビューは最初のセッションだけでなく、すべてのセッション開始時に開くようになります(これは以前のデフォルト動作でした)。

拡張機能の作成

拡張機能のログ記録

activate 関数の引数として渡される ExtensionContext に、新しいプロパティlogPathが追加されました。これは、拡張機能がログファイルを保存できるディレクトリの絶対ファイルパスです。このパスは拡張機能ごとに一意であり、他の拡張機能によって再利用されることはありません。

Language Server Protocol

Language Server Protocol の新しいバージョンが利用可能になり、VS Code で使用するための対応する Node モジュールが含まれています。

新しいバージョンでは以下をサポートしています。

  • クライアントが対応するメニューエントリを埋めることを可能にする、サーバーからのコードアクションの種類のアナウンス。
  • textDocument/prepareRename の実装。
  • ワークスペース編集でのファイル操作(作成、名前変更、削除)のサポート。

vscode-languageclient: JSON ログ形式とログストリーミング

以前は、vscode-languageclient を使用して Language Server 拡張機能を構築する際、[langId].trace.server を指定してLSP ログを VS Code の出力チャンネルに送信できました。

[langId].trace.server は、機械可読なJSON 形式でログ情報を出力できるようになりました。

"languageServerExample.trace.server": {
  "format": "json", // or "text"
  "verbosity": "verbose" // or "off" | "messages"
}

これにより、Language Server の動作を視覚化するために、LSP ログをLSP Inspectorにストリーミングするなどの興味深いユースケースが開かれます。

lsp-streaming

詳細については、Microsoft/language-server-protocol-inspector および lsp-log-streaming-sample を参照してください。

デバッグ拡張機能: 組み込みの読み込まれたスクリプトビュー

読み込まれたスクリプトエクスプローラーは、VS Code デバッガーの組み込みコンポーネントになりました。これを使用するには、デバッガー拡張機能がデバッグアダプターを次のように変更する必要があります。

  • initialize リクエストから返される Capabilities に、supportsLoadedSourcesRequest 能力を値 true で追加します。
  • 現在の読み込まれたソースのセットを返すことで、loadedSources リクエストを実装します。
  • 新しく読み込まれた、またはアンロードされたソースに対して loadedSource イベントを送信します。

新しいテーマカラー

ブレッドクラムに新しいテーマカラーが追加されました。

  • breadcrumb.background: ブレッドクラム項目の背景色。

設定エディターに新しいテーマカラーが追加されました。

  • settings.dropdownListBorder: 新しいドロップダウンコントロールの境界線の色。
  • settings.modifiedItemIndicator: 変更された設定を示す線の色。

Git 拡張機能 API

Git 拡張機能は、より明確に定義されたAPI を公開し始めました。この API は、他のどの拡張機能からも、ユーザーのワークスペースで開かれている Git リポジトリと対話するために使用できます。まだ初期段階であるため、今後のリリースで API を継続的に改善していく予定です。

提案された拡張API

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

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

提案APIを使用する拡張機能は公開できないことに注意してください。次回のリリースでは互換性のない変更が行われる可能性があり、既存の拡張機能を壊すことは決して望ましくありません。

SCM: 選択されたソースコントロール

拡張機能が、UI で表示するためにユーザーによってどのソースコントロールインスタンスが選択されたかを知るために、SourceControl インスタンスに selected プロパティと、その状態を表す onDidChangeSelection イベントが追加されました。

export interface SourceControl {
  /**
   * Whether the source control is selected.
   */
  readonly selected: boolean;

  /**
   * An event signaling when the selection state changes.
   */
  readonly onDidChangeSelection: Event<boolean>;
}

コメントプロバイダー

今回のイテレーションでは、コメントの概念を導入しました。これにより、拡張機能はエディター内で会話を作成・管理したり、新しいコメントパネルを利用したりできるようになります。これにより、拡張機能はコードレビューシナリオをサポートできるようになります。

コメントはスレッドに整理され、特定のドキュメントに関連付けられます。

export enum CommentThreadCollapsibleState {
  Collapsed = 0,
  Expanded = 1
}

interface CommentThread {
  threadId: string;
  resource: Uri;
  range: Range;
  comments: Comment[];
  collapsibleState?: CommentThreadCollapsibleState;
}

interface Comment {
  commentId: string;
  body: MarkdownString;
  userName: string;
  gravatar: string;
  command?: Command;
}

コメントを表示するには、拡張機能が DocumentCommentProvider または WorkspaceCommentProvider を登録する必要があります。

export interface CommentThreadChangedEvent {
  readonly added: CommentThread[];
  readonly removed: CommentThread[];
  readonly changed: CommentThread[];
}

interface CommentInfo {
  threads: CommentThread[];
  commentingRanges?: Range[];
}

interface DocumentCommentProvider {
  provideDocumentComments(
    document: TextDocument,
    token: CancellationToken
  ): Promise<CommentInfo>;
  createNewCommentThread(
    document: TextDocument,
    range: Range,
    text: string,
    token: CancellationToken
  ): Promise<CommentThread>;
  replyToCommentThread(
    document: TextDocument,
    range: Range,
    commentThread: CommentThread,
    text: string,
    token: CancellationToken
  ): Promise<CommentThread>;
  onDidChangeCommentThreads: Event<CommentThreadChangedEvent>;
}

interface WorkspaceCommentProvider {
  provideWorkspaceComments(token: CancellationToken): Promise<CommentThread[]>;
  onDidChangeCommentThreads: Event<CommentThreadChangedEvent>;
}

DocumentCommentProvider を使用すると、開いているドキュメントのコメントを返すことができます。コメントを提供するとき、拡張機能はドキュメント上の現在のスレッドと、ドキュメントのどの範囲が新しいコメントの追加をサポートするかを両方指定します。コメントはドキュメント内から追加したり返信したりできます。

A comment within an editor

WorkspaceCommentProvider が最初に登録されると、CommentsPanel が表示され、提供されたすべてのコメントが表示されます。コメントはコメントスレッドとリソースごとにグループ化されます。パネルでコメントが選択されると、コメントの command が実行され、拡張機能がその動作を決定します。

Comments panel

プレビュー機能

プレビュー機能はリリース準備ができていませんが、使用できる程度には機能しています。開発段階での皆様の早期フィードバックをお待ちしております。

Electron 3.0 試用

このマイルストーン中に、Electron 3.0.0 を VS Code にバンドルすることを検討しました。これは Electron のメジャーリリースであり、Chrome 66 と Node.js 10.x が付属しています(現在の Chrome 61 と Node.js 8.x のバージョンと比較して大きな進歩です)。今後、Insiders ユーザーにこの更新をプッシュし、追加のフィードバックを収集する予定です。ご協力いただける場合は、VS Code Insiders をインストールしてください。

エンジニアリング

拡張機能と webpack

現在、拡張機能のバンドルにwebpackを使用しています。これにより、2つの成果が得られます。(1) ロードするファイルが少なく、解析するソースが少ないため、拡張機能の起動時間を短縮できます。(2) 抽出してディスクに書き込むファイルが少ないため、インストール時間を短縮できます。これまでに、バンドルサイズを約4000ファイル削減しました!

パフォーマンスカナリア

起動パフォーマンスが低下していないことを確認するために、テストハーネスを追加しました。Insiders ビルドのパフォーマンスをテストするために、専用マシンにデプロイできる新しいスクリプトがあります。このスクリプトは、最新のビルドをインストールし、時間制限内に起動することを確認します。現在のところ、パフォーマンスはアンチウイルスソフトウェアの更新によって影響を受けることが多いため、Windows から開始しましたが、サポートするすべてのプラットフォームでテストする計画です。

IPC スタックの改善

自社開発の IPC スタックを改善し、プロセス間のバイトバッファーメッセージをサポートするようにしました。これにより、オーバーヘッドなしで異なるプロセス間でバイナリデータを送信したり、パフォーマンスのために IPC を最適化したりするなどの特定のシナリオが可能になります。

主な修正

  • 6363: 保存時に代替データストリームが削除される
  • 25919: 新しいウィンドウをネイティブタブとして強制的に開く新しいコマンド
  • 49021: 保存時に WSL パーミッションメタデータをリセットしない
  • 49403: 統合ターミナルでデバッグする際に自動アタッチが問題を引き起こす
  • 55025: 拡張機能ホストが再起動してもデバッグを続行できるようにする
  • 56084: 開いているエディター: グループの順序を視覚的な順序に基づいて再検討
  • 56691: パスに # が存在する場合に vscode の起動エラー
  • 57018: デバッガーの停止/再起動が babel-node を停止できない

謝辞

最後に、そしてもちろん最も重要なこととして、Visual Studio Codeをさらに良くするために協力してくれた以下の方々に、心からの感謝を申し上げます!

vscodeへの貢献者

vscode-vsceへのコントリビューション

vscode-eslintへの貢献者

language-server-protocolへの貢献者

vscode-languageserver-nodeへの貢献者

debug-adapter-protocolへの貢献者

vscode-css-languageserviceへの貢献者

vscode-html-languageserviceへの貢献

vscode-json-languageserviceへの貢献

node-jsonc-parserへの貢献

vscode-generator-codeへの貢献者

  • @MrLuje: ジェネレーターオプションとしてパブリッシャーを設定できるようにする PR #125

localizationへの貢献

Transifex のVS Code プロジェクトチームには約1200人のメンバーがおり、毎月約100人が活発に貢献しています。新しい翻訳の提供、翻訳への投票、プロセス改善の提案など、皆様の貢献に感謝いたします。

このリリースに貢献してくださった方々のスナップショットを以下に示します。貢献者リストを含むプロジェクトの詳細については、プロジェクトサイトhttps://aka.ms/vscodelocをご覧ください。

  • ブルガリア語: Любомир Василев.
  • クロアチア語: Nikša Mihaica.
  • デンマーク語: Christoffer Bech.
  • 英語 (英国): Matthew John Cheetham, Swotboy2000.
  • フィンランド語: Petri Niinimäki, Feetu Nyrhinen, Jussi Palo.
  • フランス語: Antoine Griffard, Guillaume Bauer, Smrman.
  • ドイツ語: Carsten Siemens, Carsten Kneip, Jonas Droste, Markus Hatvan, Christian Studer, Peter Schneider, Jonas Keller, thefreshman89.
  • ハンガリー語: Tar Dániel, Bence László.
  • 簡体字中国語: Joel Yang, 子实 王, Wang Dongcheng, pluwen, DongWei, Henry Chu, aimin guo, Chris Pan 潘冬冬, 子昂 马.
  • 繁体字中国語: Duran Hsieh, Winnie Lin, Poy Chang, Alan Tsai.
  • インドネシア語: Wildan Mubarok, G-RiNe Project.
  • イタリア語: Luca Bruni, Alessandro Alpi, Andrea Dottor, Emanuele Curati, Riccardo Cappello, Gianluca Acerbis, Emilie Rollandin, Marco Dal Pino, Luigi Bruno, Lorthirk, Aldo Donetti.
  • 日本語: 田島 俊哉, 梶浦 諭, 貫山 雄一, 森 裕之, yoshioms.
  • 韓国語: Kyunghee Ko, PaulNara, smallsnail, Kwangjin Hwang.
  • リトアニア語: Tomas Cimermonas.
  • ポーランド語: Artur, hawkeye116477, Patryk Brejdak, Mateusz Gazdziak, Robert Skórski, Sebastian Baran.
  • ポルトガル語 (ブラジル): Roberto Fonseca, Bruno Sonnino, Marcelo Fernandes, Lucas Miranda, João Mesquita, Danilo Dantas, Rodrigo Crespi, Arthur Bruel, Thiago Moreira de Souza Arrais, Otacilio Saraiva Maia Neto, Loiane Groner, Fabio Correia.
  • ポルトガル語 (ポルトガル): Richard Nunes, Daniel Correia, Tiago Costa.
  • ルーマニア語: Bogdan Mateescu, Szauka.
  • ロシア語: Roman Slauta, Ivan Kuzmenko.
  • スペイン語: Alejandro Medina, José M. Aguilar, Roberto Fonseca, Javier Moreno, Andy Gonzalez, Alberto Poblacion, Nancy Todd, Antonio Sanmartín.
  • テルグ語: Hari Jujjavarapu, Sridhar L.