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

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更新 にアクセスしてください。
また、クラウド開発者アドボケートBrian Clarkによる1.27リリースのハイライト動画もご覧いただけます。

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

Workbench

設定エディター

ここ数か月間、設定を編集するための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

自動閉じ&文字の囲み

特定のプログラミング言語に応じて、{[(などの特定の括弧を入力すると、通常は式を開始できない特定の文字(例: ;:.,=}])>)が後に続く場合に、デフォルトで自動的に閉じられるようになりました。この動作は、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デバッグ拡張機能によって提供されており、他のデバッガーでは利用できませんでした。このリリースでは、読み込まれたスクリプトビューを組み込みのデバッガー機能として追加しました。「スクリプト」の概念を持つすべてのデバッグ拡張機能は、動的に更新されるビューでスクリプトへのアクセスをサポートできるようになります。

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

  • 単一の子フォルダーのチェーンが1つのノードに折りたたまれるようになりました。これにより、深くても疎なフォルダー階層にドリルダウンするのがはるかに簡単になります。
  • アクセシビリティの問題への対処を開始しました。

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

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

"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を使用して言語サーバー拡張機能を構築する際、[langId].trace.serverを指定してLSPログをVS Codeの出力チャンネルに送信できました。

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

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

これにより、LSPログをLSP Inspectorにストリーミングして言語サーバーの動作を視覚化するなど、興味深いユースケースが広がります。

lsp-streaming

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

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

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

  • initializeリクエストから返されるCapabilitiesに、値trueを持つsupportsLoadedSourcesRequest機能を​​追加します。
  • 現在の読み込まれたソースのセットを返すことで、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。
  • 日本語: Shunya Tajima, Satoshi Kajiura, Yuichi Nukiyama, Hiroyuki Mori, 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。
© . This site is unofficial and not affiliated with Microsoft.