June 2017 (version 1.14)

この文章は引用したものです : https://github.com/ayatokura/JP-VSCode-Docs/blob/master/release-notes/v1_14_ja.md

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

  • JavaScript ES5 スタイルの関数クラスを ES6 クラスに変換するリファクタリング機能は無効になっています

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

Downloads: Windows | Mac | Linux 64-bit: .tar.gz .deb .rpm | Linux 32-bit: .tar.gz .deb .rpm


Visual Studio Code の 2017 年 6 月リリースへようこそ。このリリースでは、いくつかの重要な更新があり、ハイライトは次のとおりです:

これらのリリースノートをオンラインで読むには、code.visualstudio.com へアクセスし、Updatesを参照してください

VS Code の重要な更新に関連するアップデート情報は、リリースノートの次のセクションに配置されています。その他のアップデートは、次のとおりです:

  • Workbench - 空のワークスペースとファイルの復元、実行中のウィンドウ(インスタンス)の素早い切り替え
  • Languages - TypeScript 2.4、JavaScript ファイルでのより関連性の高いサジェスト
  • Debugging - Node.js デバッグ設定の簡略化
  • Tasks - VS Code で実行する npm スクリプトと TypeScript コンパイラの自動検出によるカスタマイズ
  • Extension Authoring - SVG レンダリングの制約、カスタムビューの可視性、新しい Debug API

Insiders: できるだけ早く新しい機能を試してみたいですか? それならば、毎晩アップデートされる Insiders build をご利用ください。常に最新のアップデートが利用可能になり、最新の機能をいち早く試してみることが可能です

Workbench

ワークベンチ

Lighter update experience

軽いアップデートエクスペリエンス

アップデート通知をどのようにユーザーへ伝えるかについて取り組んでいます。VS Code の更新を促すポップアップメッセージは、破壊的であると意見が一致したため、様々なより良い UI を試しています。今月のリリースから、アップデートが利用可能なときにワークベンチの左下隅に小さなインジケータが表示されます。

Update

このインジケータをクリックすることで、アップデートを適用するだけでなく、他のグローバルアクション(コマンドパレット設定 など)にアクセスすることができます。

この通知を見失う心配はありません。macOS ユーザーは、VS Code を再起動するとすぐに自動的に更新が適用されます。数日たってもアップデートの通知を受け入れない場合、Windows および Linux ユーザーは、以前の古いポップアップメッセージを受け取ることになります。

Command Palette improvements

コマンドパレットの改善

Command Palette のドロップダウン (⇧⌘P (Windows, Linux Ctrl+Shift+P)) を使いやすく改善しました。

よくあるリクエストの一つが、Command Palette を再び開く際に、最後に実行された入力履歴を表示することでした。新しい設定 workbench.commandPalette.preserveInput でこの動作を有効にできます。

また、VS Code の再起動が行われるまでの間、保持されるコマンドの最新リスト (MRU = Most recently used) を追加しました。実行された最新のコマンドは常に先頭に表示されます。新しい設定 workbench.commandPalette.history では、表示するエントリの数を制御できます(この機能を無効にするには、0 を設定します)。MRU を有効にすると、Command Palette を開いたときの履歴が常に最後に実行されたコマンドをデフォルトで選択するため、workbench.commandPalette.preserveInput を有効にする必要はありません。

Commands History

実行されたコマンドの履歴からすべてのエントリを消去する新しいコマンド Clear Commands History が追加されました。

最後に、ドロップダウンに表示されるキーボードショートカットは、 Keyboard Shortcuts エディタと同じビジュアルフォームで表示されます。

Restore empty workspaces

空のワークスペースを復元する

VS Code では、フォルダを開いているワークスペースと何も開かれていない空のワークスペースで作業することができます。空のワークスペースは、特定のフォルダに開放されていませんが、ファイルをディスクから開くことができます。
これまでの、VS Code の終了は、空のワークスペースの UI 状態を復元することは決してなく、ファイルだけ開いている場合でもレイアウトを失うことになりました。(ウィンドウの再読み込みでも同様)

今回のリリースでは、開かれたフォルダを持つワークスペースと同様の方法で、空のワークスペースの UI 状態を復元することが可能です。

Empty Workspace Restore

新しい設定 window.restoreWindows がこの動作を制御します。設定可能な値は、次のとおりです:

  • none - ワークスペースを復元しない
  • one - 最後のアクティブなワークスペースを復元 (デフォルト)
  • folders - 開かれたフォルダのみを復元
  • all - すべてのワークスペースを復元

新しい設定 window.restoreWindows の採用により、以前の設定である window.reopenFolders は廃止されます。まだいくつかのリリースにおいて古い設定はサポートされますが、新しい設定に移行してください。

Close unmodified files

未修正ファイルを閉じる

アクティブなエディタグループに存在する未編集のエディタを閉じるための新しいコマンドが導入されました。これにより、変更がなく保存の必要がない (not dirty) エディタのタブを簡単に閉じることができます。アクションは、キーバインディング (⌘K U (Windows, Linux Ctrl+K U)) だけでなく、タブ (ヘッダー) のコンテキストメニューやエクスプローラーの 開いているエディター (OPEN EDITORS) ビューからも実行できます。

Close Unmodified Editors

この機能のプルリクエストを提供してくれた Soney Mathew (@soneymathew) に感謝します!

Switch window improvements

スイッチウィンドウの改善

以前のリリースでは、開いているウィンドウを切り替えるためのクイック・ピッカーが追加されました (workbench.action.switchWindow コマンド)。このリリースでは、操作性をより良くするためにいくつかの微調整を行っています。

Switch Windows

