拡張機能の公開
高品質な拡張機能を作成したら、VS Code Extension Marketplace に公開することで、他のユーザーが拡張機能を見つけ、ダウンロードして使用できるようになります。あるいは、拡張機能をインストール可能な VSIX 形式にパッケージ化して、他のユーザーと共有することもできます。
このトピックでは、以下の内容を扱います。
- VS Code 拡張機能管理用の CLI ツールである vsce の使用方法
- 拡張機能のパッケージ化、公開、および非公開化
- 拡張機能の公開に必要なパブリッシャー(発行者)の登録
vsce
vsce("Visual Studio Code Extensions" の略)は、VS Code 拡張機能のパッケージ化、公開、および管理を行うためのコマンドラインツールです。
インストール
Node.js がインストールされていることを確認してください。その後、以下を実行します。
npm install -g @vscode/vsce
使用方法
vsce を使用すると、拡張機能のパッケージ化と公開を簡単に行うことができます。
$ cd myExtension
$ vsce package
# myExtension.vsix generated
$ vsce publish
# <publisher id>.myExtension published to VS Code Marketplace
vsce では、拡張機能の検索、メタデータの取得、非公開化も可能です。利用可能なすべての vsce コマンドの参照については、vsce --help を実行してください。
拡張機能の公開
セキュリティ上の懸念から、vsce はユーザーが提供した SVG 画像を含む拡張機能は公開しません。
公開ツールは以下の制約をチェックします。
package.jsonで提供されるアイコンは SVG にできません。package.jsonで提供されるバッジは、信頼されたバッジプロバイダーによるものでない限り、SVG にすることはできません。README.mdおよびCHANGELOG.md内の画像 URL は、httpsURL である必要があります。README.mdおよびCHANGELOG.md内の画像は、信頼されたバッジプロバイダーによるものでない限り、SVG にすることはできません。
Visual Studio Code は Marketplace サービスに Azure DevOps を使用しています。つまり、拡張機能の認証、ホスティング、管理は Azure DevOps を通じて提供されます。
vsce は、Personal Access Token (個人用アクセストークン) を使用してのみ拡張機能を公開できます。拡張機能を公開するには、少なくとも 1 つ作成する必要があります。
Personal Access Token の取得
Azure DevOps ポータル経由で Personal Access Token を作成できます。Personal Access Token を作成するには:
-
Azure DevOps 組織をまだお持ちでない場合は、組織の作成記事の手順に従ってください。
-
Azure DevOps ポータルにアクセスし、組織を選択します。
-
プロフィール画像の横にあるユーザー設定のドロップダウンメニューを開き、Personal access tokens を選択します。

-
Personal Access Tokens ページで、New Token を選択します。

-
新しい個人用アクセストークンの作成モーダルで、トークンの以下の詳細を選択します。
- Name: トークンに任意の名前を付けます。
- Organization: All accessible organizations
- Expiration (optional): トークンの希望する有効期限を設定します。
- Scopes: Custom defined
- Scopes セクションの下にある Show all scopes リンクをクリックします。
- Scopes リスト内で Marketplace までスクロールし、Manage スコープを選択します。

-
Create をクリックします。
新しく作成された Personal Access Token が表示されます。安全な場所にコピーしてください。パブリッシャーを作成する際に必要になります。
パブリッシャーの作成
パブリッシャーとは、Visual Studio Code Marketplace に拡張機能を公開できる ID のことです。すべての拡張機能は、package.json ファイル内に publisher 識別子を含める必要があります。
パブリッシャーを作成するには:
-
前のセクションで Personal Access Token を作成したときと同じ Microsoft アカウントでログインします。
-
左側のペインで Create publisher をクリックします。
-
新しいページで、新しいパブリッシャーの必須パラメータ(識別子と名前、それぞれ ID および Name フィールド)を指定します。
- ID: Marketplace でのパブリッシャーの一意な識別子。拡張機能の URL で使用されます。作成後の ID は変更できません。
- Name: Marketplace で拡張機能と共に表示されるパブリッシャーの一意な名前。会社名やブランド名を指定できます。
以下は、Python 拡張機能のパブリッシャー識別子と名前の例です。

