PJR-0M7W devcontainer の scaffold が作るシェルスクリプトの動きを、docker なしでテストする
1. 概要
specdojo-tmux.sh.sample と post-create.sh を、偽物の docker・devcontainer・sudo・curl と組み合わせて実際に動かし、PATH の追加(ssh の RemoteCommand と同じ最小の PATH で)・docker exec の利用者と tmux の引数・~/.local の持ち主の戻し方と ~/.local/bin の作成・見つからないときの案内を確かめる統合テストを足す。生成したシェルスクリプトは bash -n と shellcheck でも確かめる(2026-10-20、利用者が承認。0.4.1 の範囲)
2. 完了条件
- PJR-EJ4F の完了後に行う(EJ4F で直したサンプルの動きを確かめるため)。
- 統合テスト(
*.integration.test.ts)で、一時ディレクトリにdevcontainer scaffoldの出力を作り、次を確かめる。specdojo-tmux.sh: 偽物のdocker・devcontainer(呼ばれた引数を記録するだけのスクリプト)を置き、env -iで ssh のRemoteCommandと同じ最小の PATH にして動かす。node_bin_dirを足すと CLI が見つかること、docker execに-u nodeとtmux new-session -A -s <名前>が渡ること、devcontainerやdockerが見つからないときに PATH と確かめ方が出て終了コード 1 で終わること。post-create.sh:HOMEを一時ディレクトリにし、偽物のsudo・curl・npmなどで動かす。~/.local・~/.local/shareの持ち主を戻す呼び出しがあること、agent の CLI のインストーラより前に~/.local/binが作られること。
- 生成したシェルスクリプト(
post-create.sh・specdojo-tmux.sh.sample)をbash -nで確かめる。shellcheck が入っている環境では shellcheck でも確かめ、入っていなければ確かめを飛ばす(テストを失敗にしない)。 - テストは実際のネットワークと docker に触れない。偽物のコマンドは一時ディレクトリに作り、テストの後で消す。
- 作業を終える前に、
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 のシェルスクリプトの動きのテストを足す | DEV | done | - |
4. 対応結果
tests/src/devcontainer/scaffold.integration.test.tsを追加し、一時ディレクトリへ実際の scaffold 出力を生成して検証するようにした。specdojo-tmux.sh.sampleは偽のdocker・devcontainerと sshRemoteCommand相当の最小 PATH で実行し、node_bin_dirによる CLI の検出、停止中の devcontainer の起動、docker execの-u node、作業ディレクトリ、tmux new-session -A -s specdojoの引数を確認する。各コマンドが見つからない場合は終了コード 1 と PATH・確認方法の案内も確認する。post-create.shは偽のsudo・curl・npm・gitで実行し、${HOME}/.localと${HOME}/.local/shareを非再帰で chown する呼び出し、${HOME}/.local/binの作成、agent installer より先に同ディレクトリが存在することを確認する。- テスト中は実ネットワークと Docker daemon を使用せず、一時ディレクトリと偽コマンドは各テスト後に削除する。生成した両シェルスクリプトはテスト内で
bash -nを実行し、shellcheck がある環境では shellcheck も実行する。 - executor で一時生成した両スクリプトに対する
bash -nと shellcheck、および変更ファイルの Prettier 整形が合格した。親 runner が型検査・lint・単体テスト・統合テスト・schema 検証を実行する。 - 残課題: なし。