2022年9月 (バージョン 1.72)
ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel シリコン | Linux: deb rpm tarball Arm snap
Update 1.72.1: このアップデートでは、これらのセキュリティ問題に対処しています。
Update 1.72.2: このアップデートでは、これらの問題に対処しています。
Visual Studio Code 2022年9月リリースへようこそ。このバージョンには多くのアップデートが含まれており、皆様に気に入っていただけることを願っています。主なハイライトは以下のとおりです。
- ツールバーのカスタマイズ - ツールバーのアクションの表示/非表示。
- エディターの自動スクロール動作の改善 - カーソルの位置に合わせてスクロール速度を調整。
- 拡張機能ビューの更新 - 更新プログラムがあるか、注意が必要な拡張機能をハイライト表示。
- ツリービューでの検索結果 - リストまたはツリービューで検索結果を確認。
- ネストされたGitリポジトリのサポート - ネストされたGitサブモジュールを検出して表示。
- ターミナルのクイックフィックス - コマンドのタイプミスを修正し、アップストリームリモートを設定するための提案。
- 頻繁に使用するタスクをピン留め - タスクを[タスクの実行]ドロップダウンの上部にピン留めして、すばやくアクセスできるようにします。
- Markdownリンクの検証 - ヘッダー、ファイル、および画像リンクを自動的にチェック。
- GitHub Enterprise Server認証 - 改善されたログインワークフローでは、PATが不要になりました。
- Dev Containersの機能 - 開発コンテナーの機能を簡単に追加および共有。
- VS Codeコミュニティディスカッション - 他のVS Code拡張機能の作成者と交流。
これらのリリースノートをオンラインで読むには、Updates(code.visualstudio.com上)にアクセスしてください。
Insiders: 最新機能をいち早く試したいですか?ナイトリーInsidersビルドをダウンロードして、最新のアップデートをすぐにお試しください。
ワークベンチ
ツールバーからアクションを非表示にする
ツールバーからアクションを非表示にできるようになりました。ツールバーのアクションを右クリックし、その非表示コマンドまたは切り替えコマンドのいずれかを選択します。非表示のアクションは...
その他のアクションメニューに移動され、そこから呼び出すことができます。メニューを復元するには、ツールバーボタン領域を右クリックして、メニューのリセットコマンドを選択します。すべてのメニューを復元するには、コマンドパレットからすべてのメニューをリセットを実行します((⇧⌘P (Windows、Linux Ctrl+Shift+P))。
以下のビデオでは、GitLens拡張機能のファイル注釈メニューがエディターツールバーから非表示になり、その後メニューのリセットで復元されます。
マージエディター
3ウェイマージエディターの使用をオプトインする
受け取ったマージエディターのフィードバックをすべて見直し、全体的なエクスペリエンスについて検討した結果、競合が検出された場合、デフォルトで3ウェイマージエディターを表示しないことにしました(git.mergeEditor
設定は現在false
です)。この決定の理由は、issue #160806に記載されています。
競合のあるファイルの場合、ユーザーはマージエディターで解決を選択して、3ウェイマージエディターを開くことができます。
CodeLens UI
ユーザーからのフィードバックによると、チェックボックスにはいくつかのUX上の問題がありました。チェックボックスは発見しにくく、すべての可能な状態を適切に表していないため、混乱を引き起こしていました。今回のイテレーションでは、テキストラベル(受信を承認、現在を承認、両方を承認)を使用するCodeLens UIに切り替えました。
このデザインについては引き続き改善を重ね、受け取るすべてのフィードバックを注意深く監視していきます。
結果ファイルがスクラッチから再計算される
前回のイテレーションでは、マージエディターを競合のあるファイルの代替ビューとして設計しようとしました。競合マーカーを表示する代わりに、別のエディターペインに競合の詳細が表示されていました。この設計には、マージエディターを開いてもディスク上のファイルが変更されず、マージエディターを開く前に行ったユーザーの変更を保持できるという利点がありました。残念ながら、これは混乱を招くだけでなく、すべての場合に機能するわけではありませんでした。なぜなら、私たちのマージアルゴリズムとGitマージアルゴリズムが完全に一致していなかったからです。
今回のリリースでは、競合マーカーのあるファイルがマージエディターで開かれると、最初のステップとして、競合マーカーを挿入せずに、マージアルゴリズムを使用して結果ファイルを再計算します。一方向の競合は自動的に解決され、適切な競合は両方のバージョンの共通の祖先にリセットされ、未処理としてマークされます。
ベースビュー
マージエディターには、個別のベースビューが追加され、任意のサイドを共通の祖先と比較するために使用できます。
ツリービューの検索コントロールの改善
ツリービューの検索コントロールを垂直方向に移動して、その背後にあるUI要素にアクセスできるようになりました。⌥⌘F (Windows、Linux Ctrl+Alt+F)をツリービュー内で押すと、検索コントロールが表示されます。
さらに、ツリービューの検索コントロールは、再度開いたときに最後の検索語句を記憶します。
一部のオーディオおよびビデオファイルの組み込みプレビュー
VS Codeは、一部のオーディオおよびビデオファイル形式のプレビューをサポートするようになりました。
現在、次のオーディオ形式がサポートされています。
- WAV
- MP3
- Ogg
- FLAC
また、次のビデオ形式をプレビューできます。
- H.264
- VP8
ビデオファイルの場合、ビデオトラックとオーディオトラックの両方のメディア形式がサポートされている必要があることに注意してください。たとえば、多くの.mp4
ファイルは、ビデオにH.264を使用し、オーディオにAACを使用しています。VS Codeは.mp4
のビデオ部分を再生できますが、AACオーディオはサポートされていないため、サウンドは出力されません。オーディオトラックにはMP3を使用する必要があります。
インクリメンタルな命名を無効にする
ファイルエクスプローラーでのインクリメンタルなファイル命名を無効にできるようになりました。explorer.incrementalNaming
設定に新しいdisabled
値を設定します。この値は、ファイルエクスプローラー内で貼り付け時にファイル名を変更するロジックを無効にします。ファイル名が既に存在する場合、ほとんどのネイティブエクスプローラーと同様に、既存のファイルを上書きするかどうかを尋ねられます。
VS Codeアプリケーションフォルダー内を編集する際の警告
VS Codeアプリケーションフォルダー内のファイルを編集すると、エディターに警告が表示されるようになりました。アプリケーションフォルダー内のファイルを誤って変更することはよくある間違いであり、通常は意図したものではありません。
エディター
自動スクロール動作の改善
選択してドラッグすると、エディターはディスプレイのフレームレート(FPS)に依存する方法でスクロールしていました。そのため、マウスがエディターの端に到達するとすぐにエディターがすばやくスクロールすることがありました。現在、エディターの自動スクロールは、マウスが端に近い場合は1秒あたり約1ビューポートの管理しやすい速度で、マウスがエディターから離れている場合はより速くスクロールします。これはFPSに依存しません。
以下のビデオでは、マウスカーソルがエディターから離れて下に移動するにつれて、スクロール速度が速くなっています。
ホバーの改善
エディターのホバーは、特にマウスがエディターの空の領域を通過するときに、非常に積極的に非表示になっていました。そのため、ホバーに表示される一部のアクションに到達するのが困難でした。現在、ホバーはマウスがその方向に向かって移動している限り表示されたままになります。設定"editor.hover.sticky": false
は以前の動作に戻ります。
右側の「After」ビデオでは、ホバーからクイックフィックスを選択するのがはるかに簡単になっています。
新しいコードアクションのグループ
コードアクションコントロールで、Inline
とMove
の2つの新しいグループを使用できるようになりました。
これらのグループは、refactor.inline
とrefactor.move
のコードアクションの種類に対応しています。
新しいコードアクションの色
コードアクションコントロールも、今回のイテレーションでは少し異なって見えることに気付くかもしれません。スタイルは、より適切なテーマの色を使用するように更新されました。最大の変更は、コントロール本体がmenu.*
ではなくeditorWidget.*
の色を使用するようになったことです。
これらの色については引き続き調整中ですので、特定のテーマでうまく機能しない場合や、色のカスタマイズオプションが不足している場合はお知らせください。
拡張機能
最近更新された拡張機能
VS Codeは、拡張機能ビューの更新の最近更新されたセクションに、過去7日間に更新された拡張機能を表示するようになりました。
注意が必要な拡張機能
VS Codeは、デフォルトのインストール済みセクションの最上部に、注意が必要な拡張機能をソートして表示するようになりました。これには、更新が保留中の拡張機能、または更新または無効化され、VS Codeの再読み込みが必要な拡張機能が含まれます。
アクティビティバーの拡張機能アイコンのバッジには、注意が必要な拡張機能の数が表示されるようになりました。
拡張機能の更新を無視する
更新ドロップダウンメニューの更新を無視ボタンをクリックして、拡張機能の更新を無視できるようになりました。これにより、拡張機能は注意が必要な拡張機能リストから削除されます。
このアクションを元に戻すには、同じ更新を無視ボタンのチェックを外します。
拡張機能の特定のバージョンをインストールする(別のバージョンをインストール経由)と、その拡張機能の更新も無視されることに注意してください。
インストール済み拡張機能のソート
インストール済み拡張機能のリストを、インストール数、評価、名前、公開日、および更新日でソートできるようになりました。
検索
ツリービューとして表示される結果
検索結果をツリーで表示できるようになりました。検索ビューの右上隅にあるリスト/ツリーアイコンをクリックして、リストビューとツリービューを切り替えるだけです。
テーマ: Night Owl Light (プレビュー: vscode.dev)
ファイルの装飾設定
検索結果では、ファイルステータスを反映するファイル名バッジと色をオン/オフできるようになりました。設定は、検索 > 装飾: バッジ (search.decorations.badges
) および 検索 > 装飾: 色 (search.decorations.colors
) です。
テーマ: Night Owl Light (プレビュー: vscode.dev)
ソース管理
ネストされたGitリポジトリの検出
長年の機能リクエストに対応するため、今回のマイルストーンでは、ネストされたGitリポジトリのサポートを追加するためにリポジトリ検出に変更を加えました。ネストされたリポジトリの場所によっては、git.repositoryScanMaxDepth
設定(デフォルトは1レベル)を変更する必要がある場合があります。
パスフレーズ付きSSHキーのサポートを追加
Git操作にパスフレーズ付きのSSHキーが使用される場合、VS Codeはクイック入力コントロールを表示して、SSHキーのパスフレーズを入力できるようにします。パスフレーズはキャッシュされず、Git操作が実行されるたびに入力する必要があります。
チェックアウト前のプル
今回のマイルストーンでは、ブランチの切り替えプロセスを合理化するための新しい設定git.pullBeforeCheckout
を追加しました。この設定が有効になっている場合、送信コミットがない場合は、リモートからプルして、ブランチをチェックアウトする前に早送りします。
リポジトリフェッチの改善
複数のリモートを持つGitリポジトリの場合、フェッチコマンドを呼び出すと、すべてのリモートのリストを含むクイックピッカーが表示されるようになりました。ユーザーは、フェッチする特定のリモートを選択するか、すべてのリモートからフェッチするかを選択できます。
マージの中止コマンド
現在進行中のマージ操作を中止するための新しいコマンド、Git: マージを中止が追加されました。
ターミナル
ターミナルのクイックフィックス
シェル統合によって強化された新機能であるクイックフィックスのロールアウトを開始しています。この機能には、オーディオキューのサポートが付属しています。audioCues.terminalQuickFix
で有効にすると、修正が利用可能になったことを音で知らせます。
クイックフィックスは、コマンドがユーザーが実行する可能性の高い一連のアクションにマップされる場合に使用でき、エディターで使用されるのと同じキーバインドCtrl+.またはCmd+.でアクティブ化できます。
以下は、最初にサポートされるクイックフィックスです。
Git類似コマンド
Gitコマンドのタイプミスがあった場合、クイックフィックスは類似のコマンドを提案します。
Gitアップストリームの設定
git push
が実行され、アップストリームリモートがない場合、クイックフィックスはアップストリームリモート引数を使用してプッシュすることを提案します。
Git PRの作成
ブランチがリモートに初めてプッシュされるとき、クイックフィックスはPRを作成するためのリンクを開くことを提案します。
空きポート
サーバーが既に使用中のポートを使用して起動された場合、クイックフィックスはプロセスを強制終了してポートを解放するアクションを提供します。
シェル統合の改善
シェル統合に対する次の改善が行われました。
- 最近使用したコマンドを実行および最近使用したディレクトリに移動は、行にコンテンツがある場合(または信頼性をもって判断できない場合)に、行をクリアするようになりました。
- 一部のビルドツールと競合する可能性のある
$PREFIX
環境変数のbashスクリプトの使用法を削除しました。 $ZDOTDIR
周辺のいくつかのエッジケースを修正するためにzshスクリプトを改良しました。- 複数のユーザー間で共有されているマシンでのzshシェル統合の処理を改善しました。
ハイパーリンクのサポート
ターミナルで実行されているアプリケーションから送信されたハイパーリンクがサポートされるようになりました。これにより、URLを指すラベルを表示でき、点線のアンダーラインで表示されます。
以下は、https://vscode.dokyumento.jpを指すラベル「VS Code」でリンクを作成する方法の例です。
printf '\e]8;;https://vscode.dokyumento.jp\e\\VS Code\e]8;;\e\\'
またはより一般的には
\x1b]8;; <URL> \x1b\ <Label> \x1b]8;;\x1b\'
VT機能のサポート
このバージョンでは、次のVTエスケープシーケンスのサポートが導入されました。
DECRQM
: ANSIおよびDECプライベートモードレポート (CSI Ps $ p
) - このシーケンスを使用すると、プログラムはターミナルが現在どのモードになっているか(たとえば、折り返しモードやブラケット付き貼り付けモードなど)をクエリできます。DECSCA
: 保護属性 (CSI Ps " q
) - この属性は、DECSED
およびDECSEL
がコンテンツを消去できるかどうかを決定します。
オーディオベル
オーディオベルがターミナルで動作するようになり、terminal.integrated.enableBell
で有効にできます。
ターミナルのドキュメント
ターミナルのドキュメントがリファクタリングされ、VS Code Webサイトの独自の目次に移動されました。
現在、次のトピック固有のドキュメントがあります。
- ターミナルの基本 - VS Code統合ターミナルをすばやく理解します。
- ターミナルプロファイル - プロファイルを使用してターミナルをカスタマイズする方法を学習します。
- シェル統合 - VS Codeは、コマンドステータス、履歴、クイックナビゲーションなどの機能を提供できます。
- 外観 - ターミナルのテキストとカーソルのスタイル、および色を変更します。
- 高度な機能 - カスタムキーバインド、Unicodeおよび絵文字文字の高度なサポート。
必要なときに適切なドキュメントを簡単に見つけられることを願っています。
タスク
実行タスクエントリのピン留め
タスクをタスク: タスクの実行リストにピン留めして、より迅速かつ簡単にアクセスできるようにすることができます。
タスク完了音
タスクは、マルチタスクを可能にし、アクセシビリティを向上させるために、完了時に音を再生します。audioCues.taskCompleted
設定でオーディオキューを設定します。
言語
Markdownリンクの検証
Markdownを使用していると、誤って無効なファイルリンクまたは画像参照を追加するのは簡単です。ファイル名に_
(アンダースコア)ではなく-
(ダッシュ)を使用したことを忘れたり、リンク先のファイルが別のディレクトリに移動されたりする可能性があります。多くの場合、これらの間違いに気付くのは、Markdownプレビューを表示した後、または公開した後だけです。VS Codeの新しいMarkdownリンク検証は、これらの間違いを見つけるのに役立ちます。
開始するには、"markdown.validate.enabled": true
を設定します。VS Codeは、ヘッダー、画像、およびその他のローカルファイルへのMarkdownリンクを分析するようになります。無効なリンクは、警告またはエラーとして報告されます。
VS Codeは、他のMarkdownファイルの特定のヘッダーへの無効なリンクも検出できます。
リンク検証をカスタマイズするために使用できる設定がいくつかあります。
markdown.validate.fileLinks.enabled
- ローカルファイルへのリンクの検証を有効/無効にする:[link](/path/to/file.md)
markdown.validate.fragmentLinks.enabled
- 現在のファイル内のヘッダーへのリンクの検証を有効/無効にする:[link](#_some-header)
markdown.validate.fileLinks.markdownFragmentLinks
- 他のMarkdownファイル内のヘッダーへのリンクの検証を有効/無効にする:[link](other-file.md#some-header)
markdown.validate.referenceLinks.enabled
- 参照リンクの検証を有効/無効にする:[link][ref]
。markdown.validate.ignoredLinks
- 検証をスキップするリンクグロブのリスト。これは、ディスク上に存在しないが、Markdownが公開されると存在するファイルにリンクする場合に役立ちます。
ぜひ試してみて、新機能についてのご意見をお聞かせください。
Markdownのリンク定義への抽出
参照リンクを使用すると、Markdownソースで同じリンクを複数回簡単に使用できます。
This [link][example-link] and [this link][example-link] both point to the same place!
[example-link]: http://example.com
これは、ファイル内の1か所を変更するだけで両方のリンクを更新できるため便利です。
新しいリンク定義への抽出リファクタリングは、既存のMarkdownリンクをリンク定義と参照リンクに変換するのに役立ちます。このリファクタリングは、現在のドキュメント内のリンクのすべての出現箇所を変換します。たとえば、次のMarkdownドキュメントの場合
[Markdown](https://daringfireball.net/projects/markdown/) and you: Adventures in [Markdown linking](https://daringfireball.net/projects/markdown/)!
https://daringfireball.net/projects/markdown/
リンクのいずれかでリンク定義への抽出を実行すると、次のようになります。
[Markdown][md] and you: Adventures in [Markdown linking][md]!
[md]: https://daringfireball.net/projects/markdown/
リファクタリングを実行した後、VS Codeはリンク定義の名前を求めるプロンプトを表示します。上記の例では、md
と入力しました。
Markdownでリンク定義を整理する
Markdownファイルの新しいリンク定義を整理するコードアクション (source.organizeLinkDefinitions
) は、すべてのリンク定義をファイルの末尾にグループ化し、アルファベット順にソートし、未使用のものを削除します。これは、ソースアクションコマンドを使用して実行できます。
たとえば、次のMarkdownソースの場合
Some [link][example] and an image:
![An image of a cat][cat-gif]
[example]: http://example.com
[cat-gif]: /keyboard-cat.gif
[some unused link]: http://example.com/file2
リンク定義を整理するを実行すると、次のようになります。
Some [link][example] and an image:
![An image of a cat][cat-gif]
[cat-gif]: /keyboard-cat.gif
[example]: http://example.com
未使用のsome unused link
定義が削除され、残りの定義がアルファベット順にソートされていることに注目してください。
CSS / LESS / SCSS
CSS言語サポートは、@propertyおよび@layer at-rulesを理解するようになりました。
ノートブック
ノートブックのJavaScript出力がモジュールとして評価されるようになりました
ノートブックのJavaScript出力がモジュールとして扱われるようになりました。これは、出力内で宣言された変数が他の出力にリークしなくなることを意味します(また、const
変数の場合は、変数名が競合する他の出力が実行されるのを防ぐ可能性さえあります)。
これは、JavaScript出力内でimport
を使用できるようになったことも意味します。
%%javascript
import { myFunction } from './myModules.js';
console.log(myFunction());
ノートブックのアウトラインでサポートされるHTMLヘッダー
MarkdownセルのHTMLヘッダーが検出され、ノートブックのアウトラインビューにレンダリングされるようになりました。
VS Code for the Web
ブラウザのオムニボックスで「code」
Chrome/Edgeブラウザ拡張機能が追加され、GitHubリポジトリをvscode.devで簡単に開けるようになりました。
始めるには
- Chromeウェブストアから拡張機能をインストールします。
- ブラウザの検索バーに
code
と入力して、オムニボックスをアクティブにします。 - 名前でGitHubリポジトリを検索し、Enterキーを押します。候補はブラウザの検索履歴によって入力されるため、目的のリポジトリが表示されない場合は、完全修飾名
<owner>/<repo>
を入力して開くこともできます(例:microsoft/vscode
)。
以下のビデオでは、ユーザーがcode vscode
と入力してvscode.dev
でmicrosoft/vscode
リポジトリを開いています。
この拡張機能は、以前のVS CodeチームメンバーであるPine Wu氏が作成したGoto GitHub Repo Chrome拡張機能に触発され、多大な感謝を捧げます。
開発環境を切り替えるときに変更を持ち運ぶ
https://vscode.dev/github/microsoft/vscodeなどのGitHubまたはAzure Reposリポジトリを閲覧している場合、Continue Working Onコマンドを使用して、リポジトリで使用する別の開発環境を選択できます。
以前は、仮想ワークスペースにコミットされていない変更がある場合、それらをGitHubまたはAzure Reposにプッシュして、他の場所で表示する必要がありました。今回のマイルストーンでは、Continue Working On機能に編集セッション統合を追加し、コミットされていない変更がGitHub Codespaceなどのターゲット開発環境に自動的に移動するようにしました。
以下のビデオでは、VS Code for the Webを使用しているときに行ったJavaScriptファイルへのユーザーの変更が、新しいGitHub Codespaceを作成して作業を開始するときに適用されています。
今回のリリースでは、コミットされていない変更でContinue Working Onを初めて使用するときに、VS Codeサービスを使用して保留中の変更を保存する編集セッションを使用して、選択した開発環境に編集内容を持ち込むオプションが表示されます。これらの変更は、ターゲット開発環境に適用されると、サービスから削除されます。コミットされていない変更なしで続行することを選択した場合でも、"workbench.editSessions.continueOn": "prompt"
設定を構成することで、後でこの設定を変更できます。
VS Code for the Webを使用している場合、Continue Working Onを次の場所で使用すると、コミットされていない変更が持ち運ばれます。
- GitHub Codespacesの新しいクラウドホスト環境
- GitHubリポジトリの新しいローカルクローン
- 同じ仮想GitHubリポジトリを持つローカルVS Codeインスタンス
Remote Repositories拡張機能を使用してデスクトップVS Codeを使用している場合、Continue Working Onを次の場所で使用すると、コミットされていない変更が持ち運ばれます。
- GitHub Codespacesのクラウドホスト環境(GitHub Codespaces拡張機能経由で利用可能)
- GitHubリポジトリの新しいローカルクローン
- コンテナボリューム内のGitHubリポジトリの新しいクローン(Dev Containers拡張機能経由で利用可能)
- https://vscode.dev
- リポジトリのクローンを含む既存のローカルフォルダー
Issue Reporting
問題の閾値を7500文字に増加
組み込みの問題レポーターを使用してVS Codeまたは拡張機能の問題を報告する場合、github.comで問題をオープンするために使用されるURLの文字数に制限があります。この制限に達すると、問題の本文にWe have written the needed data into your clipboard because it was too large to send. Please paste.
というメッセージが表示されます。残念ながら、一部のユーザーはこのメッセージに気付かず、問題を本文に貼り付けるのを忘れてしまいます。
今回のマイルストーンでは、閾値を7500文字に増やしました。これはなぜなら
- URLの文字数に厳しい制限がある特定のブラウザは、サポートされなくなりました (EOL)。
- GitHubには、URLの文字数に独自の制限があります。
これにより、URLに含まれる文字数がほぼ3倍になり、ほとんどのユーザーにとって十分なはずであり、クリップボードメッセージが表示される頻度が少なくなります。
実行中の拡張機能エディターで使用される問題レポーター
コマンド開発者: 実行中の拡張機能を表示を使用して実行中の拡張機能エディターを開き、問題の報告ボタンを選択すると、組み込みの問題レポーターが表示されます。以前は、これによりGitHubの問題に移動して貼り付けを求められ、拡張機能リポジトリに多くの不要で質の低い問題が作成されていました。拡張機能の問題の報告ボタンは、組み込みの問題レポーターを介して実行されるようになり、ユーザーは質の高い拡張機能の問題を送信できるようになります。
拡張機能への貢献
リモート開発
リモート開発拡張機能を使用すると、開発コンテナー、リモートマシン、またはWindows Subsystem for Linux(WSL)をフル機能の開発環境として使用できます。
Remote - WSL および Remote - Containers エクステンションの命名に関するフィードバックをお寄せいただきありがとうございます。これらの名前の Remote
は、従来からのローカル開発ではなく、「リモート」または「分離された」WSL ディストリビューションまたは開発コンテナーで開発することを意図していました。しかし、これは多くの人が使用する「リモート」とは異なる用法であり、混乱を招く可能性がありました(例えば、開発コンテナーは自分のマシン上にあるのか?など)。
そのため、これらのエクステンションの名前をより明確にするために、名称と製品内コマンドを更新し、WSL および Dev Containers に名称変更しました。Marketplace のエクステンション識別子やドキュメントなどのリンクは変更されていないため、これらの 2 つのエクステンションの現在の使用方法に支障はないはずです。
名称変更とともに、これらのエクステンションの機能と修正に関する作業も継続されました。詳細については、Remote Development リリースノートをご覧ください。
Dev Container Features
Dev Container Features を使用すると、事前パッケージ化された機能を開発コンテナーに簡単に追加できます。Git や Docker などのツール、または Go や Java などのプログラミング言語のサポートなど、利用可能な機能のリストを確認し、devcontainer.json
に追加できます。機能テンプレートを使用して、独自の機能を作成して公開および共有することもできます。
GitHub Pull Requests and Issues
GitHub Pull Requests and Issues エクステンションにも進展があり、プルリクエストと issue の作業、作成、および管理ができるようになりました。このリリースのハイライトは次のとおりです。
- GitHub Enterprise Server のサポートの改善。これには以下が含まれます。
- VS Code 組み込みの GitHub Enterprise Server 認証プロバイダーによる PAT レス認証。
- Enterprise リポジトリを含むフォルダーを開いたときの自動検出と、セットアップへのオンランプ。
- GitHub Enterprise Server のバグ修正。
- ファイルを確認済みにするためのチェックボックス。
その他のハイライトについては、エクステンションの 0.52.0 リリースの変更ログをご覧ください。
GitHub Issue Notebooks
ワークスペース編集
GitHub Issue Notebooks エクステンションは、ノートブック API を紹介するものであり、非常に便利であることがわかりました。この精神に基づき、ワークスペース編集 API の最新の改善を採用しました。次の新しい Code Action があります。
- セルを新しいノートブックに移動/コピーします。
- OR ステートメントを使用してセルを分割できます。
label:bug
のような修飾値をスニペット編集を使用して変数に抽出します。- 値セットエラーに対するスニペットベースのクイックフィックス。
ローカライズ
エクステンションは、VS Code がサポートする 13 の言語で完全にローカライズされるようになりました。また、新しい Localization API を使用してローカライズされた最初のエクステンションでもあります。これは、ローカライズがデスクトップと Web の両方で機能することを意味します。
Jupyter
セルタグとスライドショー編集のサポート
ドキュメントの JSON 形式を開かなくても、ノートブックエディターでセルタグとスライドショーの種類を直接編集できるようになりました。
これにより、papermill 用にノートブックをパラメーター化したり、nbconvert 用にノートブックをカスタマイズしたりできます。
また、コマンドを通じてノートブックセルのスライドショータイプを直接更新して、ノートブックをプレゼンテーション用のスライドに変えることもできます。
上記の両方の例は、セルメタデータを編集するために ノートブックワークスペース編集 API を使用しています。他のカスタムセルメタデータの編集をサポートする方法に興味がある場合は、GitHub リポジトリ (cell-tags, slideshow) から詳細を学ぶことができます。
インタラクティブウィンドウのコマンドインタラクションの改善
interactive.input.focus
コマンドは、最後に使用したインタラクティブウィンドウの入力ボックスにフォーカスを与えるようになりました。以下の短いビデオでは、コマンドはカスタムキーボードショートカットで使用されています。
ノートブックの Delete セルコマンドがインタラクティブウィンドウセルで有効になり、元に戻せるようになりました。
Python ファイルのセル折りたたみ
# %%
マーカーで示された Python ファイル内の「セル」をエディターで折りたたむことができるようになりました。
GitHub Enterprise Server 認証のサポート
これまで、GitHub Enterprise Server ユーザーは、VS Code で GitHub Enterprise Server にログインするために(たとえば、GitHub Pull Requests and Issues エクステンションで使用するために)、個人アクセストークン(PAT)を手動で作成する必要がありました。これは面倒なプロセスであり、ユーザーは PAT を作成するために VS Code を離れ、適切な権限で作成されていることを確認し、コピーして VS Code に貼り付ける必要がありました。
もう必要ありません。現在、GitHub Enterprise Server のログインフローは github.com のログインフローと同じであり、ユーザーは PAT を作成する必要なく GitHub Enterprise Server にログインできます。このエクスペリエンスを実際に確認するには、Marketplace から GitHub Pull Requests and Issues エクステンションを入手し、github-enterprise.uri
設定を GitHub Enterprise Server URI に設定して、エクステンションを試してみてください。新しいエクスペリエンスを示すビデオはこちらです。
テーマ: Panda Theme (プレビュー: vscode.dev)
Python
環境の作成コマンド
新しい 環境の作成 コマンドが追加され、VS Code の Python ユーザー向けに仮想環境または conda 環境を自動的に作成します。ユーザーは、コマンドパレットからコマンドをトリガーし、venv で新しい仮想環境を作成するか、Conda 環境を作成するかを選択し、最後にプロジェクトに必要なインタープリターを選択できます。コマンドは、プロジェクトフォルダーにある requirements.txt
ファイルで概説されている必要なパッケージもインストールします。この新機能により、環境作成プロセスが合理化され、コーディングのベストプラクティスとしてユーザーが環境を利用することを奨励できることを願っています。
エクステンション作成者向けの新しい環境 API
Python API は、Python エクステンションによって検出されたユーザーのマシンで利用可能な Python 環境をエクステンションが操作する方法を提供するようになりました。エクステンションは、Python エクステンションがスクリプトを実行するために使用する選択された環境パスにアクセスしたり、優先パスに更新したりするために使用することもできます。
フィードバックは、issue #18888 にお寄せください。API はまだ最終決定されていないため、フィードバックに基づいて後方互換性を提供せずに変更される可能性があることに注意してください。
Python エクステンションテンプレート
Python エクステンションテンプレートは、リンター、フォーマッター、コード分析ユーティリティなど、お気に入りの Python ツール用の Visual Studio Code エクステンションを構築するのに役立ちます。テンプレートは、ツールを VS Code に統合するエクステンションを構築するために必要な基本的な構成要素を提供します。
プレビュー機能
設定プロファイル
過去数か月間、コミュニティから最も要望の多かった機能の 1 つである VS Code での 設定プロファイル のサポートに取り組んできました。この機能は、workbench.experimental.settingsProfiles.enabled
設定を介してプレビューで利用できます。ぜひ試してみて、vscode リポジトリで issue を作成するか、issue #116740 にコメントしてフィードバックをお寄せください。
設定プロファイルインジケーター
VS Code は、アクティビティバーの下部に設定プロファイルインジケーターを表示します。デフォルトでは、プロファイル名の最初の 2 文字がインジケーターに表示されます。短い名前を任意の 2 文字、絵文字、または codicon にカスタマイズすることもできます。codicon は、$(codicon-id)
構文を使用して参照できます。
このインジケーターをクリックすると、短い名前を変更 オプションを含むメニューが表示されます。
設定プロファイルの同期
VS Code は、VS Code インスタンス間で設定プロファイルを同期することをサポートするようになりました。
注: この機能は現在、VS Code の Insiders リリースでのみ利用可能です。
WebAssembly と Web での Python 実行
過去数か月にわたって、WebAssembly (WASM) を VS Code に導入する作業を行ってきました。サポートを有効にするために、次の 2 つのことに取り組みました。
- エクステンションが WebAssembly コードを実行できるようにするライブラリ。WebAssembly は、ワークスペース内のファイルと VS Code ターミナルに透過的にアクセスできます。これらのライブラリは vscode-wasm リポジトリで開発され、npm に
@vscode/sync-api-common
,@vscode/sync-api-client
,@vscode/sync-api-service
, および@vscode/wasm-wasi
として公開されています。これらのリポジトリの README ファイルには、ライブラリの使用方法の例が含まれています。 - Web 用 VS Code (たとえば、vscode.dev および insiders.vscode.dev) で Python ファイルの実行をサポートする VS Code エクステンション。エクステンションは Marketplace で Experimental - Python for the Web として入手できます。1 つの制約は、実行する Python コードが GitHub リポジトリでホストされている必要があることです。
以下のスクリーンショットは、Hello World
プログラムの実行を示しています。
Python WASM: REPL を開始 コマンドを使用して Python REPL を開始することもできます。
ライブラリとエクステンションの両方が開発中であり、プレビューとして提供されていることに注意してください。WebAssembly Python インタープリターと VS Code 自体に制限があります。インタープリターの主な制限は次のとおりです。
- pip サポートなし。
- ソケットサポートなし。
- スレッドサポートなし。結果として、非同期サポートはありません。
ただし、ソースホイール Python パッケージを含む独自の Python 環境を作成するためのサポートがあります。詳細については、エクステンションの README を確認してください。
VS Code の制限事項は次のとおりです。
- デバッグサポートなし。Python ファイルのみを実行できます。
- ネイティブ Python モジュールのサポートなし。
ただし、ご期待ください。これらの制限の一部を解除するための計画があります。
拡張機能の作成
クリーンな環境でのエクステンションデバッグ
エクステンションをデバッグする場合、常に、エクステンションがエクステンションの作成者の開発環境(ユーザー設定とインストールされたエクステンション)で実行されており、エクステンションのターゲットユーザーにとってより適切な環境で実行されていないという問題がありました。
最近導入された「プロファイル」機能を使用すると、エクステンションのデバッグ構成でプロファイルを指定することにより、開発中のエクステンションを別の環境で実行できるようになりました。プロファイル機能を有効にするには、workbench.experimental.settingsProfiles.enabled
設定を有効にします。
次の 2 つのシナリオがサポートされています。
- エクステンションのデバッグが停止したときに自動的に削除される名前のない「空の」プロファイルを使用して、クリーンな環境でデバッグ します。
- 開発中のエクステンション専用に作成され、特定ユーザーの設定とエクステンションを含む名前付きプロファイルを使用して、制御された環境でデバッグ します。
このデバッグ構成は、--profile-temp
スイッチを使用してクリーンな環境でデバッグする方法を示しています。
{
"name": "Extension",
"type": "extensionHost",
"request": "launch",
"args": ["--profile-temp", "--extensionDevelopmentPath=${workspaceFolder}"],
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
"preLaunchTask": "npm: watch"
}
また、これは、以前に作成した「extensionContext」という名前のプロファイルを使用する制御された環境でデバッグするためのデバッグ構成です。
{
"name": "Extension",
"type": "extensionHost",
"request": "launch",
"args": ["--profile=extensionContext", "--extensionDevelopmentPath=${workspaceFolder}"],
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
"preLaunchTask": "npm: watch"
}
リモートロケーション(Remote Development エクステンション Dev Containers、SSH、または WSL 経由)でエクステンションをデバッグする場合、--profile-temp
フラグを使用すると、このステータスメッセージが表示されることに注意してください。
これは、一時プロファイルにはエクステンションが含まれていないため、予想される動作です。つまり、Remote Development エクステンションもありません。リモートシナリオの場合は、空の名前付きプロファイルを作成し、Remote Development エクステンションをそれに追加してから、--profile=....
コマンドラインオプションを使用することをお勧めします。
改善されたワークスペース編集 API
WorkspaceEdit でノートブックを編集する
ワークスペース編集は、vscode.NotebookEdit
でノートブックを変更できるようになりました。vscode.NotebookEdit
クラスには、ノートブックにセルを挿入、置換、および削除する編集を作成するための静的ファクトリ関数が含まれています。
const currentNotebook = vscode.window.activeNotebookEditor?.notebook;
if (currentNotebook) {
const edit = new vscode.WorkspaceEdit();
// Use .set to add one or more edits to the notebook
edit.set(currentNotebook.uri, [
// Create an edit that inserts one or more cells after the first cell in the notebook
vscode.NotebookEdit.insertCells(/* index */ 1, [
// ... new notebook cell data
])
// Additional notebook edits...
]);
await vscode.workspace.applyEdit(edit);
}
WorkspaceEdit でスニペット編集を実行する
新しい SnippetTextEdit
タイプを使用すると、エクステンションは WorkspaceEdit
でスニペット編集を実行できます。スニペット編集は通常テキスト編集に似ていますが、ユーザーはプレースホルダーをタブ移動したり、変数を挿入したり、選択要素から選択したりできます。スニペットの詳細については、このガイドを参照してください。
スニペット編集にはコードまたはノートブックエディターが必要であり、単一のエディターのスニペット編集のみをサポートできます。そうしない場合、通常テキスト編集のように動作します。
スニペット編集とワークスペース編集を組み合わせることで、GitHub Issue Notebooks エクステンションのサンプルなど、新しい、よりシームレスな Code Action とリファクタリングが可能になると考えています。
WorkspaceEdit でコンテンツを含むファイルを作成する
WorkspaceEdit
を使用してファイルを作成するときに、コンテンツを指定できるようになりました。これを行うには、オプションバッグでコンテンツを渡します。
const edit = new vscode.WorkspaceEdit();
edit.createFile(newFileUri, { contents: new Unit8Array([1, 2, 3]) });
await vscode.workspace.applyEdit(edit);
コントリビューションされた Webview コンテキストメニュー
新しい Webview コンテキストメニュー API により、高度な Webview は、ユーザーが Webview 内を右クリックしたときに表示されるコンテキストメニューを簡単にカスタマイズできます。この新しいコントリビューションポイントは VS Code の通常のコンテキストメニューを使用するため、カスタムメニューはエディターの残りの部分にぴったりと適合します。Webview は、Webview のさまざまなセクションにカスタムコンテキストメニューを表示することもできます。
Webview に新しいコンテキストメニュー項目を追加するには、最初に新しい webview/context
セクションの下の menus
に新しいエントリを追加します。各コントリビューションは、command
(項目のタイトルもここから取得されます) と when
句を受け取ります。when 句 には、コンテキストメニューがエクステンションの Webview にのみ適用されるように、webviewId == 'YOUR_WEBVIEW_VIEW_TYPE'
を含める必要があります。
"contributes": {
"menus": {
"webview/context": [
{
"command": "catCoding.yarn",
"when": "webviewId == 'catCoding'"
},
{
"command": "catCoding.insertLion",
"when": "webviewId == 'catCoding' && webviewSection == 'editor'"
}
]
},
"commands": [
{
"command": "catCoding.yarn",
"title": "Yarn 🧶",
"category": "Cat Coding"
},
{
"command": "catCoding.insertLion",
"title": "Insert 🦁",
"category": "Cat Coding"
},
...
]
}
Webview 内では、data-vscode-context
データ属性 (または JavaScript で dataset.vscodeContext
) を使用して、HTML の特定の領域のコンテキストを設定することもできます。data-vscode-context
値は、ユーザーが要素を右クリックしたときに設定するコンテキストを指定する JSON オブジェクトです。最終的なコンテキストは、ドキュメントルートからクリックされた要素までたどることによって決定されます。
たとえば、次の HTML を考えてみましょう。
<div class="main" data-vscode-context='{"webviewSection": "main", "mouseCount": 4}'>
<h1>Cat Coding</h1>
<textarea data-vscode-context='{"webviewSection": "editor", "preventDefaultContextMenuItems": true}'></textarea>
</div>
ユーザーが textarea
を右クリックした場合、次のコンテキストが設定されます。
webviewSection == 'editor'
- これは、親要素からのwebviewSection
をオーバーライドします。mouseCount == 4
- これは、親要素から継承されます。preventDefaultContextMenuItems == true
- これは、VS Code が通常 Webview コンテキストメニューに追加するコピーと貼り付けのエントリを非表示にする特別なコンテキストです。
ユーザーが <textarea>
内を右クリックすると、次が表示されます。
Webview のアクティブテーマの新しいテーマ変数
Webview の新しい data-vscode-theme-id
データ属性には、現在アクティブなテーマの ID が格納されます。これは、テーマのフルネーム (ローカライズされている可能性もあります) を追跡していた非推奨の data-vscode-theme-name
属性に代わるものです。
body[data-vscode-theme-id="One Dark Pro"] {
background: hotpink;
}
Webview で data-vscode-theme-name
を使用していた場合は、新しい data-vscode-theme-id
属性に移行してください。
非同期ノートブックレンダラー
ノートブックレンダラー API は、非同期ノートブックレンダラーをより適切にサポートするようになりました。これは以前は暗黙的にサポートされていましたが、renderOutputItem
は出力項目のレンダリング中であることを示すために Promise
を返すことができるようになりました。renderOutputItem
関数には、レンダリングがキャンセルされた場合に中止される AbortSignal も渡されるようになりました。
renderOutputItem(outputItem: OutputItem, element: HTMLElement, signal: AbortSignal): void | Promise<void>;
レンダラーが非同期処理を実行する場合は、VS Code がレンダラーをより適切にサポートできるように、これらの API 更新を採用してください。
Refactor.move Code Action kind
新しい refactor.move
Code Action kind は、コードを移動するリファクタリング (シンボルを新しいファイルに移動したり、ファイル内のコードを並べ替えたりするなど) に使用できます。
エクステンションは以前に refactor.move
kind の Code Action を作成できましたが、この kind は公式に文書化され、新しい Code Action コントロールによってサポートされるようになりました。
ビュー/タイトルのアクションに渡される選択されたツリー項目
view/title
メニューにコントリビューションされたコマンドは、2 つの引数を受け取ります。1 つ目はフォーカスされたツリーノード、2 つ目はツリー内のすべての選択された項目です。
ツリービュー initialSize コントリビューションの最終決定
package.json
でビューをコントリビューションするエクステンションは、initialSize
プロパティを使用してビューの初期サイズを設定できます。initialSize
は、CSS flex-grow
と同様に機能します。
initialSize
が適用される時期にはいくつかの制限があります。
- これは 初期 サイズのみです。ビューがレンダリングされると、
initialSize
は再度適用されません。 - エクステンションがビューとビューコンテナーの両方を所有している場合にのみ適用されます。
ツリービュー Badge の最終決定
TreeView
には、ビューのビューコンテナーに数値バッジを設定するために使用できるオプションの viewBadge
プロパティがあります。
バインドされていないブレークポイントの警告アイコン
デバッグエクステンションは、バインドされていないブレークポイントを持つアクティブなデバッグセッションがある場合にヒントメッセージを定義できるようになりました。これは、ブレークポイントビューのヘッダーと、エディターの灰色のブレークポイントアイコンにカーソルを合わせたときに表示されます。js-debug
エクステンションでの使用例を次に示します。
このメッセージは、デバッガーコントリビューションの新しい strings
プロパティで宣言できます。次に例を示します。
"strings": {
"unverifiedBreakpoints": "Message text goes here"
}
VS Code コミュニティディスカッション
エクステンション作成者向けの VS Code コミュニティディスカッション サイトが、質問をしたり、他の開発者とつながったり、優れた作品を紹介したりするための集いの場として開設されました。ここでは、VS Code API に関連する お知らせを見つけたり、質問を投稿したり、既存の回答を検索したり、エクステンションのショーアンドテルをチェックしたりできます。
提案されたAPI
すべてのマイルストーンには、新しい提案された API が付属しており、エクステンション作成者はそれらを試すことができます。いつものように、フィードバックをお待ちしています。提案された API を試す手順は次のとおりです。
- 試したい提案を見つけ、その名前を
package.json#enabledApiProposals
に追加します。 - 最新の vscode-dts を使用し、
vscode-dts dev
を実行します。対応するd.ts
ファイルがワークスペースにダウンロードされます。 - 提案に対してプログラミングできるようになりました。
提案された API を使用するエクステンションは公開できません。次のリリースで破壊的な変更が発生する可能性があり、既存のエクステンションを破壊することは決して望ましくありません。
拡張可能な JavaScript ノートブックレンダラー
組み込みの ノートブックレンダラー は、エクステンションが JavaScript コンテンツのレンダリングをカスタマイズできるようにする実験的な API を公開するようになりました。この API は現在、JavaScript コンテンツが評価される前に呼び出される単一のフック preEvaluate
を公開しています。
この実験的な API を試すには、エクステンションが vscode.builtin-renderer API を拡張する必要があります。
"contributes": {
"notebookRenderer": [
{
"id": "vscode-samples.my-custom-js-extension",
"displayName": "My custom javascript renderer extension",
"entrypoint": {
"extends": "vscode.builtin-renderer",
"path": "./out/main.js"
}
}
]
}
レンダラーは、vscode-builtin-renderer
にレンダリングフックを登録できます。
import type { RendererContext } from 'vscode-notebook-renderer';
export async function activate(ctx: RendererContext<void>) {
const builtinRenderer = await ctx.getRenderer('vscode.builtin-renderer');
if (!builtinRenderer) {
throw new Error(`Could not load 'vscode.builtin-renderer'`);
}
builtinRenderer.experimental_registerJavaScriptRenderingHook({
// Invoked before th js has been evaluated
preEvaluate(outputItem: OutputItem, element: HTMLElement, script: string, signal, signal: AbortSignal): string | undefined | Promise<string | undefined> {
// You can either modify `element` or return a new script source here
}
});
}
この新しい API を試して、ご意見をお聞かせください。
env.shell 変更のイベント
新しいイベント env.onDidChangeShell
が、エクステンションホストの検出されたデフォルトシェルである env.shell
を補完するために追加されました。
env.onDidChangeShell(newShell => {
console.log(newShell); // Same value as env.shell
});
ツリー項目のチェックボックス
提案された checkboxState
を使用すると、ツリー項目にチェックボックスを追加できます。
this.checkboxState = {
state: vscode.TreeItemCheckboxState.Unchecked,
tooltip: 'mark file as viewed'
};
API の一部としてのローカライズ
今回のイテレーションでは、エクステンションの文字列をローカライズするのに役立つ新しい API を導入しています。これは、以前にローカライズに使用されていた以前の vscode-nls
および vscode-nls-dev
モジュールを置き換えるものです。これらは引き続き機能しますが、これ以上の機能は追加されません。新しい API とツールは、使い慣れたものになるように設計されていますが、より使いやすく、より柔軟性も高くなっています。さらに、VS Code API の一部として含めることで、デスクトップ用 VS Code と Web 用 VS Code の両方でエクステンションをローカライズするためのサポートを提供できます。
VS Code エクステンションのローカライズには、4 つの重要な部分があります。
新しい vscode.l10n API
declare module 'vscode' {
export namespace l10n {
/**
* A string that can be pulled out of a localization bundle if it exists.
*/
export function t(message: string, ...args: any[]): string;
/**
* A string that can be pulled out of a localization bundle if it exists.
*/
export function t(options: {
message: string;
args?: any[];
comment: string[];
}): string;
/**
* The bundle of localized strings that have been loaded for the extension.
*/
export const bundle: { [key: string]: string };
/**
* The URI of the localization bundle that has been loaded for the extension.
*/
export const uri: Uri | undefined;
}
}
vscode.l10n 提案された API は、新しい名前空間であり、文字列をローカライズする必要があることを宣言するために使用できる単一の関数 t
を提供します。関数は、文字列または message
プロパティを持つオブジェクトで呼び出すことができます。関数は、ローカライズされた文字列が存在する場合はそれを返し、存在しない場合は元の文字列を返します。関数は、文字列の書式設定に使用できる引数と、翻訳者にコンテキストを提供するために使用できるコメントもサポートしています。
新しい API の使用例を次に示します。
import { l10n } from 'vscode';
export function activate(context: vscode.ExtensionContext) {
const message = l10n.t('Hello in {0}!', vscode.env.language);
vscode.window.showInformationMessage(message);
}
この例では、現在の言語のローカライズバンドルが存在する場合、文字列 Hello in {0}!
がローカライズされます。{0}
は現在の言語 (デフォルトでは en
、フランス語の場合は fr
、ブラジルポルトガル語の場合は pt-br
など) に置き換えられます。ローカライズバンドルが存在しない場合、文字列はそのまま返され、引数で書式設定されます。これらのローカライズバンドルがどこから来たのか疑問に思うかもしれません。次のセクションで説明します。
vscode.l10n
API は、ローカライズされた文字列のバンドルまたは文字列のバンドルへの URI へのアクセスも提供します。これは、後で説明するサブプロセスシナリオで使用することを目的としています。
重要: この API を使用する場合は、ローカライズバンドルの場所を明示的に宣言する必要もあります。これは、
package.json
にl10n
プロパティを追加することで行われます。
{
"main": "./out/extension.js",
"l10n": "./l10n"
}
l10n
プロパティは、ローカライズバンドルを含むフォルダーへの相対パスである必要があります。
@vscode/l10n-dev モジュール
@vscode/l10n-dev モジュールは、ローカライズバンドルを生成するために使用される新しいモジュールです。コマンドラインツールまたはライブラリとして使用できます。どちらも、提供されたソースコードから vscode.l10n.t(..)
呼び出しをスキャンすることにより、ローカライズバンドルを生成するために使用されます。
コマンドラインツールの使用例を次に示します。
npx @vscode/l10n-dev ./src --out ./l10n
これにより、./l10n
フォルダーに bundle.l10n.json
ファイルが配置されます。そこから、サポートするロケールごとに bundle.l10n.LOCALE.json
ファイルを作成できます。たとえば、上記のコマンドで次の bundle.l10n.json
ファイルが生成されるとします。
{
"Hello": "Hello",
"Hello {0}": "Hello {0}",
"Hello {0}/This is a comment": {
"message": "Hello {0}",
"comment": ["This is a comment"]
}
}
フランス語をサポートする場合は、bundle.l10n.fr.json
ファイルにこれを作成します。
{
"Hello": "Bonjour",
"Hello {0}": "Bonjour {0}",
"Hello {0}/This is a comment": "Bonjour {0}"
}
注: ローカライズされたバンドルにコメントは必要ありません。コメントは、元のバンドルを翻訳する翻訳者にとってのみ役立つためです。
@vscode/l10n-dev
モジュールは、XLF ファイルを生成するためにも使用できます。VS Code チームは XLF ファイルを生成し、それを Microsoft の翻訳者に提供します。翻訳者は、翻訳された XLF ファイルを返送してくれます。次に、@vscode/l10n-dev
モジュールを使用して、翻訳された XLF ファイルからローカライズされたバンドルを生成します。ローカライズプロセス全体についてより詳細に説明するブログ投稿を書く予定です。
@vscode/l10n モジュール
vscode.l10n
API はエクステンションホストでのみ利用可能なため、サブプロセスでは使用できません。このため、サブプロセスでローカライズバンドルをロードするために使用できる新しいモジュールを作成しました。モジュールは @vscode/l10n と呼ばれ、次のように使用できます。
import { l10n } from '@vscode/l10n';
// Load the translations for the current locale
l10n.config({
uri: process.env.BUNDLE_URI_FROM_EXTENSION
});
// returns the translated string or the original string if no translation is available
l10n.t('Hello World');
アイデアは、サブプロセスをスピンアップする責任があるエクステンション側のコードが、vscode.l10n.contents
または vscode.l10n.uri
API を使用して、バンドルまたはバンドルの URI をサブプロセスに渡すことです。サブプロセスは、@vscode/l10n
モジュールを使用してバンドルをロードし、t
関数を使用して文字列を翻訳できます。@vscode/l10n
モジュールで使用される t
関数も @vscode/l10n-dev
モジュールでピックアップされるため、文字列を 1 つのプロセスを使用して抽出およびローカライズできます。
package.nls.json ファイル
package.nls.json
ファイルに関して変更はありません。ローカライズする必要があるデフォルトの文字列を宣言するために引き続き使用され、package.json
の隣にある必要があります。引き続き package.nls.LOCALE.json
(LOCALE は de
や zh-cn
など) を持つことができ、ユーザーが VS Code をそのロケールに設定している場合、そのファイルで宣言された文字列が最初にピックアップされます。簡単な例を次に示します。
package.json
{
"name": "my-extension",
"version": "0.0.1",
"main": "./out/extension.js",
"l10n": "./l10n",
//...
"contributes": {
"commands": [
{
"command": "my-extension.helloWorld",
// The key is surrounded by % characters
"title": "%my-extension.helloWorld.title%"
}
]
}
}
package.nls.json
{
// That same key from the package.json
"my-extension.helloWorld.title": "Hello World"
}
package.nls.de.json
{
// That same key from the package.json
"my-extension.helloWorld.title": "Hallo Welt"
}
まとめ
確かに消化すべきことがたくさんありますが、これが VS Code エクステンションのローカライズで私たちが進んでいる方向性のアイデアを提供できれば幸いです。
完全な例に興味がある場合は、l10n-sample を確認してください。
質問やフィードバックがある場合は、次の場所でお知らせください。
- vscode.l10n の API 提案
- vscode-l10n リポジトリ (
@vscode/l10n-dev
および@vscode/l10n
モジュールのホーム)
ログ出力チャネル
vscode.window.createOutputChannel
API に、ログ専用の出力チャネルを作成するために使用できる新しい log
ブール値オプションが追加されました。
/**
* Creates a new {@link LogOutputChannel log output channel} with the given name.
*
* @param name Human-readable string which will be used to represent the channel in the UI.
* @param options Options for the log output channel.
*/
export function createOutputChannel(
name: string,
options: { readonly log: true }
): LogOutputChannel;
LogOutputChannel
は、メッセージをログに記録するための次のメソッドをサポートしています。
trace(message: string, ...args: any[]): void;
debug(message: string, ...args: any[]): void;
info(message: string, ...args: any[]): void;
warn(message: string, ...args: any[]): void;
error(error: string | Error, ...args: any[]): void;
エクステンションによって作成されたログ出力チャネルは、出力ドロップダウンビューに個別のエントリとして表示されます。このログ出力チャネルに書き込まれたメッセージは、VS Code ログメッセージと同じ形式で表されます。
エンジニアリング
"クロスオリジン分離"に向けて
VS Code デスクトップと vscode.dev のクロスオリジン分離を有効にするために変更を加えました。これにより、共有配列バッファーなどの新しい強力な機能が有効になります。VS Code 自体と、エクステンションおよび Webview もこの恩恵を受けることができます。
クロスオリジン分離は現在、機能フラグの背後にあり、有効にすると、インターネットからリソースをロードするエクステンションと Webview に望ましくない影響を与える可能性があります。詳細については、強力な機能に必要な「クロスオリジン分離」の理由を参照してください。早期にフィードバックをお寄せいただければ幸いです。
これを試すには
--enable-coi
フラグを使用して VS Code デスクトップを実行します。たとえば、code --enable-coi
など。- vscode.dev を実行し、
vscode-coi
クエリを追加します。
クロスオリジン分離が有効になっていることを確認するには、開発者ツールのアプリケーションタブを使用するか、crossOriginIsolated グローバル変数の値を確認します。
起動パフォーマンスの向上
今回のマイルストーンでは、VS Codeの起動からテキストエディターに点滅するカーソルが表示されるまでの時間を改善するためにエンジニアリング時間を確保しました。私たちは常にパフォーマンス数値を追跡しており、前回のマイルストーンの終わりにわずかな低下が見られたため、それに対処したいと考えました。
これはチーム全体の取り組みであり、全員がソースコード全体にわたる様々な変更に貢献しました。ここでは、いくつかのハイライトを紹介します。
同期的なfs呼び出しの廃止
Node.jsのfs
APIの同期的なバリアントは、ファイルシステムリクエストが解決されるまでスクリプトの実行を停止させることを理解しているため、通常は避けています。しかし、いくつかのケースでは、特に起動時のウィンドウのオープンや復元に関して、依然として同期的なfs
実行に依存していました。これらの呼び出しをすべて非同期的なバリアントに変更することができ、ファイルシステムリクエストの応答を待つ間も他のスクリプトの実行を継続できるようになりました。
メインエントリポイントのバンドルをさらに強化
VS Codeアプリケーションを構成するメインバンドルは数メガバイトのサイズで、vscode-loaderを使用して単一ファイルとしてバンドルされ、esbuildを使用してminifyされています。しかし、いくつかのケースでは、特に以下のものについてはバンドルに注力していませんでした。
- 常に最初に呼び出されるElectronメインプロセス内のNode.jsエントリポイント。
- ウィンドウを開くためのElectronレンダラープロセス内のブートストラップJavaScriptファイル。
これらの2つの領域でのバンドルにより、起動時にJavaScriptファイルを検索するコストを、Electronメインプロセスに対して1回、ウィンドウ自体に対して1回の呼び出しに削減できます。
コードの実行を後のフェーズに移行
最も効果的なパフォーマンス修正は、コードを削除して実行しないことですが、これは明らかにスケーラブルなソリューションではありません。代替案としては、テキストエディターが開いた後など、コードの実行を後のフェーズに遅らせることです。今回のマイルストーンでは、再度さまざまなコンポーネントを見直し、クリティカルな起動パスをブロックしないように、その一部を後のフェーズに移行しました。
内部ツールのドキュメント化
パフォーマンスを分析するために、ブラウザのDev ToolsやOSの検査ツールを多用しています。しかし、VS Codeに組み込まれているツールもいくつかあります。より多くの人々がこれらのツールから恩恵を受けられるように、カスタムツールをPerf Tools for VS Code Developmentでドキュメント化しました。
PRチェックの高速化
プルリクエストに対して、自動ユニットテスト、統合テスト、およびスモークテストを実行しています。これらはすべて並行して実行されますが、各ステップではTypeScriptソースをJavaScriptコードにトランスパイルする必要があります。当初は、これにTypeScriptコンパイラーを使用していました。TypeScriptコンパイラーはJavaScriptを出力しますが、型チェックも行います。後者の型チェックは時間がかかり、テストには実際には必要ありません。テストが遅延していた全体的な時間は約5分でした。その後、TypeScriptコンパイラーAPIを使用するカスタムのトランスパイル専用ソリューションに切り替えました。これにより大幅に高速化されましたが、それでも約2分かかっていました。
今回のマイルストーンでは、さらに高速なSWC (Speedy Web Compiler)に切り替えました。現在では、すべてのTypeScriptソースをトランスパイルするのに約12秒しかかかりません。これは大幅な改善であり、プルリクエストに対するフィードバックをより迅速に得られるようになりました。
注目すべき修正
- 27799 macOS: OS サービスがエディターから選択されたテキストを取得できない
- 60821 「最近使った項目」と「始めましょう」ページの最近使ったリスト間の同期を改善しました。
- 156777 プロセスエクスプローラーを開いたままにすると、5MB/分でメモリリークが発生する
- 159862 macOS Catalinaで、フルスクリーンモードの場合、交通信号ボタンの表示がずれる
- 161305 「ウィンドウ: タイトルバーのスタイル」リンクが、他のウィンドウ設定を表示しているときに機能しない
ありがとうございました
最後になりましたが、VS Codeのコントリビューターの皆様に心から感謝申し上げます。
Issue tracking (問題追跡)
Issue trackingへの貢献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Simon Chan (@yume-chan)
- RedCMD (@RedCMD)
- ArturoDent (@ArturoDent)
Pull requests (プルリクエスト)
`vscode` への貢献
- @a-stewart (Anthony Stewart)
- vscode.workspace.applyEdit は files.refactoring.autosave 設定を尊重する必要があります PR #154079
- isStandalone() チェックで windows-controls-overlay 表示モードを認識する PR #160696
- @azatsarynnyy (Artem Zatsarynnyi):
server-main.js
は--port
引数を尊重する必要があります PR #161254 - @babakks (Babak K. Shandiz):
onDidChangeShell
イベントを API に追加する PR #160900 - @Balastrong (Leonardo Montini): インラインで無効化されたブレークポイントが再アクティブ化されるケースを処理しました PR #155403
- @bvschaik (Bianca van Schaik): 複数行ファイル検索での誤った一致を修正 PR #160665
- @CKeilbar (Chris Keilbart): PREFIX 環境変数への誤った参照を削除しました PR #160909
- @Colengms (Colen Garoutte-Carson): cpp で複数行コメントの自動閉じを有効にする PR #160357
- @Gerrit0 (Gerrit Birkeland)
- TypeDoc 設定の jsonc 登録を追加する PR #157362
- typedoc.json のスキーマをデフォルトの jsonValidation に追加する PR #157592
- @gjsjohnmurray (John Murray)
- フィルターウィジェットに垂直方向の動きを許可する (#_158549) PR #158583
- markdownEnumDescriptions で ThemeIcons (codicons) をレンダリングする (#_160496) PR #160498
- ワークスペースが appRoot 内にある場合に警告バナーを表示する (#_138815) PR #161534
- @JamieMagee (Jamie Magee):
cgmanifest.json
に$schema
を追加する PR #159779 - @jeanp413 (Jean Pierre)
- 分割ターミナルごとに検索ウィジェットを表示するように修正 PR #155361
- 始めましょうウォークスルーの壊れた画像リソースを修正 PR #159144
- ports/item/context でコントリビュートされたメニューコマンド実行時のエラーを修正 PR #161295
- @juihanamshet1 (Jui Hanamshet): スニペットインライン補完アイテムにブレース補完を追加 PR #160567
- @Litrop: '[' が存在する場合、ipv6 ホストに '[' を追加しない。 PR #157009
- @MachineMitch21 (Mitch Schutt): retainContextWhenHidden が有効な場合に hideFind() および showFind() を使用する PR #161174
- @matthewjamesadam (Matt Adam): :before デコレーターのツールチップを左揃えにする PR #159226
- @MichaelChirico (Michael Chirico): R のペア演算子を改善 PR #155882
- @MonadChains (MonadChains)
- 部分的なターミナル機能ではない場合の「空のコマンド」のコマンドナビゲーションを改善 PR #155551
- explorer.excludeGitIgnore 除外バグを修正 PR #160611
- @mxschmitt (Max Schmitt): chore: macOS e2e テストで Node.js のカスタムデバッグビルドを使用する PR #161308
- @najmiehsa (Najmieh): 信頼されていないファイルを信頼されたワークスペースに追加する際のわずかな曖昧さを修正 PR #161168
- @Ninglo (Ninglo): ターミナルコントリビューションスキーマを修正 PR #160863
- @OtherHorizon (Blip blop): cpp で #if および #endif の括弧サポート PR #159997
- @pdamianik (Philip Damianik): グローバル ZDOTDIR 環境変数を使用する PR #159783
- @pingren (Ping)
- webview で data-vscode-theme-id 属性を公開、fix #149661 PR #154635
- macOS で選択テキストを非表示のテキストエリアに書き込む PR #156717
- @pkmnct (George W. Walker): git merge のアボートコマンドを追加 PR #152526
- @susiwen8 (susiwen8): feat: git fetch が指定されたリモートをフェッチするサポート PR #152197
- @tobil4sk: ターミナルで PATH 実行可能ファイルをローカルディレクトリよりも優先する PR #158666
- @trond-snekvik (Trond Einar Snekvik): プロパティ言語のデフォルトを config アイコンにする PR #158454
- @weartist (Han): fix #158498 PR #158657
- @Yoyokrazy (Michael Lively)
- ノートブックイメージのクリーンアップ自動化 PR #159212
- 貼り付けファイル名ロジックの修正 PR #159715
`vscode-css-languageservice` への貢献
- @taroken6 (AudieTaro): セレクターはコンビネーターで始まる場合があります PR #279
- @wkillerud (William Killerud): fix: パッケージルートの _index を持つスコープ付きパッケージを処理する PR #285
`vscode-pull-request-github` への貢献
- @Thomas1664: 受信変更時に常にプルするボタンを追加 PR #3896
`debug-adapter-protocol` への貢献
- @KamasamaK: 一貫性のあるスペルを使用する PR #332