-
オプションで、残りのフィールドを記入します。
-
Create をクリックします。
-
vsceを使用して新しく作成したパブリッシャーを確認します。ターミナルで以下のコマンドを実行し、プロンプトが表示されたら前の手順で作成した Personal Access Token を入力します。vsce login <publisher id> https://marketplace.visualstudio.com/manage/publishers/ Personal Access Token for publisher '<publisher id>': **************************************************** The Personal Access Token verification succeeded for the publisher '<publisher id>'.
検証が完了すれば、拡張機能を公開する準備は完了です。
拡張機能の公開
拡張機能は以下の 2 つの方法で公開できます。
-
自動的:
vsce publishコマンドを使用するvsce publish上記の
vsce loginコマンドで personal access token をまだ提供していない場合は、vsceが入力を求めます。 -
手動的:
vsce packageを使用して拡張機能をインストール可能な VSIX 形式にパッケージ化し、それを Visual Studio Marketplace パブリッシャー管理ページにアップロードする
拡張機能のインストール数と評価の確認
Visual Studio Marketplace パブリッシャー管理ページでは、各拡張機能の経時的な獲得トレンド、合計獲得数、および評価とレビューを確認できます。レポートを表示するには、拡張機能をクリックするか、More Actions > Reports を選択します。

拡張機能バージョンの自動インクリメント
拡張機能を公開する際、SemVer 互換の番号またはインクリメントするバージョン(major、minor、または patch)を指定することで、バージョン番号を自動的にインクリメントできます。例えば、拡張機能のバージョンを 1.0.0 から 1.1.0 に更新するには、以下のように指定します。
vsce publish minor
または
vsce publish 1.1.0
どちらのコマンドも、まず拡張機能の package.json の version 属性を変更し、その後更新されたバージョンで公開します。
Git リポジトリ内で vsce publish を実行すると、npm-version を介してバージョンコミットとタグも作成されます。デフォルトのコミットメッセージは拡張機能のバージョンになりますが、-m フラグを使用してカスタムコミットメッセージを指定することもできます。(現在のバージョンはコミットメッセージ内で %s として参照できます)。
拡張機能の非公開化
Visual Studio Marketplace パブリッシャー管理ページで More Actions > Unpublish をクリックすることで、拡張機能を非公開にできます。

非公開にすると、拡張機能の可用性ステータスは Unpublished (非公開) に変更され、Marketplace および Visual Studio Code からはダウンロードできなくなります。

拡張機能を非公開にしても、Marketplace は拡張機能の統計情報を保持します。その拡張機能は公開状態で検索可能であり、既存の API を通じて利用可能です。
拡張機能の削除
拡張機能は以下の 2 つの方法で削除できます。
-
自動的:
vsceのunpublishコマンドを使用するvsce unpublish <publisher id>.<extension name> -
手動的:Visual Studio Marketplace パブリッシャー管理ページから、More Actions > Remove をクリックする

どちらの場合も、拡張機能名を入力して削除を確認するよう求められます。削除アクションは元に戻せないことに注意してください。
拡張機能を削除すると、Marketplace はその拡張機能の統計情報も削除します。削除ではなく非公開にすることをお勧めします。重要!拡張機能名は Visual Studio Code Marketplace における一意の識別子です。拡張機能が削除されると、その拡張機能名は永久に予約され、元のパブリッシャーであっても再利用できません。これは、なりすましからユーザーを保護し、Marketplace エコシステムの信頼を維持するためです。拡張機能を削除する前に、その名前が不要であることを確認してください。この操作は元に戻せません。
拡張機能の非推奨化
拡張機能を単に非推奨にするか、他の拡張機能や設定を推奨して非推奨にすることができます。非推奨になった拡張機能は、UI 上でグレーアウトした取り消し線付きテキストとして表示されます。

非推奨の拡張機能は、拡張機能タイルの右下に黄色の警告アイコンが表示されます(上記のスクリーンショットを参照)。拡張機能タイルにマウスを乗せると、このアイコンの横に詳細が表示されます。
-
代替手段なしで拡張機能が非推奨になった場合

-
他の拡張機能を推奨して非推奨になった場合

-
設定を推奨して非推奨になった場合

