はじめに
- 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
コマンドが必要