山pの楽しいお勉強生活

勉強の成果を垂れ流していきます

Dev ContainerでVS Codeの拡張機能がインストールされない場合に手動でインストールする

はじめに

  • VS CodeでDev Containerを使う場合、 .devcontainer/devcontainer.json拡張機能を書いておくことで自動でインストールされます
  • ただ、何らかの理由によりインストールされない場合が稀によくあります
    • 割と長くDev Container使っていますが、理由は不明です。わかる人教えてください。
    • 再度開いたりするとうまくいく場合もあるので、私の環境問題なのかもしれない
  • 私の環境は大体Python入っているのでPythonで記載

Pythonコード

import json
import subprocess
from pathlib import Path

p = Path(".devcontainer/devcontainer.json")

with open(p) as f:
    jsonc_data = f.read()
json_data = "\n".join(line for line in jsonc_data.split("\n") if not line.strip().startswith("//"))

for extension in json.loads(json_data)["customizations"]["vscode"]["extensions"]:
    subprocess.run(["code", "--install-extension", extension])

※多分バージョン関係ないですが、3.11.9で動作確認済み ※jupyter notebookで動作させる場合、 "jupyter.notebookFileRoot": "${workspaceFolder}" を設定するか、devcontainer.json のPATHを変更する必要あるかも

Bash

#!/bin/bash

# JSONC形式のファイルパス
JSONC_FILE=".devcontainer/devcontainer.json"

# コメントを削除したJSONを生成する一時ファイル
TEMP_JSON_FILE=$(mktemp)

# JSONC形式のコメントを削除してJSONに変換
grep -v '^\s*//' "$JSONC_FILE" > "$TEMP_JSON_FILE"

# VS Codeの拡張機能をインストール
extensions=$(jq -r '.customizations.vscode.extensions[]' "$TEMP_JSON_FILE")
for extension in $extensions; do
    code --install-extension "$extension"
done

# 一時ファイルを削除
rm "$TEMP_JSON_FILE"

※Chat GPTさんに作成してもらったので詳細は割愛
jq コマンドが必要

bashワンライナー

JSONC_FILE=".devcontainer/devcontainer.json"; TEMP_JSON_FILE=$(mktemp); grep -v '^\s*//' "$JSONC_FILE" > "$TEMP_JSON_FILE"; extensions=$(jq -r '.customizations.vscode.extensions[]' "$TEMP_JSON_FILE"); for extension in $extensions; do code --install-extension "$extension"; done; rm "$TEMP_JSON_FILE"

※Chat GPTさんに作成してもらったので詳細は割愛
jq コマンドが必要