VS Code は、既にインストールされている非推奨の拡張機能を自動的に移行またはアンインストールしません。非推奨の拡張機能に代替の拡張機能や設定がある場合、VS Code は Migrate ボタンを表示し、指定された代替手段にすばやく切り替えられるようにします。

拡張機能を非推奨としてマークするには、Deprecated extensions のディスカッションスレッドにコメントを残してください。
現時点では、拡張機能は Marketplace 上で非推奨としてレンダリングされません。この機能は今後利用可能になる予定です。
拡張機能のパッケージ化
以下のような場合には、拡張機能をパッケージ化することを選択できます。
- 自分の VS Code インスタンスでテストする。
- Marketplace に公開せずに配布する。
- 他の人と非公開で共有する。
パッケージ化とは、拡張機能を含む .vsix ファイルを作成することを意味します。このファイルは VS Code にインストール可能です。一部の拡張機能では、GitHub リリースの成果物として .vsix ファイルを公開しています。
拡張機能をパッケージ化するには、拡張機能のルートフォルダーで以下のコマンドを実行します。
vsce package
このコマンドは、拡張機能のルートフォルダーに .vsix ファイルを作成します。例:my-extension-0.0.1.vsix。
ユーザーが VS Code に .vsix ファイルをインストールするには:
-
VS Code の「拡張機能」ビューから
- 「拡張機能」ビューに移動します。
- Views and More Actions... を選択します。
- Install from VSIX... を選択します。
-
コマンドラインから
# if you use VS Code code --install-extension my-extension-0.0.1.vsix # if you use VS Code Insiders code-insiders --install-extension my-extension-0.0.1.vsix
拡張機能フォルダー
拡張機能を読み込むには、ファイルを VS Code の拡張機能フォルダー .vscode/extensions にコピーする必要があります。このフォルダーの場所は OS によって異なります。
- Windows:
%USERPROFILE%\.vscode\extensions - macOS:
~/.vscode/extensions - Linux:
~/.vscode/extensions
Visual Studio Code との互換性
拡張機能を作成する際は、その拡張機能が互換性を持つ VS Code のバージョンを指定する必要があります。これを行うには、package.json 内の engines.vscode プロパティを使用します。
{
"engines": {
"vscode": "^1.8.0"
}
}
- 値が
1.8.0(キャレットなし)の場合、拡張機能は VS Code1.8.0とのみ互換性があることを意味します。 - 値が
^1.8.0の場合、拡張機能は1.8.0以降(1.8.1、1.9.0などを含む)の VS Code と互換性があることを意味します。
engines.vscode プロパティを使用して、依存する API を含むクライアントにのみ拡張機能がインストールされるようにできます。このメカニズムは、Stable および Insiders リリースの両方でうまく機能します。
例えば、最新の VS Code Stable バージョンが 1.8.0 だとします。1.9.0 の開発中、新しい API が導入され、Insider リリースを通じて 1.9.0-insider というバージョンで利用可能になりました。この API を利用する拡張機能を公開したい場合は、バージョン依存関係に ^1.9.0 を指定する必要があります。これにより、新しい拡張機能バージョンは VS Code >=1.9.0(つまり、現在の Insiders リリースを使用しているユーザー)でのみ利用可能になります。VS Code Stable のユーザーは、Stable リリースがバージョン 1.9.0 に達したときにのみ更新を受け取ります。
高度な使用方法
Marketplace との統合
Visual Studio Marketplace での拡張機能の見え方をカスタマイズできます。例として Go 拡張機能 を参照してください。
Marketplace で拡張機能を見栄えよくするためのヒントをいくつか紹介します。
-
拡張機能の Marketplace ページに表示したい内容を記述した
README.mdファイルを、拡張機能のルートに追加します。注意package.jsonのrepositoryプロパティがパブリックな GitHub リポジトリを指している場合、vsceがそれを自動的に検出し、相対リンクを調整します(デフォルトではmainブランチを使用)。これは、vsce packageやvsce publishを実行する際に--githubBranchフラグで上書きできます。また、--baseContentUrlおよび--baseImagesUrlフラグを使用して、リンクや画像のベース URL を設定することもできます。 -
拡張機能のライセンス情報を記述した
LICENSEファイルを、拡張機能のルートに追加します。 -
拡張機能の変更履歴を記述した
CHANGELOG.mdファイルを、拡張機能のルートに追加します。 -
拡張機能のサポート方法を記述した
SUPPORT.mdファイルを、拡張機能のルートに追加します。 -
package.jsonのgalleryBanner.colorプロパティに 16 進数を指定して、Marketplace ページのバナー背景色を設定します。 -
package.jsonのiconプロパティに、拡張機能に含めた 128x128px 以上の PNG ファイルへの相対パスを指定して、アイコンを設定します。
詳細については、Marketplace Presentation Tips を参照してください。
パブリッシャーの検証
ブランドやアイデンティティに関連付けられた対象ドメインの所有権を証明することで、検証済みパブリッシャーになることができます。パブリッシャーが検証されると、Marketplace によって拡張機能の詳細ページに検証済みバッジが追加されます。
前提条件
検証済みになるには、VS Marketplace に 6 か月以上拡張機能が公開されている必要があり、かつドメインの登録も 6 か月以上経過している必要があります。検証を申請する前に、これらの基準が満たされていることを確認してください。

