DEV Community

Fomalhaut Weisszwerg
Fomalhaut Weisszwerg

Posted on

VSCode の拡張機能のバージョンを固定し、指定以外を無効化する方法

TL;DR

VSCode のグローバル設定ファイルに "extensions.allowed" を追加します。

"extensions.allowed" が設定されている場合、VSCode は指定外の拡張機能を問答無用で無効 or インストール拒否するようになります。

設定例

   "extensions.allowed": {
        "davidanson.vscode-markdownlint": ["0.60.0"],
        "ms-python.black-formatter": ["2025.2.0"],
        "ms-python.debugpy": ["2025.10.0"],
        "ms-python.isort": ["2025.0.0"],
        "ms-python.python": ["2025.12.0"],
        "ms-python.vscode-pylance": ["2025.7.1"],
        "ms-python.vscode-python-envs": ["1.2.0"]
    }
Enter fullscreen mode Exit fullscreen mode

なんで extensions.allowed を設定する必要があるの?

拡張機能の自動更新を無効化 ( "extensions.autoUpdate": false ) したので安心という人をちらほら見かけますが、そうとはいえません。この設定は VSCode が 拡張機能を更新する処理を行わないというだけのものだからです。

ユーザが手動で更新することはもちろん、Shai-Hulud のような攻撃プログラムが更新したり不正な拡張機能をインストールすることを防ぐことはできない設定なのです。

"extensions.allowed" を設定するとどうなるの?

指定された拡張機能の指定されたバージョンを除いてインストールおよび実行できなくなります。インストールしようとした場合は拒否されます。

vscode_reject_not_allowed_extension

ファイルを強引に置き換える・書き換えるなどの方法で指定されたバージョンとは違うものにされたり、指定されていない拡張機能が突っ込まれた場合は、その拡張機能が問答無用で無効化されます。

vscode_disables_not_allowed_extension

どうやって設定するの?

VSCode のグローバル設定ファイルに "extensions.allowed" を追加します。
OS ごとのグローバル設定ファイルは下記の通り

  • Windows の場合
    • %APPDATA%\Code\User\settings.json
  • Linux の場合
    • ${HOME}/.config/Code/User/settings.json

設定前のファイルが下記の場合

{
    "editor.renderWhitespace": "boundary",
    "editor.wordWrap": "on",
    "editor.codeLens": true,
    "editor.folding": true,
    "editor.fontFamily": "'Intel One Mono', 'Zx Proto', 'Noto Sans Mono', monospace, 'Droid Sans Fallback'",
    "editor.fontLigatures": false,
    "editor.fontSize": 14,
    "editor.inlineSuggest.enabled": true,
    "editor.matchBrackets": "always",
    "editor.minimap.showSlider": "always",
    "explorer.fileNesting.enabled": true,
    "files.eol": "\n",
    "window.restoreFullscreen": false,
    "window.restoreWindows": "none",
    "workbench.editor.enablePreview": false,
    "workbench.tree.indent": 24,
    "workbench.tree.renderIndentGuides": "always",
    "workbench.colorTheme": "Default Dark Modern",
    "aws.suppressPrompts": {
        "regionAddAutomatically": true
    },
    "firedbg.showWelcome": false,
    "workbench.startupEditor": "none",
    "files.saveConflictResolution": "overwriteFileOnDisk",
    "github.copilot.editor.enableAutoCompletions": true,
    "github.copilot.nextEditSuggestions.enabled": true,
    "diffEditor.hideUnchangedRegions.enabled": true,
    "remote.defaultExtensionsIfInstalledLocally": [
        "GitHub.copilot",
        "GitHub.copilot-chat",
        "GitHub.vscode-pull-request-github"
    ],
    "python.defaultInterpreterPath": "/opt/python-3.13",
}
Enter fullscreen mode Exit fullscreen mode

わたしが使用している VSCode 拡張機能を "extensions.allowed" に指定する settings.json の変更は下記のようになりました

--- settings.json.orig  2025-09-19 17:00:19.242401486 +0900
+++ settings.json       2025-09-19 16:48:59.935165856 +0900
@@ -32,5 +32,57 @@
         "GitHub.copilot-chat",
         "GitHub.vscode-pull-request-github"
     ],