ファイルアイコンテーマの利用を適用している場合、現在アクティブなファイルまたはフォルダのアイコンがウィンドウに表示されます。

さらに、開いたウィンドウをすばやく切り替えるための新しいコマンド workbench.action.quickSwitchWindow が追加されました。修飾キーを押したままにすると、ウィンドウのリストの移動を繰り返し、すべてのキーを放すことで選択されたものを開くことができます。

例として、 Ctrl+R キーボードショートカットにこの機能を割り当て使用するには、キーバインディングエディタで次のルールを設定します:

{
"key": "ctrl+r",
"command": "workbench.action.quickSwitchWindow"
},
{
"key": "ctrl+r",
"command": "workbench.action.quickOpenNavigateNext",
"when": "inWindowsPicker"
}

Ctrl+R を押し、Ctrl キーを押したままにしておきます。 R キーを押している限り、ウィンドウのリストをナビゲートすることができます。そして、フォーカスを合わせ、すべてのキーを放します。

Quick Switch Windows

New keybindings context per quick picker

クイックピッカーごとの新しいキーバインドコンテキスト

ウィンドウピッカー周りの改善に関連して、クイックピック機能を備えたピッカーをより簡単に設定することが可能になりました。ピッカーが開くたびに、キーバインドの割り当てに使用できる特定のキーバインドコンテキストがアクティブになります。たとえば、ウィンドウピッカーは、開いたときに inWindowsPicker のコンテキストキーを有効にします。より強力なピッカーですばやくナビゲートできるだけでなく、いくつかの厄介なバグも修正されました。クイックピッカーが既に表示されている場合でも、クイックピッカーを開くことができます(たとえば、Command Palette が開いている間に Quick Open ファイルピッカーを開くなど)

次の例は、最近開いたフォルダを切り替えるためのクイックナビゲートキーバインドを設定する方法を示しています:

たとえば、キーボードショートカット Ctr+J でこの機能を使用するには、キーバインディングエディタで次のルールを設定します:

{
"key": "ctrl+j",
"command": "workbench.action.quickOpenRecent"
},
{
"key": "ctrl+j",
"command": "workbench.action.quickOpenNavigateNext",
"when": "inRecentFilesPicker"
}

Ctrl+J を押し、Ctrl キーだけを押したままにします。J キーを押すことで、表示されている最近開いたフォルダとファイルのリストをナビゲートすることができます。目的のリストにフォーカスを移動させすべてのキーを離すことで開きます。

Extensions Installed / Recommended sections

拡張機能のインストール/推奨セクション

推奨される拡張機能をより目立たせるために、拡張機能 ビューには、インストール済み推奨 される拡張機能の 2 つのセクションが表示されます。

Extensions actions

Lists and quick pick leverage aria properties

リストとクイックピックにおける、aria プロパティの活用

サジェストウィジェット、例外リスト、Quick Open ドロップダウンなどのリストで、aria-setsizearia-posinset が設定されました。これらのリストは仮想的であり、これらの aria プロパティがなければ、スクリーンリーダーはエントリの数を正しく判別できませんでした。

Integrated Terminal

統合ターミナル

Selection re-implemented

実装し直された選択機能

統合ターミナルでの選択の操作は、通常の Web 選択から、端末自身が管理しレンダリングするモデルに移行することによって完全に再実装されています。これにより、多くの問題) が修正され、いくつかの主要な変更があります:

  • ターミナルの複数のページからテキストを選択してコピーできるようになりました
  • 新しい すべて選択 コマンドを追加
  • ラップされた行をコピーする際、ラップされた箇所に改行が追加されなくなりました

Terminal selection changes

  • ダブルクリックによる単語選択が改善され、フラグメントだけでなく URL とパスが選択されるようになりました

Terminal double click word selection

  • tmux のマウスモードにて、選択が正しく動作するようになりました

Terminal tmux improvements

Find in the terminal

ターミナルで検索

統合ターミナルには基本的な find 機能が追加され、⌘F (Windows, Linux Ctrl+F) で起動できます。

Terminal find

Linux や Windows 上で、 Ctrl+F で Find ウィジェットを起動するのではなく、シェル操作に利用する場合は、次のようにキーバインディングを削除する必要があります:

{ "key": "ctrl+f", "command": "-workbench.action.terminal.focusFindWidget",
"when": "terminalFocus" },

Rename terminal sessions

ターミナルのセッション名を変更

統合ターミナルに作成されたセッション名を、workbench.action.terminal.rename コマンドを使ってリネームすることができるようになりました。新しい名前は、ターミナル選択ドロップダウンに表示されます。

Git

Pull from specific remote

特定のリモートから pull する

@BugraC, @matthewshirley, @Krzysztof-Cieslak のおかげで、リモートリポジトリの特定のブランチから Pull from… コマンドを使って変更を取り込むことができるようになりました。

Manage your .gitignore file

.gitignore ファイルの管理

@BugraC により、ソースコントロールビューのコンテキストメニューまたはグローバルの Git: Add File to .gitignore コマンドを使って .gitignore にファイルを追加できるようになりました。

Tasks Global Menu

Tasks

タスク

タスクをより使いやすくするために、Tasks メニューをトップレベルのメニューバーに追加しました:

Tasks Global Menu

Tasks メニューには、デフォルトのビルドタスクを設定する新しいアクション Configure Default Build Task が用意されていますが、0.1.0 バージョンの tasks.json ファイルを使用する場合は、単に tasks.json ファイルを開くだけです。Tasks メニューの機能を最大限に活用するためには、2.0.0 バージョンの tasks.json を用意する必要があり、デフォルトで tasks.json ファイルが存在しない場合に作成することができます。