パブリッシャーを検証するには:
-
左側のペインで、検証したいパブリッシャーを選択または作成します。
-
メインペインで、Details タブを選択します。

-
Details タブの Verified domain セクションに、対象ドメインを入力します。

注: 入力を開始すると、Details タブタイトルの横にアスタリスク (*) が表示されます。VS Code と同様に、これは変更が保存されていないことを示します。このため、Verify ボタンはまだ無効になっています。
-
Save を選択してから Verify を選択します。

ダイアログウィンドウが開き、ドメインの DNS 設定に TXT レコードを追加する手順が表示されます。

-
手順に従って、ドメインの DNS 設定に TXT レコードを追加します。
-
ダイアログウィンドウで Verify を選択し、TXT レコードが正常に追加されたか検証します。

TXT レコードが検証されると、Marketplace チームがリクエストをレビューし、5 営業日以内に結果を通知します。検証には、ドメイン、Web サイト、および拡張機能の実績に関する前提条件、コンテンツの適格性、正当性、信頼性、および肯定的な評判が含まれます(ただしこれらに限定されません)。
検証に合格すると、Visual Studio Marketplace パブリッシャー管理ページ上のパブリッシャー名の横に対応するバッジが表示されます。

注記:
- パブリッシャーの表示名を変更すると、検証済みバッジは取り消されます。
- 今後の利用規約への違反や、上記の検証要件への違反があった場合も、検証済みバッジは取り消されます。
対象ドメイン
対象となるドメインは、以下の条件を満たしている必要があります。
- DNS 設定を管理し、TXT レコードを追加できること。
- サブドメイン({subdomain}.github.io, {subdomain}.contoso.com など)ではないこと。
- HTTPS プロトコルを使用していること。
- HEAD リクエストに対して HTTP 200 ステータスで応答できること。
拡張機能の価格ラベル
拡張機能の Marketplace ページに Free (無料) または Free Trial (無料トライアル) という価格ラベルを表示するように選択できます。
価格ラベルを表示するには、package.json に pricing プロパティを追加します。例:
{
"pricing": "Free"
}
指定可能な値は Free および Trial です(大文字と小文字を区別します)。pricing プロパティが指定されていない場合、デフォルト値は Free です。
価格ラベルを機能させるには、拡張機能の公開時に vsce バージョン 2.10.0 以上を使用してください。
拡張機能のスポンサー
スポンサーシップを有効にして、ユーザーがあなたの活動を支援できるようにすることができます。
スポンサーリンクを表示するには、package.json に sponsor プロパティを追加します。例:
"sponsor": {
"url": "https://github.com/sponsors/nvaccess"
}
スポンサーシップを機能させるには、拡張機能の公開時に vsce バージョン 2.9.1 以上を使用してください。
スポンサーリンクは、Marketplace の拡張機能ページおよび VS Code の拡張機能詳細ヘッダーに表示されます。

