PJR-CCXN devcontainer の scaffold で常時稼働ホストへの接続のサンプルを作る
1. 概要
devcontainer scaffold(init --devcontainer を含む)で、常時稼働ホストで devcontainer を起動して tmux へ入る接続用のスクリプトと、接続元の ssh の config(alias と devcontainer の公開ポートの LocalForward)のサンプルを .devcontainer/remote-host/ に作り、最後の案内で置き場所とコピー先を示す。今は自宅の Mac 向けの設計書にしかなく、利用者に届いていない(2026-10-18、ポートの転送の不足で開発サーバへつながらなかった件を受けて)
2. 完了条件
devcontainer scaffold(init --devcontainerを含む)で、.devcontainer/remote-host/に次の 2 つのサンプルを作る。既にある場合は--forceのときだけ上書きする。specdojo-tmux.sh.sample: 常時稼働ホストで使う。devcontainer が止まっていれば起動し、container の中でtmux new-session -A -s <名前>へ入る。起動に使うコマンド(devcontainerCLI か docker か)と、前提のツールを冒頭のコメントに書く。ssh-config.sample: 接続元の端末の~/.ssh/configに写す。ホストの alias、tmux へ直接入る alias(RemoteCommandとRequestTTY)、devcontainer.jsonの公開ポート(appPort・forwardPorts)ごとのLocalForwardの行を含む。公開ポートがない場合は、書き方の例をコメントで示す。
- ホスト名・ユーザー・パスは仮の値(
<host>など)にし、実在の値や秘密を書かない。 - 接続用のスクリプトは container の中の tmux を前提にするため、
init --devcontainerで tmux を入れるか(今は入れない)を決めて実装し、理由を result に書く。 - scaffold の最後の案内に、2 つのサンプルの置き場所とコピー先を 1〜2 行で示す。
- specdojo:remote-host-development-guide の Dev Container を生成する節に、2 つのサンプルの使い方と、公開ポートを増やしたときは
LocalForwardも足すことを書く。 - 単体テストで、公開ポートがある場合とない場合の
ssh-config.sampleの中身と、既にあるサンプルを--forceなしで上書きしないことを確かめる。 - 作業を終える前に、
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 の
## [0.4.0] - 未定の節に書く。公開済みの版の節は変えない。
3. 作業内容
| No | 作業 | 担当 | 状態 | メモ |
|---|---|---|---|---|
| 1 | scaffold で接続のサンプルを作り、案内とガイドを改める | DEV | done | 0.4.0 の範囲 |
4. 対応結果
- 解決内容:
devcontainer scaffold(init --devcontainerを含む)で、.devcontainer/remote-host/にspecdojo-tmux.sh.sampleとssh-config.sampleを生成するようにした。既にある場合は--forceのときだけ上書きする。 - 接続用スクリプト(
specdojo-tmux.sh.sample): 常時稼働ホスト上で devcontainer の起動(devcontainer up)と tmux セッション(specdojo)への直接接続(docker exec)を行う。前提ツール(Docker、@devcontainers/cli、tmux)と起動コマンドを冒頭コメントに記載し、ホスト名・パス・ユーザー名は仮の値(プレースホルダー)とした。 - SSH 設定サンプル(
ssh-config.sample): 接続元の~/.ssh/configに写すホスト alias、tmux 接続用 alias(RemoteCommand/RequestTTY force)、devcontainer.jsonの公開ポート(appPort・forwardPorts)ごとのLocalForwardを含む。公開ポートがない場合は書き方の例をコメントで示した。 init --devcontainerの tmux: 接続スクリプトがコンテナ内の tmux を前提とするため、init --devcontainerでtmux: trueとしてコンテナ内 tmux を自動で導入するように実装した。- 案内とガイド: scaffold 完了時の Next steps でサンプルの置き場所とコピー先を示し、specdojo:remote-host-development-guide・
docs/ja/specdojo/references/command-reference.md・CHANGELOG にサンプルの使い方とLocalForwardの追加手順を記載した。 - 単体テスト: 公開ポートの抽出、公開ポート有無に応じた
ssh-config.sampleの内容、--forceなしでの上書き防止、--forceでの上書き、dry-run 表示、およびinit --devcontainerでの tmux 有効化を単体テストで検証した。
5. 関連ドキュメント
- prj-0001:pjr-8gq4-devcontainer-workspace-dir-fixed(元の項目)
- specdojo:remote-host-development-guide(影響先)
- tsd-home-mac-dev-server(自宅の Mac 向けの接続の例)