2022年9月 (バージョン 1.72)
ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap
アップデート 1.72.1: このアップデートでは、これらのセキュリティ上の問題が解決されています。
アップデート 1.72.2: このアップデートでは、これらの問題が解決されています。
Visual Studio Codeの2022年9月リリースへようこそ。このバージョンには多くのアップデートがあり、気に入っていただけることを願っています。主なハイライトの一部を以下に示します。
- ツールバーのカスタマイズ - ツールバーのアクションを非表示/表示します。
- エディターのオートスクロールの改善 - カーソルの位置に合わせてスクロール速度を調整します。
- 拡張機能ビューの更新 - 更新がある、または注意が必要な拡張機能を強調表示します。
- 検索結果をツリービューで表示 - 検索結果をリストビューまたはツリービューで確認します。
- ネストされたGitリポジトリのサポート - ネストされたGitサブモジュールを検出して表示します。
- ターミナルのクイックフィックス - コマンドの入力ミスを修正し、アップストリームのリモートを設定するための提案。
- よく使うタスクをピン留め - タスクを実行タスクドロップダウンの先頭にピン留めして、すばやくアクセスできるようにします。
- Markdownリンクの検証 - ヘッダー、ファイル、画像のリンクを自動的にチェックします。
- GitHub Enterprise Server認証 - 改善されたログインワークフローでPATが不要になりました。
- 開発コンテナー機能 - 開発コンテナーの機能を簡単に追加および共有できます。
- VS Codeコミュニティディスカッション - 他のVS Code拡張機能開発者とつながります。
これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com の 更新 にアクセスしてください。
Insiders: 新機能をいち早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。
Workbench
ツールバーからアクションを非表示にする
ツールバーからアクションを非表示にできるようになりました。ツールバーの任意のアクションを右クリックし、非表示コマンドまたはトグルコマンドを選択します。非表示のアクションは「... その他のアクション」メニューに移動し、そこから呼び出すことができます。メニューを復元するには、ツールバーボタン領域を右クリックし、メニューのリセットコマンドを選択します。すべてのメニューを復元するには、コマンドパレットからすべてのメニューをリセットを実行します (⇧⌘P (Windows、Linux Ctrl+Shift+P))。
以下のビデオでは、GitLens拡張機能のファイル注釈メニューがエディターツールバーから非表示にされ、メニューのリセットで復元されています。
マージエディター
3ウェイマージエディターの使用を選択する
受け取ったすべてのマージエディターのフィードバックを確認し、エクスペリエンス全体について検討した結果、競合が検出されたときに3ウェイマージエディターをデフォルトで表示しないことになりました (git.mergeEditor設定がfalseになりました)。この決定の理由は、issue #160806に記載されています。
競合のあるファイルの場合、ユーザーはマージエディターで解決を選択して3ウェイマージエディターを開くことができます。

CodeLens UI
ユーザーからのフィードバックでは、チェックボックスにいくつかのUX上の問題があることが示されました。チェックボックスはあまり見つけにくく、すべての可能な状態を適切に表していないため混乱を招きました。このイテレーションでは、テキストラベル (受信を受け入れる、現在を受け入れる、両方を受け入れる) を使用するCodeLens UIに切り替えました。