これにより、ユーザーが依存している拡張機能に資金提供を行い、拡張機能のパフォーマンス、信頼性、安定性が向上することを期待しています。
.vscodeignore の使用
.vscodeignore ファイルを作成することで、特定のファイルを拡張機能のパッケージから除外できます。このファイルは、1 行に 1 つずつ、glob パターンのコレクションを記述します。例:
**/*.ts
**/tsconfig.json
!file.ts
実行時に不要なファイルはすべて無視する必要があります。例えば、拡張機能が TypeScript で記述されている場合、上記の例のように **/*.ts ファイルをすべて無視すべきです。
devDependencies にリストされている開発依存関係は自動的に無視されるため、明示的に追加する必要はありません。
公開前のステップ
マニフェストファイルに公開前のステップを追加できます。これは拡張機能がパッケージ化されるたびに呼び出されます。例えば、この段階で TypeScript コンパイラを呼び出すことができます。
{
"name": "uuid",
"version": "0.0.1",
"publisher": "someone",
"engines": {
"vscode": "0.10.x"
},
"scripts": {
"vscode:prepublish": "tsc"
}
}
プレリリース拡張機能
ユーザーは VS Code または VS Code Insiders で拡張機能のプレリリース版をインストールし、公式リリース前に最新の拡張機能バージョンを定期的に受け取ることができます。

プレリリース版を公開するには、vsce package または vsce publish コマンドに --pre-release フラグを渡します。
vsce package --pre-release
vsce publish --pre-release
拡張機能のバージョンは major.minor.patch のみサポートされており、semver のプレリリース用タグはサポートされていません。プレリリース版と通常版の間でバージョンは異なる必要があります。つまり、1.2.3 がプレリリースとしてアップロードされた場合、次の通常版は 1.2.4 のように異なるバージョンでアップロードする必要があります。完全な semver サポートは今後提供される予定です。
VS Code は拡張機能を最新の利用可能なバージョンに自動更新します。そのため、ユーザーがプレリリース版を選択していても、より高いバージョン番号を持つ公式リリースがあれば、ユーザーはそのリリース版に更新されます。したがって、リリース版には major.EVEN_NUMBER.patch を、プレリリース版には major.ODD_NUMBER.patch を使用することをお勧めします。例:リリース用には 0.2.*、プレリリース用には 0.3.*。
プレリリースユーザーがリリース版に更新されることを避けたい場合は、常にプレリリース版を先にインクリメントして公開し、プレリリース版のバージョンが常に高い状態を保つことをお勧めします。なお、プレリリースユーザーは、より高いリリース版があれば更新されますが、その後さらに高いバージョン番号を持つプレリリースが公開されれば、自動的にそのプレリリースに更新されます。
プレリリース拡張機能は VS Code バージョン 1.63.0 以降でサポートされているため、すべてのプレリリース拡張機能は package.json の engines.vscode 値を >= 1.63.0 に設定する必要があります。
既にスタンドアロンのプレリリース拡張機能を持っている場合は、VS Code チームに連絡して、古い独立した拡張機能の自動アンインストールと、メイン拡張機能のプレリリース版へのインストールを有効にしてください。
プラットフォーム固有の拡張機能
VS Code が動作する各プラットフォーム(Windows, Linux, macOS)ごとに、拡張機能の VSIX パッケージを公開できます。このような拡張機能をプラットフォーム固有 (platform-specific) と呼びます。
バージョン 1.61.0 から、VS Code は現在のプラットフォームと一致する拡張機能パッケージを探すようになりました。
プラットフォーム固有の拡張機能は、拡張機能がプラットフォーム固有のライブラリや依存関係を持つ場合に有用であり、パッケージに含まれるバイナリを正確に制御できます。一般的なユースケースは ネイティブノードモジュール の使用です。
プラットフォーム固有の拡張機能は、プラットフォーム固有のコンテンツを含む別々のパッケージとして公開されます。--target フラグを渡すことで、ターゲットプラットフォームを指定できます。このフラグを渡さない場合、そのパッケージはプラットフォーム固有のパッケージを持たないすべてのプラットフォームのフォールバックとして使用されます。
現在利用可能なプラットフォームは、win32-x64、win32-arm64、linux-x64、linux-arm64、linux-armhf、alpine-x64、alpine-arm64、darwin-x64、darwin-arm64、および web です。
プラットフォーム固有の拡張機能がブラウザ上で Web 拡張機能 として動作することもサポートしたい場合は、公開時に 必ず web プラットフォームをターゲットにする必要があります。web プラットフォームは package.json の browser エントリポイントを尊重します。Web でサポートされていない拡張機能機能を無効にするには、Web 用に別の package.json を出荷したり VSIX の一部を削除したりするのではなく、package.json で when 句を使用することをお勧めします。
公開
バージョン 1.99.0 以降、vsce は VSIX のパッケージ化および公開時にターゲットプラットフォームを指定できる --target パラメータをサポートしています。
以下は、win32-x64 および win32-arm64 プラットフォーム用の VSIX を公開する方法です。
vsce publish --target win32-x64 win32-arm64
あるいは、パッケージ化時に --target フラグを使用してプラットフォーム固有の VSIX を作成することもできます。例えば、win32-x64 プラットフォーム用の VSIX をパッケージ化してから公開するには:
vsce package --target win32-x64
vsce publish --packagePath PATH_TO_WIN32X64_VSIX
継続的インテグレーション
複数のプラットフォーム固有の VSIX を管理するのは大変になる可能性があるため、継続的インテグレーション (CI) ツールを使用して拡張機能のビルドプロセスを自動化することをお勧めします。例えば、GitHub Actions を使用して拡張機能をビルドできます。私たちの platform-specific extension sample が学習の出発点として役立ちます。この ワークフロー では、プラットフォーム固有の拡張機能サポートを使用して、サポートされているすべての VS Code ターゲットに依存関係としてネイティブノードモジュールを配布するという一般的なシナリオを有効にしています。
次のステップ
- Extension Marketplace - VS Code の公開 Extension Marketplace についての詳細。
- Testing Extensions - 拡張機能プロジェクトにテストを追加して、品質を確保する。
- Bundling Extensions - webpack を使用して拡張機能ファイルをバンドルし、読み込み時間を改善する。
よくある質問
拡張機能を公開しようとすると "You exceeded the number of allowed tags of 30" というエラーが出ます?
Visual Studio Marketplace では、拡張機能パッケージの package.json に 30 個を超える keywords を指定することはできません。このエラーを避けるため、キーワード/タグの数を最大 30 個までに制限してください。
拡張機能を公開しようとすると 403 Forbidden (または 401 Unauthorized) エラーが出ます?
PAT (Personal Access Token) 作成時に犯しやすいミスは、Organizations フィールドのドロップダウンで All accessible organizations ではなく特定の組織を選択してしまうことです。もう 1 つの可能性はスコープが正しくないことです。公開を機能させるには、認証済みスコープを Marketplace (Manage) に設定する必要があります。
vsce ツールから拡張機能を非公開にできません?
拡張機能 ID またはパブリッシャー ID を変更した可能性があります。Visual Studio Marketplace パブリッシャー管理ページから直接拡張機能を管理することもできます。例えば、更新や非公開化などです。
なぜ vsce はファイル属性を保持しないのですか?
Windows から拡張機能をビルドおよび公開する場合、拡張機能パッケージに含まれるすべてのファイルには、POSIX ファイル属性(実行可能ビット)が欠落することに注意してください。一部の node_modules 依存関係は、正常に機能するためにそれらの属性に依存しています。Linux や macOS からの公開は期待通りに動作します。
継続的インテグレーション (CI) ビルドから公開できますか?
はい。継続的インテグレーション (Continuous Integration) トピックの「自動公開 (Automated publishing)」セクションを参照して、Azure DevOps、GitHub Actions、GitLab CI を設定して拡張機能を自動的に公開する方法を学んでください。
拡張機能を公開しようとすると "ERROR The extension 'name' already exists in the Marketplace" というエラーが出ます?
Marketplace では、すべての拡張機能について 拡張機能名 が一意である必要があります。Marketplace に同じ名前の拡張機能が既に存在する場合、以下のエラーが発生します。
ERROR The extension 'name' already exists in the Marketplace.
同じルールが拡張機能の 表示名 にも適用されます。
サポートされているパッケージマネージャーは何ですか?
拡張機能の依存関係の管理には、npm または yarn v1 を使用できます。
VS Marketplace アカウントや拡張機能の公開に関するサポートが必要な場合は?
VS Marketplace サポートチームには、Manage Publishers & Extensions にサインインし、右上にある「Contact Microsoft」リンクをクリックして問い合わせることができます。