PJR-P08H devcontainer scaffold が親ディレクトリをマウントせずプロダクトリポジトリが見えない
1. 課題内容
templates/devcontainer/devcontainer.json に workspaceMount が無く、生成したコンテナからは app1-specdojo/ しか見えない。../app1 と ../app1-specdojo-worktrees を使えるよう、親ディレクトリをマウントする。
2. 影響範囲
| 観点 | 影響 |
|---|---|
| スコープ | devcontainer scaffold の生成物(devcontainer.json、post-create.sh)と関連文書 |
| スケジュール | PJR-ZGJ4 と、repos を使う exec の前提になる |
| コスト | テンプレートと scaffold の小規模な変更 |
| 品質 | 生成コンテナで repos を宣言すると、設定の読み込みが「path が存在しない」エラーになる。worktree はコンテナ内の永続化されない場所に作られる |
| 関係者 | 別リポジトリ構成(app1/ と app1-specdojo/)で Dev Container を使う利用者 |
3. 対応方針
| 項目 | 内容 |
|---|---|
| 原因 | templates/devcontainer/devcontainer.json に workspaceMount が無く、既定のマウントが開いたフォルダ(app1-specdojo/)だけになる |
| 対応策 | SpecDojo 本体の .devcontainer/devcontainer.json と同じく、親ディレクトリを workspaceMount でマウントし、workspaceFolder をその配下のプロジェクトリポジトリに向ける |
| 依存事項 | なし |
| 完了条件 | 下記「完了条件」のとおり |
3.1. 完了条件
devcontainer scaffoldが生成するdevcontainer.jsonが、workspaceMountで${localWorkspaceFolder}/..をマウントする。- 生成した
devcontainer.jsonのworkspaceFolderが、マウントした親ディレクトリ配下のプロジェクトリポジトリ(${localWorkspaceFolderBasename})を指す。 - 生成した
post-create.shが、親ディレクトリ配下の Git リポジトリ(app1/と worktree 置き場を含む)をsafe.directoryへ登録する。またはプロジェクトリポジトリ以外を登録しない理由を文書に残す。 - 上記を
tests/devcontainer-scaffold.test.tsの unit test で確かめる。 remote-host-development-guideとcommand-referenceのdevcontainer scaffoldの説明に、親ディレクトリをマウントすること、その理由(reposとworktree_baseがプロジェクトリポジトリの外にあること)、ホストの親ディレクトリにある他のファイルもコンテナから見えることを書く。- CHANGELOG に記載する。
npm run typecheck、npm run lint:ts、npm run test:unit、npm run lint:mdが通る。
3.2. 作業内容
templates/devcontainer/devcontainer.jsonまたはsrc/devcontainer-scaffold.tsにworkspaceMountとworkspaceFolderを加える。templates/devcontainer/post-create.shのsafe.directoryの登録を、親ディレクトリ配下へ広げるか判断して反映する。- unit test と文書を更新する。
- SpecDojo 本体の
.devcontainer/は変更しない(すでに親ディレクトリをマウントしている)。
4. 対応結果
- 解決内容:
devcontainer scaffoldのテンプレートへ、${localWorkspaceFolder}/..を/workspaces/specdojo-workspaceに bind mount するworkspaceMountと、${localWorkspaceFolderBasename}を使うworkspaceFolderを追加した。これにより、別リポジトリ構成の../app1と../app1-specdojo-worktreesを生成コンテナから参照できる。 - Git 設定: 生成する
post-create.shが、プロジェクトリポジトリに加えてマウントした親ディレクトリ配下をsafe.directoryの対象にするよう更新した。既存の登録値と合わせて重複を除去するため、再構築を繰り返しても設定は増殖しない。 - 確認結果:
devcontainer.jsonの生成値とpost-create.shの親ディレクトリ設定を実テンプレートから検証する unit test を追加した。あわせて JSON の読み込み、bash -n templates/devcontainer/post-create.sh、所有者が異なると仮定した一時 Git リポジトリで親ディレクトリのsafe.directory指定が有効になることを確認した。 - 文書化: 常時稼働ホスト運用ガイド と CLIコマンドリファレンス に、親ディレクトリをマウントする理由と、同じ親にある他のファイルもコンテナから見える注意点を追記し、CHANGELOG に修正内容を記録した。
- 再発防止策: scaffold の unit test が同梱する実テンプレートを読み、
workspaceMount、workspaceFolder、親ディレクトリのsafe.directory設定を検証するようにした。
5. 関連ドキュメント
- specdojo:docs-structure-guide(別リポジトリ構成)
- specdojo:specdojo-config-reference(
reposのキー) - PJR-ZGJ4(orchestrator のプロダクトリポジトリへのアクセス)