このデザインについては引き続き改善を重ね、すべてのフィードバックを注意深く監視していきます。
結果ファイルをゼロから再計算
前回のイテレーションでは、マージエディターを競合のあるファイルの代替ビューとして設計しようとしました。競合マーカーを表示する代わりに、個別のエディターペインに競合の詳細が表示されました。この設計には、マージエディターを開いてもディスク上のファイルが変更されず、マージエディターを開く前に行ったユーザーの変更を保持できるという利点がありました。残念ながら、これは紛らわしいだけでなく、GitのマージアルゴリズムとVS Codeのマージアルゴリズムが完全に一致しなかったため、すべての場合に機能するわけではありませんでした。
このリリースでは、競合マーカーのあるファイルがマージエディターで開かれた場合、最初のステップとして、VS Codeのマージアルゴリズムを使用して、競合マーカーを挿入せずに結果ファイルを再計算します。片側の競合は自動的に解決され、適切な競合は両方のバージョンの共通の祖先にリセットされ、未処理としてマークされます。
ベースビュー
マージエディターには、任意のサイドを共通の祖先と比較するために使用できる個別のベースビューが追加されました。
ツリービューの検索コントロールの改善
ツリービューの検索コントロールを垂直方向に移動できるようになり、その背後にある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アプリケーションフォルダー内のファイルを編集するときに、エディターに警告が表示されるようになりました。アプリケーションフォルダー内のファイルを誤って変更することはよくある間違いであり、通常は意図されたものではありません。

Editor
オートスクロール動作の改善
以前は、選択してドラッグすると、エディターはディスプレイの1秒あたりのフレーム数 (FPS) に応じてスクロールし、マウスがエディターの端に到達するとすぐにエディターが素早くスクロールすることがありました。現在、エディターは、マウスが端に近い場合は1秒あたり約1ビューポートのより管理しやすい速度で、マウスがエディターから遠い場合はより速く、FPSに関係なく自動スクロールします。
以下のビデオでは、マウスカーソルがエディターから離れて下に移動するにつれて、スクロール速度が向上します。
ホバーの改善
以前のエディターのホバーは、特にマウスがエディターの空白領域を通過するときに、非常に積極的に非表示になりました。これにより、ホバーに表示されるアクションの一部に到達することが困難でした。現在、ホバーはマウスがそれに近づいている限り表示され続けます。設定"editor.hover.sticky": falseは、以前の動作に戻します。
右側の「After」ビデオでは、ホバーからクイックフィックスを選択するのがはるかに簡単です。
新しいCode Actionグループ
Code ActionコントロールにInlineとMoveの2つの新しいグループが追加されました。
これらのグループは、refactor.inlineおよびrefactor.moveのCode Actionの種類に対応しています。
新しいCode Actionの色
このイテレーションでは、Code Actionコントロールの外観が少し異なることに気づくかもしれません。より適切なテーマカラーを使用するようにスタイリングが更新されました。最大の変更点は、コントロール本体がmenu.*ではなくeditorWidget.*の色を使用するようになったことです。
これらの色はまだ調整中ですので、特定のテーマとうまく機能しない場合や、色のカスタマイズオプションが不足している場合はお知らせください。
拡張機能
最近更新された拡張機能
VS Codeは、Extensionsビューの更新セクションの最近更新されたセクションに、過去7日間に更新された拡張機能を表示するようになりました。

注意が必要な拡張機能
VS Codeは、Extensionsビューのデフォルトのインストール済みセクションのトップに、注意が必要な拡張機能をソートして表示するようになりました。これには、保留中の更新がある拡張機能や、更新または無効化され、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を作成するためのリンクを開くことを提案します。

空きポート
既にin-useポートを使用してサーバーが起動された場合、クイックフィックスはプロセスを終了してポートを解放するアクションを提供します。

