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