多くの素敵な機能には、新しいタスク形式が付属しています:

  • Run Task コマンドは、使用頻度の高いタスクを最初に表示し、カスタム定義されたタスクおよび自動検出されたタスクを最後に表示するようになりました
  • タスクは統合ターミナルで実行されます。これにより、出力エンコーディングが改善し、完全な ANSI 制御シーケンス(色など)がサポートされ、タスクへの入力をサポートします
  • TypeScript、Gulp、Jake、Grunt、npm タスクの自動検出:

Task auto-detection

  • 今後は、拡張機能の作成者とも協力し、.Net や Maven などのサポートを追加する予定です

  • 上記の画像からわかるように、自動検出されたタスクの先頭にはタスクタイプ (‘npm:’, ‘gulp:’, ‘grunt:’, ‘tsc:’ または ‘jake:’) が付きます。launch.jsonpreLaunchTask のように、別のファイルから自動検出されたタスクを参照している場合は、そのタスク参照をプレフィックスで更新する必要があります。ワークスペースは、次のような launch.json を持っており、build タスクは、gulp ファイルで定義されていると仮定すると、

{
"version": "0.1.0",
"configurations": [
{
...
"preLaunchTask": "build"
}
]
}

これを次のように変更する必要があります:

{
"version": "0.1.0",
"configurations": [
{
...
"preLaunchTask": "gulp: build"
}
]
}
  • タスクなしでタスクを実行するときのガイド付き問題マッチャーの選択:

Task problem matcher selection

  • ガイド付きデフォルトビルドタスクの選択を呼び出すには、グローバルメニューバーから Configure Default Build Task を実行します。
  • もちろん、自分で作成したカスタムタスクを tasks.json ファイルに定義することができ、ターミナル上で実行方法を完全に制御できます。たとえば、以下のタスクは、端末でテストスクリプトを実行し、テストを実行するたびに新しい端末を生成し使用します:

    {
    "version": "2.0.0",
    "tasks": [
    {
    "taskName": "Run tests",
    "type": "shell",
    "command": "./scripts/test.sh",
    "windows": {
    "command": ".\\scripts\\test.bat"
    },
    "group": "test",
    "presentation": {
    "reveal": "always",
    "panel": "new"
    }
    }
    ]
    }

新しい機能の詳細なリストと使い方、そして 0.1.0 バージョンの task.json から 2.0.0 への最適な変換方法については、tasks documentation を参照してください。

現在、ワークスペースで利用可能な Gulp, Grunt, Jake, および npm タスクを自動検出しますが、タスク名を launch.json ファイルから参照するときに、タスク名を修飾する必要があります。ワークスペースは、次のような launch.json を持っていると仮定します:

{
"version": "0.1.0",
"configurations": [
{
...
"preLaunchTask": "build"
}
]
}

"build" タスクは、gulp ファイルで定義されています。これを変更する必要があります:

{
"version": "0.1.0",
"configurations": [
{
...
"preLaunchTask": "gulp: build"
}
]
}

タスク名がどのように見えるかわからない場合は、グローバルの Tasks メニューから Run Task… を実行し、タスクのリストに表示されるラベルを使用してください。

また、タスク API もリリースしました。プログラミング言語にタスク検出を提供する場合は、APInpm scripts autodetect のような VS Code タスク検出拡張機能を参照してください。

Debugging

デバッグ

Recipe for Angular debugging

Angular デバッグのレシピ

非標準のシナリオや複雑なシナリオで、Node.js のデバッグを設定することは、チャレンジになることがあります。5 月のリリースでは、recipe repository を作成し、様々なシナリオのレシピの収集を始めました。

このリリースでは、Chrome Debugging with Angular CLITony Sneed (@tonysneed) による新しいレシピが追加されました。

Debug hover has scroll bar for long values

デバッグホバー上でスクロールバーによるは長い文字列値を表示可能に

コミュニティへの pull request により、デバッグホバー上でスクロールバーを使って長い文字列値を表示できるようになりました。

Node Debugging

Node デバッグ

Windows executables are found even if no extension is specified

拡張子が指定されていない場合でも Windows 実行ファイルを見つける

Windows では、以前まで下記のように runtimeExecutable パスに正しいファイル拡張子を含める必要があり、クロスプラットフォーム構成を複雑にしていました:

"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon",
"windows": {
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon.cmd"
}

このリリースでは、プラットフォーム間での移植性を高めるために、パスにファイル拡張子を含める必要はなくなりました:

"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon"

Simplified setup for “Restart debug session”

“Restart debug session” の設定を簡略化

VS Code の Node.js デバッグは、常にデバッグセッションを自動的に再開することをサポートしていました。これは、nodemon のようなファイル監視ツールを使用して、ファイルの変更を検出し Node.js を再起動させる場合に役立ちます。起動設定属性 restart を true に設定すると、node デバッガは、Node.js が終了した後、自動的に Node.js ランタイムに再接続しようと試みます。詳細は、Node.js Debugging を参照してください。

今回のリリースでは、デバッグフラグとポート属性を明示的に設定する必要がなくなり、単純化されました。プロトコル (“legacy” または “inspector”) に応じて、VS Code は正しい --debug--debug-brk--inspect--inspect-brk 引数とランダムなポートを runtimeExecutable として指定されたプログラムに渡します。このポートはその後の restarted セッションでも使用されます。

また、この機能を使用することで、グローバルにインストールされた nodemon のデバッグ設定をより簡単に行えます:

{
"name": "Launch server.js via nodemon",
"type": "node",
"request": "launch",
"runtimeExecutable": "nodemon",
"program": "${workspaceRoot}/server.js",
"restart": true,
"console": "integratedTerminal"
}

