devcontainer-bootstrap
使いどころ
- •任意リポジトリに Dev Container を素早く導入したいとき
- •既存
.devcontainer/を壊さず拡張したいとき(バックアップ必須) - •Node/Python/Rust の代表的セットアップをテンプレで貼りたいとき
ワークフロー((1) scan → (2) detect → (3) apply/update → (4) explain)
- •scan: リポジトリルートを確認し、スタック候補ファイルをチェック
- •detect:
scripts/detect_stack.shでnode|python|rust|unknownを判定(複数命中や go.mod のみは unknown → stack を明示指定) - •apply/update:
scripts/apply_devcontainer.shを実行し.devcontainer/を生成/更新 - •explain: 実行ログを読み、何がバックアップ/更新されたかをユーザーに伝える。競合や手動フォローが必要なら明示
実行オプション(チャットで指定可能)
- •
stack:auto|node|python|rust(default auto, 複数命中や go.mod のみは unknown → stack 指定を促す) - •
packageManager:npm|pnpm|yarn(node のみ、postCreate で install 実行) - •
mode:safe|overwrite- •safe: 既存
devcontainer.jsonをマージ(extensions/settings/features/postCreateCommand)。jq無しでも最小追記(postCreate 実行を確実に追加)。既存 Dockerfile は保持。 - •overwrite: stack テンプレートで
devcontainer.jsonとDockerfileを置換。
- •safe: 既存
- •
includeTools:true|false(default false)- •true の場合、追加 feature として git / github-cli を組み込む(上書きではなくマージ)。
- •
addCI:true|false(default false)- •GitHub Actions 最小 workflow (
.github/workflows/devcontainer-bootstrap.yml) を生成。safe で既存があればバックアップのみしてスキップ、overwrite なら置換。
- •GitHub Actions 最小 workflow (
手順(ローカル実行例)
bash
# 1. スタック自動判定(複数命中なら unknown) bash skills/devcontainer-bootstrap/scripts/detect_stack.sh . # 2. safe モードで適用(自動判定 + 追記中心) bash skills/devcontainer-bootstrap/scripts/apply_devcontainer.sh --mode safe # 3. node + pnpm で overwrite し CI も生成 bash skills/devcontainer-bootstrap/scripts/apply_devcontainer.sh --stack node --package-manager pnpm --mode overwrite --include-tools true --add-ci true
生成/更新内容
- •
.devcontainer/(devcontainer.json, Dockerfile, postCreate.sh)。既存があれば.devcontainer.bak-<timestamp>/にバックアップしてから更新。 - •VS Code 推奨設定と拡張は
customizations.vscodeに記述(参考: Dev Container supporting tools)。 - •postCreate は stack に応じて依存導入をベストエフォートで実行(失敗は非致命)。
- •
addCI=trueの場合、devcontainers/ci@v0.3.1900000417を使う最小 workflow を生成。 - •Node テンプレートは
mcr.microsoft.com/devcontainers/typescript-node:<メジャー>を使用(latest は避け、例:24)。LTS 更新時はメジャー番号タグを明示的に上げる。 - •Node イメージタグの選定はコードベースの情報を参照して行う
- •優先順:
.nvmrc→.node-version→package.jsonのengines.node - •いずれも無い場合はレジストリ (
https://mcr.microsoft.com/v2/devcontainers/typescript-node/tags/list) から最新メジャーを確認し、latest は避けてメジャー番号タグを使う
- •優先順:
- •Python テンプレートは
mcr.microsoft.com/devcontainers/python:<バージョン>を使用(latest は避け、デフォルト例:3.14)- •優先順:
.python-version→pyproject.tomlのrequires-pythonまたはtool.poetry.dependencies.python→requirements.txtに併記された Python バージョン記述 - •いずれも無い場合はレジストリ (
https://mcr.microsoft.com/v2/devcontainers/python/tags/list) を参照して安定版メジャー/マイナーを選ぶ(latest は避ける)
- •優先順:
競合・注意
- •複数スタックが同時に検出された場合や go.mod のみの場合は
stackを明示する。 - •safe モードでマージできない部分があればログに警告を出す。壊したくない場合は safe を優先。
- •危険な
git config --global safe.directory '*'は一切実行しない。 - •詳細な判断基準や safe/overwrite の使い分けは
docs/decision-guide.mdを参照。
バンドル済みリソース
- •
scripts/detect_stack.sh: スタック判定(node/python/go/unknown) - •
scripts/apply_devcontainer.sh: テンプレ適用 & 安全更新 & CI 生成 - •
templates/: stack 別devcontainer.json/Dockerfile(node/python/rust) + 共通postCreate.sh - •
docs/decision-guide.md: 判定ルール・バックアップ方針・safe/overwrite の違い・よくある罠