-    "python.defaultInterpreterPath": "/opt/python-3.13"
+    "python.defaultInterpreterPath": "/opt/python-3.13",
+    "extensions.allowed": {
+        "amazonwebservices.amazon-q-vscode": ["1.94.0"],
+        "amazonwebservices.aws-toolkit-vscode": ["3.74.0"],
+        "davidanson.vscode-markdownlint": ["0.60.0"],
+        "docker.docker": ["0.16.0"],
+        "george-alisson.html-preview-vscode": ["0.2.5"],
+        "github.copilot": ["1.372.0"],
+        "github.copilot-chat": ["0.31.0"],
+        "github.vscode-github-actions": ["0.27.2"],
+        "gitlab.gitlab-workflow": ["6.43.2"],
+        "golang.go": ["0.50.0"],
+        "google.geminicodeassist": ["2.49.0"],
+        "googlecloudtools.cloudcode": ["2.36.0"],
+        "hashicorp.terraform": ["2.36.3"],
+        "maelvalais.autoconf": ["0.2.0"],
+        "modular-mojotools.vscode-mojo": ["25.5.0"],
+        "ms-azuretools.vscode-containers": ["2.1.0"],
+        "ms-azuretools.vscode-docker": ["2.0.0"],
+        "ms-playwright.playwright": ["1.1.15"],
+        "ms-python.black-formatter": ["2025.2.0"],
+        "ms-python.debugpy": ["2025.10.0"],
+        "ms-python.isort": ["2025.0.0"],
+        "ms-python.python": ["2025.14.0"],
+        "ms-python.vscode-pylance": ["2025.8.1"],
+        "ms-python.vscode-python-envs": ["1.8.0"],
+        "ms-toolsai.jupyter": ["2025.8.0"],
+        "ms-toolsai.jupyter-keymap": ["1.1.2"],
+        "ms-toolsai.jupyter-renderers": ["1.3.0"],
+        "ms-toolsai.vscode-jupyter-cell-tags": ["0.1.9"],
+        "ms-toolsai.vscode-jupyter-slideshow": ["0.1.6"],
+        "ms-vscode-remote.remote-containers": ["0.427.0"],
+        "ms-vscode-remote.remote-ssh": ["0.120.0"],
+        "ms-vscode-remote.remote-ssh-edit": ["0.87.0"],
+        "ms-vscode.cmake-tools": ["1.21.36"],
+        "ms-vscode.cpptools": ["1.26.5"],
+        "ms-vscode.cpptools-extension-pack": ["1.3.1"],
+        "ms-vscode.cpptools-themes": ["2.0.0"],
+        "ms-vscode.live-server": ["0.4.16"],
+        "ms-vscode.makefile-tools": ["0.12.17"],
+        "ms-vscode.remote-explorer": ["0.5.0"],
+        "ms-vscode.vscode-typescript-next": ["6.0.20250916"],
+        "ms-vsliveshare.vsliveshare": ["1.0.5959"],
+        "ritwickdey.liveserver": ["5.7.9"],
+        "rust-lang.rust-analyzer": ["0.3.2593"],
+        "seaql.firedbg-rust": ["0.1.14"],
+        "tamasfe.even-better-toml": ["0.21.2"],
+        "twxs.cmake": ["0.0.17"],
+        "unifiedjs.vscode-mdx": ["1.8.17"],
+        "visualstudioexptteam.intellicode-api-usage-examples": ["0.2.9"],
+        "visualstudioexptteam.vscodeintellicode": ["1.3.2"],
+        "yzane.markdown-pdf": ["1.5.0"]
+    }
 }
Enter fullscreen mode Exit fullscreen mode

Linux ユーザの場合は settings.json ファイルの編集が終わったら所有者と permission を変更し、権限昇格の脆弱性を付いた別の攻撃を受けない限りは変更されないようにしましょう

sudo chown root:root ${HOME}/.config/Code/User/settings.json
sudo chmod 644 ${HOME}/.config/Code/User/settings.json
Enter fullscreen mode Exit fullscreen mode

拡張機能の UID とバージョン情報を調べるのが面倒

簡単にリストアップする方法があります。
こちら をご覧ください。

Top comments (0)