“Attach by process ID” support for all Node.js versions

すべての Node.js バージョンで “プロセス ID によるアタッチ” をサポート

VS Code Node.js デバッグは、デバッグモードで起動されていなくても Node.js プロセスのデバッグを常にサポートしていました。このために、”attach” タイプのデバッグ設定に、processId 属性を指定しなければなりません。このリリースでは、Node.js のすべてのバージョンでこの機能をサポートしています。(8.0 より以前のバージョンの場合だけでなく)

Node.js v8.0 related changes

Node.js v8.0 に関連した変更

Node.js のバージョンにより、サポートされるデバッグプロトコルが異なります。VS Code Node.js デバッガは、この差違を吸収して、使用するプロトコルを自動的に決定しようとします。しかし、これが不可能な場合、デフォルトでは、8.0 以前のすべての Node.js バージョンでサポートされている “legacy” プロトコルを使用します。詳細については、Node.js Debugging documentation を参照してください。また、Node.js v8.x の採用が着実に増えてきているため、特定のシナリオのデフォルトプロトコルを “legacy” から “inspector” へ変更することに着手しています。

今回のリリースの Node.js デバッグでは、起動コンフィグレーションの runtimeExecutable 属性が設定されるたびに “inspector” プロトコルが仮定されます。もし、デバッグ構成が失敗する場合は、この変更が原因かもしれません。これを修正するには、Node.js をバージョン 8.x にアップグレードするか、 "protocol": "legacy" を起動設定に追加することによって “legacy” プロトコルの使用を明示的に強制することができます。

Languages

TypeScript 2.4

TypeScript 2.4

本リリースの VS Code には、TypeScript 2.4.1 が付属しています。このリリースには、多くの新しい言語機能、バグ修正、エディタの改良が含まれており、いくつかのハイライトは次のとおりです:

Dynamic Import Expressions
動的なインポート式

遅延読み込みモジュール用の新しい ECMAScript import 式をサポート:

async function getZipFile(name: string, files: File[]): Promise<File> {
const zipUtil = await import('./utils/create-zip-file');
const zipContents = await zipUtil.getContentAsBlob(files);
return new File(zipContents, name);
}

Parent method suggestions in subclasses
サブクラスでの親メソッドサジェスト

IntelliSense は、インターフェイスと親メソッドのクラスメソッドをサブクラスで表示するようになりました:

JavaScript method suggestions from parent class

これは、親メソッドのオーバーライドやインタフェースの実装に役立ちます。

More relevant suggestions in JavaScript files
JavaScript ファイルでのより関連性の高い提案

VS Code 1.13 では、JavaScript ファイル上でのサジェストに型のサジェストが含まれています:

VS Code 1.13 JavaScript suggestions that include type suggestions

この機能により、EvalErrorConstructorEventInit のように、JavaScript には通常必要のない多くのサジェストが表示されたことを意味していました。

VS Code 1.14 では、普通の JavaScript で作業している間、JavaScript のサジェストをフィルタリングにより関連性の高いものだけを含めることができます:

Improved VS Code 1.14 suggestions

Simpler building TypeScript using Tasks

Tasksを使用したTypeScriptの構築の簡素化

⇧⌘B (Windows, Linux Ctrl+Shift+B) を使用することで tasks.json ファイルを設定せずに TypeScript プロジェクトをビルドできるようになりました。必要なのは tsconfig.json ファイルだけです:

Building a TypeScript project using tasks

TypeScript は、ビルドを実行するためにワークスペース内のすべての tsconfig.json プロジェクトを取得します。

Formatting option for spaces after TypeScript type assertions

TypeScript 型アサーション後のスペースの書式設定オプション

新しい typescript.format.insertSpaceAfterTypeAssertion 設定で、TypeScript のタイプアサーション後のスペース配置を制御できます。

// Default formatting
<Foo>{ abc: 123, ... };
// With "typescript.format.insertSpaceAfterTypeAssertion":true
<Foo> { abc: 123, ... };

Refactoring support for JavaScript and TypeScript

JavaScript と TypeScript のリファクタリングサポート

注: パフォーマンス問題により一部のシナリオでは、VS Code 1.14.1 でこのリファクタリングは無効になっています

VS Code 1.14 には、JavaScript と TypeScript コードのリファクタリングの初期サポートが含まれています。最初にサポートされているリファクタリングは、JavaScript ES5 スタイルの関数クラスを ES6 クラスに変換します:

Converting an es5 class to an es6 class using refactorings

We plan to add additional refactorings in the future.
今後、リファクタリングを追加する予定です。

Control handling of line breaks in the Markdown preview

Markdown プレビューの改行処理制御

新しい markdown.preview.breaks 設定は、Markdown プレビューの改行のレンダリングを制御します。デフォルトでは、1 つの改行は Markdown の段落としては無視されます。たとえば、以下の Markdown では:

# Hello world
This is the first sentence.
This is the second sentence.
This is the third sentence.

Markdown プレビューでは、次のように表示されます:

Markdown preview normally ignores single line breaks

"markdown.preview.breaks": true が設定されている場合、段落内のすべての改行は、出力される HTML 内で <br> タグに変換されます:

Markdown preview normally ignores single line breaks

Editor

エディタ

Emmet abbreviation improvements

Emmet 略語の改善

1.13 で、Emmet 機能の新しいモデルを導入しました。このモデルは、emmet.useNewEmmettrue に設定することで有効にできます。現在の 1.14 リリースにおける、この新しいモデルの改善点を以下に示します:

Multi cursor support in Emmet
Emmet でのマルチカーソルサポート