シェル統合の改善
シェル統合に以下の改善が加えられました
- 最近のコマンドを実行および最近のディレクトリに移動は、内容がある場合 (または確実に判断できない場合) は行をクリアするようになりました。
- いくつかのビルドツールと競合する可能性があった、bashスクリプトの
$PREFIX環境変数の使用を削除しました。 $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ウェブサイトの独自の目次ページに移動しました。
現在、以下の特定のトピックがあります。
- ターミナルの基本 - 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ファイル用の新しいリンク定義の整理Code Action (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アットルールを理解するようになりました。
ノートブック
ノートブックJavaScript出力がモジュールとして評価されるようになりました
ノートブックのJavaScript出力はモジュールとして扱われるようになりました。これにより、出力内で宣言された変数が他の出力に漏れることはなくなり、(const変数の場合は、競合する変数名を持つ他の出力の実行を防ぐ可能性さえあります)。
これにより、JavaScript出力内でimportを使用できるようになりました。
%%javascript
import { myFunction } from './myModules.js';
console.log(myFunction());
ノートブックのアウトラインでHTMLヘッダーがサポートされる
Markdownセル内のHTMLヘッダーが検出され、ノートブックのアウトラインビューに表示されるようになりました。

Web 用 VS Code
ブラウザのオムニボックスで「code」
GitHubリポジトリをvscode.devで簡単に開けるようにするChrome/Edgeブラウザ拡張機能が利用可能になりました。
はじめに
- Chromeウェブストアから拡張機能をインストールします。
- ブラウザの検索バーに
codeと入力してオムニボックスをアクティブにします。 - GitHubリポジトリを名前で検索し、Enterを押します。提案はブラウザの検索履歴によって入力されるため、目的のリポジトリが表示されない場合は、完全修飾の
<owner>/<repo>名を入力して開くこともできます。たとえば、microsoft/vscodeです。
以下のビデオでは、ユーザーがcode vscodeと入力してmicrosoft/vscodeリポジトリをvscode.devで開いています。
この拡張機能は、元VS CodeチームメンバーであるPine Wu氏が作成したGoto GitHub Repo Chrome拡張機能に多大な感謝を込めてインスパイアされています。
開発環境を切り替える際に変更を持ち運ぶ
https://vscode.dev/github/microsoft/vscodeのようなGitHubまたはAzure Reposリポジトリを閲覧している場合、作業を継続するコマンドを使用して、リポジトリで使用する別の開発環境を選択できます。
以前は、仮想ワークスペースにコミットされていない変更があった場合、それらをGitHubまたはAzure Reposにプッシュして、他の場所で表示する必要がありました。このマイルストーンでは、作業を継続する機能に編集セッション統合を追加したため、コミットされていない変更は、GitHub Codespaceなどのターゲット開発環境に自動的に移行されます。
以下のビデオでは、ユーザーがWeb版VS Codeを使用中にJavaScriptファイルに加えた変更が、新しいGitHub Codespaceを作成して作業に切り替えたときに適用されています。
このリリースでは、コミットされていない変更がある状態で作業を継続するを初めて使用するときに、編集セッションを使用して選択した開発環境に変更を反映させるオプションが提供されます。編集セッションは、VS Codeサービスを使用して保留中の変更を保存します。これらの変更は、ターゲット開発環境に適用されると、当社のサービスから削除されます。コミットされていない変更なしで継続することを選択した場合でも、後で"workbench.editSessions.continueOn": "prompt"設定を構成することで、この設定を変更できます。

Web版VS Codeを使用している場合、作業を継続するを使用すると、コミットされていない変更が以下の環境に移行されます。
- GitHub Codespacesの新しいクラウドホスト環境
- GitHubリポジトリの新しいローカルクローン
- 同じ仮想GitHubリポジトリを持つローカルVS Codeインスタンス
デスクトップVS Codeでリモートリポジトリ拡張機能を使用している場合、作業を継続するを使用すると、コミットされていない変更が以下の環境に移行されます。
- GitHub Codespacesのクラウドホスト環境 (GitHub Codespaces拡張機能で利用可能)
- GitHubリポジトリの新しいローカルクローン
- コンテナーボリューム内のGitHubリポジトリの新しいクローン (開発コンテナー拡張機能で利用可能)
- https://vscode.dev
- リポジトリのクローンを含む既存のローカルフォルダー
問題報告
問題の閾値を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の問題に移動し、貼り付けを要求し、拡張機能リポジトリに多くの不必要な低品質の問題を作成していました。拡張機能の問題を報告ボタンは、組み込みの問題レポーターを介して実行されるようになり、ユーザーは高品質の拡張機能の問題を提出できるようになります。
拡張機能への貢献
リモート開発
Remote Development拡張機能を使用すると、開発コンテナー、リモートマシン、またはWindows Subsystem for Linux (WSL) をフル機能の開発環境として使用できます。
Remote - WSLおよびRemote - Containers拡張機能の命名について、皆様からのフィードバックをいただきました。これらの名前に含まれるRemoteは、従来のローカル開発ではなく、「リモート」または「分離された」WSLディストリビューションまたは開発コンテナーで開発することを意味していました。しかし、これは多くの人が使用する「リモート」の別の使用方法であり、混乱を招く可能性がありました (たとえば、開発コンテナーは私のマシンにあるのか?)。
そのため、これらの拡張機能の命名と製品内のコマンドをより明確にするために更新し、それぞれWSLとDev Containersに名称変更しました。マーケットプレイスの拡張機能識別子やドキュメントなどのリンクは変更されていないため、これらの2つの拡張機能の現在の使用に問題が生じることはありません。


名称変更とともに、これらの拡張機能の機能と修正に関する作業も継続されました。Remote Developmentリリースノートで詳細を確認できます。
Dev Container Features
開発コンテナー機能を使用すると、事前にパッケージ化された機能を開発コンテナーに簡単に追加できます。GitやDockerなどのツール、GoやJavaなどのプログラミング言語のサポートなど、利用可能な機能のリストを確認し、devcontainer.jsonに追加できます。機能テンプレートを使用して、独自の機能を作成して公開し、他のユーザーと共有することもできます。
GitHub Pull Requests and Issues
GitHub Pull Requests and Issues 拡張機能は、プルリクエストとイシューの作業、作成、管理を可能にするもので、さらに進展がありました。このリリースのハイライトは以下のとおりです。
- 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 Actionsが追加されました。
- セルを新しいノートブックに移動/コピーする。
- ORステートメントを使用してセルを分割できるようにする。
label:bugのような修飾値をスニペット編集を使用して変数に抽出する。- 値セットエラーに対するスニペットベースのクイックフィックス。

ローカライズ
拡張機能は、VS Codeがサポートする13の言語に完全にローカライズされました。また、新しいローカライズAPIを使用してローカライズされた最初の拡張機能でもあり、デスクトップとウェブの両方でローカライズが機能します。
Jupyter
セルタグとスライドショー編集のサポート
ドキュメントのJSON形式を開かずに、ノートブックエディターでセルタグとスライドショーの種類を直接編集できるようになりました。
これにより、papermill用にノートブックをパラメーター化したり、nbconvert用にノートブックをカスタマイズしたりできます。

また、コマンドを介してノートブックセルのスライドショーの種類を直接更新し、ノートブックをプレゼンテーション用のスライドに変換できるようになりました。

上記の例はいずれもノートブックワークスペース編集APIを使用してセルメタデータを編集しています。他のカスタムセルメタデータの編集をサポートする方法に興味がある場合は、GitHubリポジトリ (cell-tags、slideshow) から詳細を確認できます。
インタラクティブウィンドウのコマンドインタラクションの改善
interactive.input.focusコマンドは、最も最近使用されたインタラクティブウィンドウの入力ボックスにフォーカスを与えるようになりました。以下の短いビデオでは、カスタムキーボードショートカットでコマンドが使用されています。

ノートブックのセルの削除コマンドがインタラクティブウィンドウのセルで有効になり、元に戻せるようになりました。
Pythonファイルセルの折りたたみ
Pythonファイル内の# %%マーカーで示される「セル」をエディターで折りたためるようになりました。
GitHub Enterprise Server認証のサポート
これまで、GitHub Enterprise Serverユーザーは、VS CodeでGitHub Enterprise Serverにログインするために (たとえば、GitHub Pull Requests and Issues拡張機能で使用するために)、個人アクセストークン (PAT) を手動で作成する必要がありました。これは、ユーザーがVS Codeを離れてPATを作成し、適切な権限で作成されていることを確認し、コピーしてVS Codeに貼り付ける必要がある面倒なプロセスでした。
もうその必要はありません。GitHub Enterprise Serverのログインフローはgithub.comのログインフローと同一になり、ユーザーはPATを作成することなくGitHub Enterprise Serverにログインできます。このエクスペリエンスを実際に試すには、マーケットプレイスからGitHub Pull Requests and Issues拡張機能を取得し、github-enterprise.uri設定をGitHub Enterprise Server URIに設定して、拡張機能を試してみてください。新しいエクスペリエンスを示すビデオは次のとおりです。
テーマ: パンダテーマ(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 #116740にコメントしてフィードバックをお寄せください。
設定プロファイルインジケーター
VS Codeは、アクティビティバーの下部に設定プロファイルインジケーターを表示します。デフォルトでは、プロファイル名の最初の2文字がインジケーターに表示されます。短い名前を任意の2文字、絵文字、またはコディコンにカスタマイズすることもできます。コディコンは$(codicon-id)構文を使用して参照できます。

このインジケーターをクリックすると、短い名前を変更オプションのあるメニューが表示されます。

設定プロファイルの同期
VS Codeは、VS Codeインスタンス間で設定プロファイルを同期するようになりました。
注: この機能は現在、VS Codeのインサイダーリリースでのみ利用可能です。
WebでのWebAssemblyと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拡張機能。この拡張機能は、マーケットプレイスで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"
}
リモートの場所で拡張機能をデバッグする場合 (リモート開発拡張機能のDev Containers、SSH、またはWSL経由)、--profile-tempフラグを使用すると、次のステータスメッセージが表示されることに注意してください。

これは想定される動作です。一時プロファイルには拡張機能が含まれていないため、リモート開発拡張機能も欠落しているためです。リモートシナリオの場合、空の名前付きプロファイルを作成し、それにリモート開発拡張機能を追加してから、--profile=....コマンドラインオプションを使用することをお勧めします。
ワークスペース編集APIの改善
WorkspaceEditによるノートブックの編集
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拡張機能の以下のサンプル画像のような、新しいよりシームレスなコードアクションとリファクタリングが可能になると考えています。
WorkspaceEditによるコンテンツを含むファイルの作成
WorkspaceEditを使用してファイルを作成する際に、コンテンツを指定できるようになりました。これを行うには、オプションバッグでコンテンツを渡します。
const edit = new vscode.WorkspaceEdit();
edit.createFile(newFileUri, { contents: new Unit8Array([1, 2, 3]) });
await vscode.workspace.applyEdit(edit);
寄稿されたウェブビューコンテキストメニュー
新しいウェブビューコンテキストメニューAPIにより、高度なウェブビューは、ユーザーがウェブビュー内で右クリックしたときに表示されるコンテキストメニューを簡単にカスタマイズできるようになりました。この新しい貢献点はVS Codeの通常のコンテキストメニューを使用するため、カスタムメニューはエディターの他の部分とうまく統合されます。ウェブビューは、ウェブビューの異なるセクションに対してカスタムコンテキストメニューを表示することもできます。
ウェブビューに新しいコンテキストメニュー項目を追加するには、まずmenusの新しいwebview/contextセクションに新しいエントリを追加します。各貢献はcommand (項目名もここから取得されます) とwhen句を受け取ります。when句には、コンテキストメニューが拡張機能のウェブビューにのみ適用されることを確認するために、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が通常ウェブビューのコンテキストメニューに追加するコピーと貼り付けのエントリを非表示にする特別なコンテキストです。
ユーザーが<textarea>内で右クリックすると、次のように表示されます。

ウェブビューのアクティブテーマの新しいテーマ変数
ウェブビューの新しいdata-vscode-theme-idデータ属性は、現在アクティブなテーマのIDを格納します。これは、テーマのフルネームを追跡していた (そしてローカライズされていた可能性のある) 現在非推奨のdata-vscode-theme-name属性を置き換えます。
body[data-vscode-theme-id="One Dark Pro"] {
background: hotpink;
}
ウェブビューで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の種類
新しいrefactor.move Code Actionの種類は、コードを移動するリファクタリング (シンボルを新しいファイルに移動したり、ファイル内でコードを並べ替えたりするなど) に使用できます。
以前は拡張機能がrefactor.move種類のCode Actionを作成できましたが、この種類は現在公式に文書化されており、新しいCode Actionコントロールによってサポートされています。
選択されたツリー項目がビュー/タイトルアクションに渡される
view/titleメニューに貢献されたコマンドは、2つの引数を受け取ります。1つ目はフォーカスされたツリーノード、2つ目はツリー内のすべての選択された項目です。
ツリービューのinitialSizeの貢献が確定
package.jsonでビューを寄与する拡張機能は、initialSizeプロパティを使用してビューの初期サイズを設定できます。initialSizeはCSSのflex-growと同様に機能します。
initialSizeが適用される時期にはいくつかの制限があります。
- それは初期サイズにすぎません。ビューが一度レンダリングされると、
initialSizeは再度適用されません。 - 拡張機能がビューとビューコンテナーの両方を所有している場合にのみ適用されます。
ツリービューバッジが確定
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は現在、単一のフックpreEvaluateを公開しており、これはJavaScriptコンテンツが評価される前に呼び出されます。
この実験的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
これにより、bundle.l10n.jsonファイルが./l10nフォルダーに配置されます。そこから、サポートしたいロケールごとに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モジュールで認識されるため、文字列を抽出して単一のプロセスでローカライズできます。
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のクロスオリジン分離を有効にするための変更を行いました。これにより、SharedArrayBufferなどの新しい強力な機能が利用可能になります。VS Code自体だけでなく、拡張機能やウェブビューもこの恩恵を受けます。
クロスオリジン分離は現在機能フラグの背後にあり、有効にすると、インターネットからリソースをロードする拡張機能やウェブビューに望ましくない影響を与える可能性があります。強力な機能に「クロスオリジン分離」が必要な理由でこれについて詳しく読むことができます。早期にフィードバックをお待ちしております。
これを試すには
- VS Codeデスクトップを
--enable-coiフラグ付きで実行します (例:code --enable-coi)。 - vscode.devを実行し、
vscode-coiクエリを追加します。
クロスオリジン分離が有効になっていることを確認するには、開発者ツールのアプリケーションタブを使用するか、crossOriginIsolatedグローバル変数の値を確認します。

起動パフォーマンスの向上
このマイルストーンでは、VS Codeの起動からテキストエディターに点滅カーソルが表示されるまでの起動時間を改善するためにエンジニアリング時間を確保しました。私たちは常にパフォーマンスの数値を追跡しており、前回のマイルストーンの終わりにわずかな劣化に気づき、それに対処したいと考えました。
これはチーム全体の努力であり、誰もがソースコード全体でさまざまな変更に貢献しました。いくつかのハイライトをここに示します。
同期fs呼び出しはもうない
通常、Node.jsのfs APIの同期バージョンは、ファイルシステム要求が解決されるまでスクリプトの実行を停止することを知っているため、避けています。しかし、いくつかのケースでは、特に起動時のウィンドウの開閉や復元に関して、同期fs実行に依存していました。これらの呼び出しをすべて非同期バージョンに変更することができ、ファイルシステム要求が返されるのを待つ間、他のスクリプトが実行を継続できるようにしました。
メインエントリーポイントのさらなるバンドル
VS Codeアプリケーションを構成するメインバンドルは、数メガバイトのサイズで、vscode-loaderを使用して単一ファイルにバンドルされ、esbuildを使用してミニファイされています。しかし、いくつかのケースでは、特に次の理由でバンドルに投資していませんでした。
- 常に最初に呼び出されるElectronメインプロセス内のNode.jsエントリーポイント。
- ウィンドウを開くためのElectronレンダラープロセス内のブートストラップJavaScriptファイル。
これら2つの領域でのバンドル化により、起動時のJavaScriptファイルの検索コストを、Electronメインプロセスでは1回の呼び出し、ウィンドウ自体では1回の呼び出しに削減できます。
コードを後のフェーズにプッシュする
最高のパフォーマンス修正はコードを削除して実行しないことですが、それは明らかにスケーラブルな解決策ではありません。もう1つの方法は、コードの実行を後のフェーズ、たとえばテキストエディターが開いた後に遅延させることです。このマイルストーンでは、さまざまなコンポーネントを再度見直し、クリティカルな起動パスをブロックしないように、いくつかのコンポーネントを後のフェーズにプッシュしました。
内部ツールのドキュメント化
パフォーマンスを分析するために、ブラウザの開発者ツールとOS検査ツールを多用しています。しかし、VS Codeに組み込まれているツールもいくつかあります。カスタムツールはVS Code開発のためのパフォーマンスツールに文書化されているため、より多くの人がそれらを利用できるようになりました。
PRチェックの高速化
プルリクエストの場合、自動的なユニット、統合、およびスモークテストを実行します。これらはすべて並行して行われますが、各ステップではTypeScriptソースをJavaScriptコードにトランスパイルする必要があります。元々、これにはTypeScriptコンパイラを使用していました。これはJavaScriptを生成しますが、型チェックも行います。後者は時間がかかり、テストには実際には必要ありません。テストが遅延する全体的な時間コストは、約5分でした。その後、TypeScriptコンパイラAPIを使用するカスタムのトランスパイル専用ソリューションに切り替えました。これははるかに高速でしたが、それでも約2分かかりました。
このマイルストーンでは、さらに高速なSWC (Speedy Web Compiler)に切り替えました。現在、すべてのTypeScriptソースをトランスパイルするのに約12秒かかります。これは大幅な改善であり、プルリクエストに対するフィードバックをはるかに迅速に得ることができます。
注目すべき修正点
- 27799 macOS: OSサービスがエディターから選択されたテキストを取得できない
- 60821 開いている最近の項目と「はじめに」ページの最近のリスト間の同期を改善しました。
- 156777 プロセスエクスプローラーを開いたままにすると5MB/分のメモリリークが発生する
- 159862 macOS Catalinaでフルスクリーンモード時に信号機ボタンの表示がずれる
- 161305 他のウィンドウ設定を表示しているときに「ウィンドウ: タイトルバースタイル」リンクが機能しない
ありがとうございます
最後に、VS Codeの貢献者の皆様に心からの感謝を申し上げます。
問題追跡
問題追跡への貢献者
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Simon Chan (@yume-chan)
- RedCMD (@RedCMD)
- ArturoDent (@ArturoDent)
プルリクエスト
vscodeへの貢献者
- @a-stewart (Anthony Stewart)
- vscode.workspace.applyEdit は files.refactoring.autosave config を尊重すべき PR #154079
- isStandalone() チェックで windows-controls-overlay 表示モードを認識する PR #160696
- @azatsarynnyy (Artem Zatsarynnyi):
server-main.jsは--port引数を尊重すべき PR #161254 - @babakks (Babak K. Shandiz): APIに
onDidChangeShellイベントを追加する 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 configの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
- Getting Startedのウォークスルーで壊れた画像リソースを修正 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)
- ウェブビューで data-vscode-theme-id 属性を公開し、#149661 を修正 PR #154635
- macOSで選択テキストを非表示のテキストエリアに書き込む PR #156717
- @pkmnct (George W. Walker): git merge の abort コマンドを追加 PR #152526
- @susiwen8 (susiwen8): feat: git fetch が指定されたリモートからのフェッチをサポート PR #152197
- @tobil4sk: ターミナルでPATHの実行可能ファイルをローカルディレクトリよりも優先する PR #158666
- @trond-snekvik (Trond Einar Snekvik): プロパティ言語のデフォルトを構成アイコンにする PR #158454
- @weartist (Han): #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