🔧

VSCode 拡張機能の publisher を変更する

に公開

はじめに

VSCode 拡張機能の publisher とはその拡張の発行者を示すもので、package.jsonpublisher フィールドに設定します。
この値を変更することはそれほどありませんが、例えば個人アカウントとして発行していた拡張機能を組織アカウントに移行したいような場合に変更が必要になります。
しかし、publisher の変更は公式にはサポートされておらず、必要な情報もまとまった形では提供されていません。

今回、Verylというハードウェア記述言語向けのVSCode拡張機能の発行者を私の個人アカウントから veryl-lang という組織アカウントに変更したので、その方法をまとめておきます。

方針

まず、「publisher の変更」と書きましたが、実際には一度公開した拡張機能の publisher を変更することはできません。GitHub上を検索すると「サポートに連絡すると変更してもらえる」といった情報も見つかりますが、実際に連絡してみたところ2025年10月現在ではそういったことは行っていないようです。
そこで新しい publisher の拡張機能を新規に公開し、古い拡張機能から転送できるようにします。これは Swift や Zig といった拡張機能の移行でも取られていた方法です。

拡張機能の命名に関する制限

新しい publisher の拡張機能を公開する前に、命名の制限を把握しておく必要があります。package.jsonname displayName publisher は "それぞれ" VSCodeマーケットプレイス内でユニークである必要があります。VSCodeの拡張機能は publisher.name の形式で特定されるため、一見 publisher が異なっていれば name は重複しても良さそうに思えますが、実際には name 単体でユニークである必要があります。

displayName は拡張機能の名前としてVSCodeのプラグイン一覧やマーケットプレイスで表示される名前ですが、こちらも同名は禁止です。つまり古い拡張機能と新しい拡張機能で同じ displayName にすることはできないということです。ただし、古い拡張機能の displayName を変えれば、新しい拡張機能に元の displayName を設定することは可能です。
(実は、この2つの設定変更の間に全く関係ない第三者がその displayName を取れてしまうという問題はあります。マーケットプレイスのサポート曰く「なるべく急いで連続して公開してください」ということですが、そういったリスクのない移行方法を提供してほしい感じはします)

ということで今回移行する拡張機能の情報をまとめると以下のようになります。

  • 古い拡張機能
version: 0.16.5,
name: "vscode-veryl",
publisher: "dalance",
displayName: "Veryl"
  • 新しい拡張機能
version: 0.16.5,
name: "veryl-vscode",
publisher: "veryl-lang",
displayName: "Veryl"

古い拡張機能からの自動移行

古い拡張機能の方は extension.ts の中身を以下のように何もしないように変更し、

extension.ts
export function activate() {}

package.jsonextensionDependencies に新しい拡張機能を入れておきます。

package.json
  "activationEvents": [
    "onLanguage:veryl",
    "workspaceContains:*/Veryl.toml"
  ],
  "main": "./out/extension.js",
  "contributes": {
    "commands": [],
    "menus": {},
    "configuration": [],
    "languages": [],
    "grammars": []
  },
  "extensionDependencies": [
    "veryl-lang.veryl-vscode"
  ],

これにより、古い拡張機能を最新に更新すると、新しい拡張機能が依存関係として自動的にインストールされます。このとき contributes は全て空にして問題ありませんが、 activationEvents は設定しておかないとうまくいかないようです。

移行手順

移行手順は以下のようになります。

  • 新しい拡張機能を公開する
version: 0.1.0,
name: "veryl-vscode",
publisher: "veryl-lang",
displayName: "Veryl (New)"

displayName の重複を避けるため、一旦 (New) を付けておきます。また、バージョン番号をインクリメントしないと新しく公開できないため、最初は小さなバージョンからスタートするのがいいです。

  • 古い拡張機能の displayName を変更する
version: 0.16.6,
name: "vscode-veryl",
publisher: "dalance",
displayName: "Veryl (Deprecated)"

すでに、veryl-lang.veryl-vscode は公開済みなので、この時点で拡張機能の内容としては「古い拡張機能からの自動移行」の節で説明したものに差し替えて問題ありません。

  • 新しい拡張機能の displayName を変更する
version: 0.1.1,
name: "veryl-vscode",
publisher: "veryl-lang",
displayName: "Veryl"

displayName として "Veryl" を使えるようになったので変更します。

  • 新しい拡張機能のバージョン番号を調整
version: 0.16.5,
name: "veryl-vscode",
publisher: "veryl-lang",
displayName: "Veryl"

問題なさそうなら最後にバージョン番号を調整します。

  • VSCodeのUI上でDeprecatedにしてもらう

https://github.com/microsoft/vscode-discussions/discussions/1

こちらのスレッドにコメントすると、VSCodeのUI上で古い拡張機能がDeprecatedであることが分かるようにしてもらえます。

参考情報

最後に参考になりそうなリンクをまとめておきます。

Discussion