emmet.useNewEmmettrue に設定した後で、多くの Emmet コマンドのマルチカーソルサポートを試してください。そして、期待どおりに動かないものがあれば、issue として報告することを忘れないでください。

Multi cursor in Emmet commands

Emmet customizations in the new Emmet model
新しい Emmet モデルでの Emmet カスタマイズ

新しい Emmet モデルでは、次の Emmet 設定をサポートしています。

  • emmet.includeLanguages

    Emmet でサポートされている既存言語とのマッピングを提供することにより、Emmet: Expand AbbreviationEmmet: Wrap with Abbreviation を任意の言語に追加できます。Emmet を追加したい言語を左側に、Emmet がサポートしている言語を右側に記載します。マッピングの両側に言語 ID を指定します。

    たとえば:

"emmet.includeLanguages": {
"javascript": "javascriptreact",
"vue-html": "html",
"plaintext": "jade"
}
  • emmet.excludeLanguages

    Emmet の展開を表示したくない言語がある場合は、この設定の配列に対象とする言語 ID を追加します

  • emmet.syntaxProfiles

    See Emmet Customization of output profile to learn how you can customize the output of your HTML abbreviations.
    For example:

    "emmet.syntaxProfiles": {
    "html": {
    "attr_quotes": "single"
    },
    "jsx": {
    "self_closing_tag": true
    }
    }
  • emmet.variables

    Emmet スニペットで使用される変数をカスタマイズします。
    たとえば:

    "emmet.variables": {
    "lang": "de",
    "charset": "UTF-16"
    }
  • emmet.showExpandedAbbreviation

    提案または補完リストに表示される Emmet サジェストを制御します。

    • never - どの言語のサジェストリストにも Emmet 略語を表示しない
    • inMarkupAndStylesheetFilesOnly - マークアップとスタイルシートベースの言語モードでのみサジェストリストに Emmet 略語を表示 (‘html’,’pug’,’slim’,’haml’,’xml’,’xsl’,’css’,’scss’,’sass’,’less’,’stylus’) (デフォルト)
    • always - javascriptreacttypescriptreact および、新しい設定 emmet.includeLanguages にマップされている言語だけでなく、マークアップやスタイルシートベースの言語モードでサジェストリストに Emmet 略語を表示

      注意: always モードに設定した場合、新しい Emmet の実装はコンテキストを意識していません。たとえば、JavaScript React ファイルを編集している場合、マークアップを書くときだけでなく JavaScript を書くときにも Emmet サジェストが得られます。

Enable language extensions to provide Emmet suggestions
Emmet のサジェストを提供する言語拡張を有効化

