PJR-3RXY ホストで本物の devcontainer を作って確かめる E2E のスクリプトを用意する
1. 概要
ホストの Mac(docker と Dev Container CLI がある)で実行し、一時ディレクトリに scaffold した devcontainer を devcontainer up で作り、devcontainer exec で利用者が node であること、~/.local/bin が node の持ち物であること、tmux・vim・emacs と agent の CLI が入ったことを確かめ、最後に container と volume を片づけるスクリプトを用意する。開発用の container には docker を入れない(agent にホストの権限を与えないため。2026-10-20、利用者が案 C を選んだ)
2. 完了条件
tools/e2e/に、ホストで実行する E2E のスクリプトを置き、package.jsonを変えずにnode --import tsx tools/e2e/<名前>.tsなどで起動できるようにする(package.jsonに script を足す場合は、案を result に書き、人が反映する)。- スクリプトは次を行う。
- 一時ディレクトリに空のリポジトリを作り、手元の specdojo(
npm packの tarball または dist)でinit --yes --provider claude --devcontainer(推奨の preset)を行う。 devcontainer upで container を作り、devcontainer execで、利用者がnodeであること、~/.local/binが node の持ち物であること、tmux・vim・emacs が入っていること、Claude Code の CLI が~/.local/binに入ったことを確かめる。- 結果を項目ごとに表示し、どれかが失敗したら終了コード 1 で終わる。
- 最後に、作った container・image・volume を片づける(
--keepを指定したときは残す)。
- 一時ディレクトリに空のリポジトリを作り、手元の specdojo(
- docker と Dev Container CLI が見つからないときは、確かめ方を表示して終わる。
- スクリプトの使い方を specdojo:remote-host-development-guide か開発用の文書に書く。
- executor の sandbox には docker がないため、スクリプトの実行は
requires_humanとし、利用者がホストで流して結果を個票に残す。 - 作業を終える前に、
npm run typecheck・npm run lint:ts・npm run test:unitを実行して通す。 - 親の検証(lint-ts・lint-fm・lint-md・typecheck・test-unit・test-integration・validate-schema)が通る。
- CHANGELOG には記載しない(開発用のスクリプトのため)。
3. 作業内容
| No | 作業 | 担当 | 状態 | メモ |
|---|---|---|---|---|
| 1 | ホストで動かす devcontainer の E2E のスクリプトを用意する | DEV | done | tools/e2e/devcontainer-host-e2e.ts |
4. 対応結果
tools/e2e/devcontainer-host-e2e.tsを追加した。手元のソースを npm tarball にし、一時リポジトリでinit --yes --provider claude --devcontainer、devcontainer up、devcontainer execによる項目別検査を行う。- remote user と
~/.local/binの所有者がnodeであること、tmux・Vim・Emacs・Claude Code CLI が導入されること、および開発用コンテナに Docker CLI がないことを検査する。 - 通常終了時と異常終了時に container・名前付き volume・新規 container image・一時ディレクトリを片づけ、
--keep指定時だけ調査用に残す。 - 常時稼働ホスト運用ガイド に実行方法と前提条件を追記した。
- executor の sandbox では Docker を利用できないため、Mac ホストでの実行結果の記録は利用者による確認を要する。