Emmet サジェストがソースコードの非マークアップや非スタイルシートのセクションに現れる問題を回避するために、Emmet 補完プロバイダを独自のモジュールとして抜き出しました。
言語拡張機能の作成者は、組み込まれた 言語構造をより良く認識する実装である npm モジュール [vscode-emmet-helper] (https://www.npmjs.com/package/vscode-emmet-helper) を使用することにより、Emmet 拡張機能よりも適切なコンテキストで Emmet サジェストを提供できるようになります。

Auto indent on type, move lines and paste

自動インデントタイプ、行とペーストの移動

このリリースでは、TypeScript、JavaScript、HTML、CSS、JSON、または、字下げルールを持つ言語で、行の移動や、コンテンツのペーストした際に、自動でインデント調整を適用することが可能になりました。この機能を有効にするには、editor.autoIndenttrue に設定します。インデントルールについては、まだ開発中のため、問題が発生した場合はお知らせください。

Indentation rules
インデントルール

VS Code 1.9 リリースでは、インデントルールに関する初期の改良が行われました。本リリースでは、拡張機能のアクティベーション段階で登録するのではなく、言語拡張機能の作成者は、language-configuration.json ファイルでインデントルールを宣言できます。

{
"indentationRules": {
"increaseIndentPattern": "^\\s*((begin|class|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|while)|(.*\\sdo\\b))\\b[^\\{;]*$",
"decreaseIndentPattern": "^\\s*([}\\]]([,)]?\\s*(#|$)|\\.[a-zA-Z_]\\w*\\b)|(end|rescue|ensure|else|elsif|when)\\b)"
}
}

TypeScript, JavaScript, CSS, HTML, JSON の言語モードには、インデントルールが組み込まれています。ほかの言語のインデントルールは含まれていませんが、ルールを定義する言語拡張機能を導入することで、editor.autoIndent 機能が動作することがわかります。

タイプ

C のような言語では、すでに括弧をうまく扱うことができます。開いた括弧を入力し、一致する閉じ括弧を入力したときにインデントが調整され、次の行がインデントされます。ただし、キーワードを使用してブロックをラップする言語はサポートされていません。新しい自動インデント機能により、その言語のインデントルールを作成することができます。

auto-indent-on-type

行の移動

ネストされたブロックからソースコードを移動するか、あるブロックから別のブロックにコードを移動すると、エディタはインデントレベルを自動的に調整します。

auto-indent-on-move-lines

ペースト

ペーストされた行の処理は、行の移動に似ていますが、ペーストされた領域の前の行に基づいてインデントを調整します。

auto-indent-on-paste

Minimap

ミニマップ

新しい "editor.minimap.showSlider" 設定に "always" を設定すると、常にミニマップ(アウトラインビュー)スライダーを表示できます。また、スライダ内では、水平スクロールを行うためのインジケータもあります。スライダジオメトリの計算には多くの改善点がありました(注目の変更点セクションを参照):

minimap-horizontal-slider

Diff editor review pane

Diff エディタレビューペイン

Diff エディタに、スクリーンリーダーのユーザー向けに特別に設計されたレビューペインを追加しました。diff エディタは 2 つのエディタの組成として実装され、それぞれはスクリーンリーダーに標準的なコードエディタとして公開されています。コードエディタのコンテキストから、diff 領域の入力やスクリーンリーダーへの実際の diff の入力を自動的にアナウンスする方法は、(可能であっても)明確ではありません。

そこで、F7Shift+F7 を追加しました。これは diff をナビゲートし、統一されたパッチ形式で表示します。行は矢印キーでナビゲートすることができ、Enter キーを押すと、diff エディタと選択された行にジャンプします。

diff-review-pane

Extension Authoring

Constraints for rendering SVG images

SVGイメージをレンダリングするための制約

セキュリティ上の懸念から、ユーザーが提供する SVG イメージを VS Code 内でレンダリングさせないようにしました。また、VS Code 内における拡張機能の管理をより安全に使用するための制約がいくつか追加されました:

  • package.json で提供される拡張機能のアイコンに、SVG を利用できなくなりました
  • package.json で提供される拡張機能のバッジに SVG は利用できなくなり、承認バッジプロバイダからのものでなければなりません
  • README.mdCHANGELOG.md で使用するイメージの URL は https ではじまる URL での解決が必要になりました
  • README.mdCHANGELOG.md で使用するイメージに SVG は利用できなくなり、バッジも承認バッジプロバイダからのものでなければなりません
  • README.mdCHANGELOG.md の画像は、データ URI を使用できません

これらの制約を適用するために、VS Code は、拡張機能の package.json, README.md および CHANGELOG.md ファイルのリンティングエラーを報告します。また、拡張機能を公開するために利用する vsce ツールは、コンプライアンスチェックを実行し、問題がある場合には、新しいバージョンを Marketplace へアップロードする事を許可しません。

Custom views

カスタムビュー

when コンテキスト値を package.jsonviews セクションで定義することで、カスタムビューの可視性を制御できるようになりました。

Example:

"views": {
"explorer": [
{
"id": "extension.node-debug.loadedScriptsExplorer",
"name": "Loaded Scripts",
"when": "inDebugMode && debugType == 'node'"
}
]
}

New Debug API

新しいデバッグ API

今回のリリースから、拡張機能のために Debug API の提供を開始しました。

The initial API covers the life-cycle of debug sessions:
初期 API には、デバッグセッションのライフサイクルが含まれています:

  • メモリ内の起動設定に基づいてデバッグセッションを開始するための createDebugSession
  • デバッグセッションが終了したことを示す onDidTerminateDebugSession イベント

注意: 現在、この API は提案段階であるため、使用するには enableProposedApi":truepackage.json 追記し、vscode.proposed.d.ts ファイルを拡張機能のプロジェクトに追加します。また、enableProposedApi 属性を使用する拡張機能を Marketplace に公開することはできません。

New Task API

新しいタスク API

プログラミング言語にタスク検出機能を実装するために、公式なタスク API が使用できるようになりました。 API と VS Code タスク検出拡張機能の 1 つとして実装された [npm scripts autodetect] (https://github.com/Microsoft/vscode/blob/master/extensions/npm/src/main.ts) を参照してください。

Debug Adapter Protocol

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

新しい機能 supportsDelayedStackTraceLoading

5 月のリリース版では、呼び出しスタックの一部と対応する変数を遅延取得することで、ステッピング性能を向上させました。
その後、すべてのデバッグ拡張機能がスタックをチャンクで返すように実装されているわけではなく、トップスタックフレームの重複が発生する可能性があることを学びました。
しかしながら、この問題を安定した方法で修正することはできませんでした。そのため、デバッグアダプタは、スタックフレームの遅延ロードを明示的にオプトインする必要があり、そのための新しい機能 supportsDelayedStackTraceLoading がデバッグプロトコルに導入されました。したがって、スタックフレームの遅延読み込みがデバッグ拡張機能で正常に動作していて、デバッグアダプタが stackTrace リクエストの startFrame 属性と levels 属性の両方をサポートしていることがわかっている場合、supportsDelayedStackTraceLoading 機能のために true を返すべきです。これにより、6 月のリリースでは、さらに改良されたステッピング性能を提供できる予定です。

StackFrameFormat のための新しいオプション属性 includeAll

この新しいオプションにより、StackTraceRequest は、デバッグアダプタにより隠される可能性のあるスタックフレームを含めたすべてのスタックフレームを含めてパラメータ化することができます。

Engineering

エンジニアリング

Windows 64 bit Insiders

Windows の Visual Studio Code 64-bit Insiders build

Windows の Visual Studio Code 64-bit ビルドは、Insiders build にて利用可能になりました。通常のインストーラ 形式と ZIP アーカイブ 形式で提供されます。64-bit 版をインストールする前に、必ず 32-bit 版をアンインストールしてください。

来月には、安定版の 64-bit ビルドが提供される予定です。

Issue management automation

問題管理の自動化

issue 管理を支援するために導入した Probot は、機械学習アルゴリズムを使用して、新しく報告された issue と機能の関連性を推測します。アルゴリズムにより、関連付けが正確であるという十分に高い確率を推定する場合、bot は、エリアラベルを追加し(場合によっては) issue をチームの開発者に直接割り当てます。

VSCodeBot labels an new issue with the 'emmet' label

bot は、新しいリリースから数日は、そのリリースのために報告された新しい issue に new release ラベルを追加します。これにより、新しいリリースに紛れ込んでしまったバグなどをすばやく見つけることができます。そして、数日後にラベルを削除します:

VSCodeBot labels an new issue with the 'new release' label

今後もコミュニティからのフィードバックも楽しみにしながら、より多くの自動化を追加する予定です。

Monaco Editor

Monaco Editor の新しいバージョンを公開するとともに、VS Code を最新の状態にし数多くのアクセシビリティを向上させました。

Preview: Multi Root Workspaces

プレビュー: マルチルートワークスペース

VS Code の “Multi-Root Workspaces“ 実装で、このマイルストーンは忙しくなっています。(設計上の決定については、以前のリリースノートを参照してください)。この作業の結果は、複数のルートフォルダワークスペースでのテストを可能にするために、”最小実行可能製品 (Minimum Viable Product)” (MVP) と呼ばれています。下記の機能は、現時点で Insiders ビルドでのみ利用可能であり、安定した機能ではありません。すべてのユーザーがこの機能を使用できるようにするには、もっと多くの作業が必要です。それを試してみるには、インサイダービルドを https://code.visualstudio.com/insiders から入手してください。

File Explorer

ファイルエクスプローラー

ファイルエクスプローラでは、1 つのツリーに複数のルートフォルダを表示できるようになりました。File メニューまたはコンテキストメニューから簡単にルートフォルダを追加できます:

Add Root Folder

ルートフォルダーが追加されると、エクスプローラーは新しいフォルダーをルートとしてファイルツリーに表示します。いずれかのルートフォルダを右クリックすること表示されるメニューから、ルートフォルダを追加したり削除したりすることができます。

Remove Root Folder

ファイルエクスプローラは以前と同じように動作し機能します。ルートフォルダ間でファイルを移動したり、コンテキストメニューとエクスプローラビューで提供されている一般的なファイル操作アクションも使用できます。files.exclude のような設定は、ルートフォルダにも同じように適用され、グローバルユーザー設定として設定されている場合は、すべてのフォルダに適用されます。

Search

検索

フルテキスト検索と Quick Open ファイルピッカーは、追加のルートフォルダも対象として動作し、すべてのルートフォルダの結果が検索結果ビューに表示されます:

Multi Root Search

ルートフォルダ間で同じファイル名の結果を区別するために、結果リストで相対パスのプレフィックスとしてルートフォルダーの名前が使用されます。search.exclude のような設定については、設定されている場合は各ルートフォルダに、グローバルユーザー設定として設定されている場合は、すべてのフォルダでサポートされます。

Multi Root Quick Open

Settings

設定

1 つのワークスペースに複数のルートフォルダがある場合、各ルートフォルダに .vscode フォルダを用意して、それぞれのフォルダに適用する設定を定義することができます。ワークスペースとフォルダのレベルでどの設定を適用できるかを判断するために、設定をワークスペースとフォルダスコープに分類しました。

このような環境では、フォルダレベルで次の設定がサポートされています:

  • editor.*
  • files.exclude
  • files.trimTrailingWhitespace
  • files.insertFinalNewLine
  • files.encoding
  • files.autoGuessEncoding
  • files.watcherExclude
  • search.exclude

現在、これ以外の設定は、フォルダ単位ではサポートされていません。将来、上記のリストに追加する予定です。

マルチルートワークスペースに設定が適用される手法の詳細については、issue を参照してください。

Proposed multi-root API

提案されたマルチルート API

複数のフォルダをエディタで開くために、より強力な API が必要になります。単一ルートのみをサポートする、rootPath API は、互換性のために残します。開発段階において、新しい強力な API を実装しました。現在、提案段階 にある API を以下に示します。これにより、すべてのワークスペースフォルダを調査し、変更を検出した際にイベントを送信できます。また、新しい構成モデルにアクセスすることもできます。

export namespace workspace {
/**
* List of workspace folders or `undefined` when no folder is open. The *first*
* element in the array is equal to the [`rootPath`](#workspace.rootPath)
*/
export let workspaceFolders: Uri[] | undefined
/**
* An event that is emitted when a workspace folder is added or removed.
*/
export const onDidChangeWorkspaceFolders: Event<WorkspaceFoldersChangeEvent>;
/**
* Get a configuration object.
*
* @param section A dot-separated identifier.
* @param resource A resource for which configuration is asked
* @return The full workspace configuration or a subset.
*/
export function getConfiguration2(section?: string, resource?: Uri): WorkspaceConfiguration2;
}
export interface WorkspaceFoldersChangeEvent {
readonly addedFolders: Uri[];
readonly removedFolders: Uri[];
}
export interface WorkspaceConfiguration2 extends WorkspaceConfiguration {
/**
* Retrieve all information about a configuration setting. A configuration value
* often consists of a *default* value, a global or installation-wide value,
* a workspace-specific value and a folder-specific value.
*
* The *effective* value (returned by [`get`](#WorkspaceConfiguration.get))
* is computed like this: `defaultValue` overwritten by `globalValue`,
* `globalValue` overwritten by `workspaceValue`. `workspaceValue` overwritten by `folderValue`.
*
* *Note:* The configuration name must denote a leaf in the configuration tree
* (`editor.fontSize` vs `editor`) otherwise no result is returned.
*
* @param section Configuration name, supports _dotted_ names.
* @return Information about a configuration setting or `undefined`.
*/
inspect<T>(section: string): { key: string; defaultValue?: T; globalValue?: T; workspaceValue?: T, folderValue?: T } | undefined;
}

注: API は提案段階であり、拡張機能毎に有効にする必要があります。作成している拡張機能の package.json ファイルに、次の行を追加してください:

"enableProposedApi": true

また、vscode.proposed.d.ts ファイルをリポジトリからプロジェクトにコピーします。このファイルをプロジェクトに含めることで、型のチェックと IntelliSense が有効になります。

API は提案段階であり、まだ、洗練されていないため、大きな変更が入る可能性があります。そのため、提案された API を使用する拡張機能の Marketplace への公開は、サポートしていません。しかしながら、拡張 API を利用する拡張機能の作者自身が、最終的な API のデザインとサポートすべき点を定義するために協力してください。恥ずかしがらずにフィードバックをください!

Upcoming features

今後予定される新機能

マルチルートにおける様々なエクスペリエンスを優れたものにするためには、まだまだ多くの作業が必要です。

この機能は、次のマイルストーンで特に注目を集めると考えます:

  • 複数のルートフォルダのソース管理 UI
  • タスクとデバッグのサポート
  • ルートフォルダ間での豊富な言語サポート

New Commands

新しいコマンド

キーコマンドコマンド id
⌘K U (Windows, Linux Ctrl+K U)グループ内の未変更のエディターを閉じるworkbench.action.closeUnmodifiedEditors
ウィンドウをすぐに切り替える… (instances)workbench.action.quickSwitchWindow
最近使用したものを開く…workbench.action.quickOpenRecent
⌘F (Windows, Linux Ctrl+F)検索ウィジェットにフォーカスするworkbench.action.terminal.focusFindWidget
⌘A (Windows, Linux )すべて選択workbench.action.terminal.selectAll
名前変更workbench.action.terminal.rename
F7次の差分に移動editor.action.diffReview.next
⇧F7 (Windows, Linux Shift+F7)前の差分に移動editor.action.diffReview.prev

Notable Changes

注目すべき変更

  • transform:translate3d(...) の代わりに will-change:transform を使って、エディタのブラウザレイヤを示唆します。”隠された” エディタオプションであった editor.disableTranslate3deditor.disableLayerHinting に置き換えられます。詳細は、monaco-editor#426 を参照してください
  • ループ内の Array.splice の悪い使い方を置き換えることにより、大規模なペーストを大幅に高速化させます。詳細は、monaco-editor#351 を参照してください
  • スクロールバーのスライダジオメトリ計算を再実装し、より早い段階での人為的なスライダサイズの膨張を考慮する実装にしました。その結果、大きなファイルで正しいマウス制御が行われます。詳細は、6710 を参照してください
  • 同様の考え方でミニマップのスライダージオメトリを再実装しました: 21346, 29326, 28944.
  • CSS の画面ピクセル比率が整数でない場合に、細い線をレンダリングするための回避策を見つけて実装しました。(@fj128 の助けを借りて)

クローズされたバグ一覧と、1.14 アップデートにてクローズされた機能のリクエスト一覧です。

Contributions to Extensions

拡張機能への貢献

GitHub view showing issues and PRs

  • Git Lens: Git Lens に stash explorer (Pull requests: #94, #102)を追加しました。これにより VS Code Diff Editor にてローカル・スタッシュの内容の変化を見ることが可能になります

  • VSTS Build Status: 複数のビルド定義を 1 つのビルドステータスバーインジケータにグループ化する機能を追加しました(pull request #12)

Thank You

最後になりましたが、VS Code をより良いものにするために協力してくれた次の方々に多大なる感謝を込めて:

vscode への貢献:

vscode-node-debug2 への貢献:

vscode-languageserver-node への貢献:

vscode-recipes への貢献:

vscode-extension-vscode への貢献:

localization への貢献:

Transifex でコミュニティローカリゼーションを開始してから3ヶ月目です。 Transifex VS Code project チームには 270 人以上のメンバーとなりました。新しい翻訳の提供、翻訳への投票、プロセスの改善提案などの貢献に感謝します。

このリリースにおいて活躍いただいたコントリビュータのリストです。コントリビュータのリストを含むプロジェクトの詳細については、プロジェクトサイト (https://aka.ms/vscodeloc. を訪れてください。

  • French: Antoine Griffard, Julien Brochet, JP Gouigoux.
  • Italian: Aldo Donetti, Steve Roger.
  • German: Jonas Thelemann, Levin Rickert, Christian Gräfe.
  • Spanish: Raúl Rama, Alberto Poblacion, José M. Aguilar, Andy Gonzalez.
  • Russian: sberbanker, Nikita Gryzlov, Friedrich von Never.
  • Japanese: Yuichi Nukiyama, EbXpJ6bp, Yosuke Sano, Yuki Ueda, tempura.sukiyaki.
  • Korean: Ian Y. Choi.
  • Chinese (Simplified): Joel Yang, 陈嘉恺, 王韦煊, Zijian Zhou, lychichem, YF.
  • Chinese (Traditional): Duran Hsieh, jasperjn, Alan Liu, balduran, Wei-Ting(DM), Will 保哥, Alan Tsai, Terry Sheng.

先月のリリースでは、ブラジルポルトガル語の翻訳が成功しましたが、今月は、ハンガリー語とトルコ語の翻訳が開始されました。ハンガリー語、トルコ語、ブラジルポルトガル語コミュニティのローカリゼーションチームと、3500 文字列におよぶ大部分をローカライズした TarDániel と AdemCoşkuner に感謝します。コミュニティメンバーの努力により、Transifex でローカリゼーションが完了し、翻訳は Insiders ビルドに統合されテストされました。検証の進捗状況に応じて、すぐに翻訳を安定したビルドに統合したいと考えています。

  • Portuguese (Brazil): Bruno Sonnino, Roberto Fonseca, Douglas Eccker, Miguel de Mousa, Fabio Oliveira.
  • Hungarian: Tar Dániel, Milán Boleradszki, Béla Kovács.
  • Turkish: Adem Coşkuner, Ata Binen, Meriç Bağlayan, Mehmet Kut, Sertac Ozercan, Serkan Inci, Ramis Eren.