Skip to content

feat(PLAN58): Compose の profiles で付随サービス群を dev に触れずに後から起動・停止する (#189) - #191

Merged
takemi-ohama merged 15 commits into
mainfrom
feat/issue-189
Sep 17, 2026
Merged

takemi-ohama merged 15 commits into
mainfrom
feat/issue-189

Conversation

@takemi-ohama

@takemi-ohama takemi-ohama commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Closes feat: Compose の profiles で、dev に触れずに付随サービス群を後から起動・停止できるようにする #189。要求・設計・決定は docs(PLAN58): Compose の profiles で付随サービス群を後から起動・停止する要求仕様と設計 (#189) #190 でマージ済み
    • 要求と受け入れ条件: issues/PLAN58_compose-profiles.md
    • 設計: issues/PLAN58_compose-profiles-design.md / 決定: issues/PLAN58_compose-profiles-decisions.md
    • 実装計画: issues/PLAN58_compose-profiles-impl.md(この PR で追加。実装中に範囲へ入れたものを含む)
  • devbase project profile {up,down,list} [name] <profile> を追加(container / ct も同じ。[name] なし)
    • up: そのプロファイルのサービスを全件明示して --no-deps で起動し、./deploy を DEVBASE_ACTIVE_PROFILES=<profile> で生成物の全インスタンスへ呼び直す
    • down: stop → rm -f(down <サービス> は依存元の dev まで消すため使わない)。ボリュームは残す
    • list: PROFILE / SERVICES / RUNNING(ps は --profile '*' で問い合わせる)。デーモンへ接続できなければ 不明 で exit 0
  • devbase up の起動は既定のサービスを明示(解決は既存コンテナの停止より前)し、devbase down と up 冒頭の停止は --profile '*' で全体を対象にする
  • devbase 経由の Compose(docker_compose / ps / logs / config 2 か所 / エディタの ps)へ COMPOSE_PROFILES=__devbase_none__ を渡す
  • devbase list の起動中の行の操作メニューに「テスト用サーバ起動 / 停止」を追加(プロファイルを持つプロジェクトだけ。解決は対象プロジェクトの env と機密を載せて行い、TUI セッションへ残さない)
  • 修正: TUI の _preserve_cwd_env() が機密の注入履歴を戻さず、別プロジェクトを続けて操作すると最初のプロジェクト固有の機密が次の Compose へ渡る欠陥(PR 前からの経路にもあった)
  • シェル補完・CLI リファレンス・プラグイン作者向けガイド(docs/plugin-dev/compose-profiles.md)・CHANGELOG を更新

レビュー

  • 構造改善(cross-refactoring): 現状固定テスト 3 件を追加。構造の提案 R2-001(cmd_scale の抽出)はこの PR で触れていない既存コードのため適用を止めた(別途起票予定)
  • 実装レビュー(cross-review): 4 ラウンドで収束(codex / agy / kiro の 3 者とも参加)。修正 5 件、却下 1 件(Compose v2.13 未満の挙動。最低対応版 2.20.0 の範囲外)。未解決スレッド 0 件(GitHub で確認)

Test plan

head d08af76(コード変更は bf2cf52 まで。以降は CHANGELOG のみ)

  • uv run pytest tests/ -q -p no:cacheprovider(全体)→ 2600 passed, exit=0(2026-09-17 07:31)
  • 変更箇所のテスト 9 ファイル → 142 passed, exit=0(2026-09-17 07:29)
  • uvx ruff check --select=E9,F63,F7,F82 lib(CI と同じ選択)→ exit=0
  • python -m compileall -q lib(3.10 / 3.11 / 3.12)→ exit=0
  • bash -n etc/devbase-completion.bash → exit=0
  • CI(Python syntax check 3.10-3.12 / Ruff lint / ShellCheck)→ pass
  • 実 Docker での確認(Docker 29.4.3 / Compose v5.1.4、alpine:3、bf2cf52 で再実行): devbase の関数(default_services → docker_compose_up / cmd_profile_up / cmd_profile_list / cmd_profile_down / docker_compose_down)を実コンテナで通し 21/21 OK
    • A: up は dev-1/dev-2 だけ。profile up test で app/db が起動し dev の Container ID・StartedAt 不変。./deploy は project.yml を scale 1 に書き換えても生成物の 2 台へ test で走る。profile down で app/db のコンテナだけ消え、名前付きボリュームは残る。profile up 後の down で全コンテナと network が消える
    • B: depends_on: [dev-1, dev-2](required なし)でも dev 不変
    • C: dev の環境変数を変えた後の profile up でも dev は再作成されない(参考: --no-deps なしの dry-run では dev-1/dev-2 が Recreate になる)
    • D: dev が db(プロファイル)へ depends_on required: false を持つ構成で profile up → profile down しても dev 不変
    • E: COMPOSE_PROFILES=test を環境変数に置いても、.env に書いて dev→db の依存を持たせても、up は dev だけ。その後の profile up/down は効く
    • F: profiles を持たない構成の up / down は従来どおり(全起動 / 何も残らない)
    • G: DOCKER_HOST を存在しないソケットにすると list は 不明 で exit 0、up / down は exit 1
  • 未実施(配布後のリリース後テストへ引き継ぐ): 実プロジェクトでの devbase up 全経路(イメージ準備・機密注入を含む)、devbase list の TUI の目視、Compose 2.20.0 以上 5.x 未満での --profile '*'

🤖 Generated with Claude Code

takemi-ohama and others added 8 commits September 17, 2026 05:36
- 子プロセスの COMPOSE_PROFILES へ打ち消し用のプロファイル名を入れる (決定 7)
- devbase up の起動は既定のサービスを明示し、停止は --profile '*' で全体を対象にする
- プロファイル名とサービスの対応を docker compose config で解決する (決定 1)
- 実装計画 issues/PLAN58_compose-profiles-impl.md を追加

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Add characterization tests for malformed ps JSON, ps execution errors, and comma-separated active profiles. Production code is unchanged.

Item-Id: R1-001
Round: 1
Impl-Runtime: codex
Impl-Model: default
@takemi-ohama

takemi-ohama commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor Author

改修計画 — devbasex/devbase #191

/ndf:cross-refactoring が提案し、適用した改善項目の記録である。
理由と手順は提案の時点でしか残らないため、公開の直前に書き出している。

  • 対象範囲: lib/devbase/commands/container.py, lib/devbase/utils/docker.py, lib/devbase/tui/actions_project.py, lib/devbase/project/runtime.py, lib/devbase/cli.py, tests/commands/test_container_profile.py, tests/utils/test_docker_profiles.py, tests/cli/tui/test_profile_menu.py, tests/cli/test_profile_dispatch.py, tests/volume/test_compose_profiles.py, tests/commands/test_hook_env.py
  • 着手前のテスト: uv run pytest tests/ -q -p no:cacheprovider

ラウンド 1(実装 codex / レビュー agy / kiro)

R1-001 — lib/devbase/commands/container.py#cmd_profile_list

兆候・経路 手法・階層 重要度 提案元 状態 コミット
error unit — codex / kiro 採用 1

なぜ: cmd_profile_list の RUNNING 列は _running_services の解析結果で決まる。既存テストは returncode 0 + 正常 JSON (running/partial/stopped) と returncode 非0 (不明) と JSON 配列形式を固定しているが、returncode 0 で stdout が JSON として壊れている (json.loads が ValueError) 経路は固定されていない。この経路も None を返して RUNNING を不明にするが、解析部を組み替えると例外の握り (ValueError) が抜けて落ちる方向へ退行しうる。

手順: 1. 既存project fixtureとFakeComposeで生成物およびtestプロファイルのappサービスを用意する。
2. 外部subprocess.runのps応答だけを、終了コード0で壊れたJSONを返す場合とOSErrorを送出する場合にパラメータ化する。config応答は正常に保つ。
3. 公開入口cmd_profile_list()を実行し、現状の終了コード0を固定する。
4. 標準出力からtestの行を取り出し、appと稼働状況の不明が残ることを確認する。表全体の文字列・空白幅やprivate関数は固定しない。

R1-002 — lib/devbase/commands/container.py#cmd_profile_up

兆候・経路 手法・階層 重要度 提案元 状態 コミット
error unit — codex / agy 検証中 1

なぜ: 既存テストはCompose起動失敗とdeploy実行失敗を固定しているが、deployが存在し、起動前のcurrent_project_configがDevbaseErrorになる経路は固定していない。簡易実行では終了コード1となり、Compose起動に進まなかった。

手順: 1. 既存project fixtureで生成済みComposeと、実行すると印を残すdeployを用意する。
2. プロファイル解決は成功させ、公開依存current_project_configをDevbaseErrorを返すスタブにする。外部プロセスは既存FakeComposeで記録する。
3. 公開入口cmd_profile_up("test")を実行し、現状の終了コード1を固定する。
4. 外部Composeへの起動要求が出ず、deployの印も作られないことを確認する。内部ヘルパーの呼び出し順・回数やログ全文は比較しない。

R1-003 — lib/devbase/project/runtime.py#hook_env

兆候・経路 手法・階層 重要度 提案元 状態 コミット
boundary unit — agy 採用 1

なぜ: hook_env は DEVBASE_ACTIVE_PROFILES をカンマ区切りで生成する仕様を持つが、既存テストは 0 件と 1 件のみで複数プロファイル指定時の結合の境界値が未固定である

手順: 1. テスト用の ProjectConfig を準備する
2. active_profiles に複数のプロファイル名を渡して hook_env を呼び出す
3. 返却された環境変数の DEVBASE_ACTIVE_PROFILES がカンマ区切りで正しく結合されていることを検証する

見送った項目

ラウンド 対象 兆候・経路 理由
1 lib/devbase/utils/docker.py#compose_env branch 1 ラウンドの採用上限 3 件を超えた
1 lib/devbase/utils/docker.py#docker_compose_down branch 1 ラウンドの採用上限 3 件を超えた

cmd_profile_up で deploy 存在時に current_project_config が
DevbaseError を送出した際の終了コードと未実行の振る舞いを固定する。

Item-Id: R1-002
Round: 1
Impl-Runtime: agy
Impl-Model: default
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

構造改善(cross-refactoring)の結果

  • テスト整備ラウンド 1: 提案 7 件 → 採用 3 件。すべて適用し、全体テストが通った(928990d / 3de1d4b)
  • 提案ラウンド 1: 提案 4 件 → 採用 1 件(しきい値 major)
  • 止めた後、ループは提案ラウンドの上限(2)まで回さずに終了した。範囲を PR の変更に絞れない構成で回し続けると、既存コードへの提案が繰り返されるため
  • cmd_scale と config 読み取りの重複は、範囲外の課題として別に起票する予定(承認を得てから)

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | kiro | REQUEST_CHANGES

プロファイルの有効/無効を COMPOSE_PROFILES=__devbase_none__ で打ち消し、必要な経路だけ --profile で有効化する設計は一貫している。ただし --profile と env の優先関係に依存する箇所が 2 つあり、稼働状況の表示と down の網羅性に影響しうる(インライン参照)。

Comment thread lib/devbase/commands/container.py
Comment thread lib/devbase/utils/docker.py

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | agy | APPROVE

PLAN58 の仕様と設計(プロファイル解決、--no-deps 起動、--profile '*' 停止、環境分離、TUI・CLI連携、フック通知)が整合しており、修正を要する問題は認められません。

非アクティブなプロファイルのサービスを ps に出さない版でも RUNNING が
stopped に張り付かないよう、_running_services の ps に --profile '*' を付ける。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

/ndf:fix サマリ(cross-review round 1)

対応件数: critical=0 / major=1 / minor=0 (合計 1 件)
deferred: 0 件 / rejected: 1 件
commit: baec17f
CI: PENDING(push 直後。Python syntax check 3.11/3.12・Ruff lint・ShellCheck は pass、3.10 実行中)

詳細

  • [major] lib/devbase/commands/container.py _running_services — ps に --profile '*' を付け、非アクティブなプロファイルのサービスを ps に出さない版でも RUNNING が stopped に張り付かないようにした。回帰テスト test_profile_list_asks_ps_for_all_profiles を追加(修正前に失敗を確認)。v5.1.4 の実機では付けなくても出るため版差への保険。Resolve 済み(https://github.com/devbasex/devbase/pull/191#discussion_r4031056688)
  • [minor → rejected] lib/devbase/utils/docker.py docker_compose_down — 要求仕様の「非機能の条件」で最低対応版を Docker Compose 2.20.0 と定めており、指摘の v2.13 未満は対象外。profiles を持たないプロジェクトでは down の対象は変わらず、作者向け docs/plugin-dev/compose-profiles.md に 2.20.0 以上を明記済み。未 Resolve のまま残す(https://github.com/devbasex/devbase/pull/191#discussion_r4031056889)

検証

  • uv run pytest tests/ -q → 2592 passed, exit=0
  • uvx ruff check --select=E9,F63,F7,F82 lib → exit=0

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | kiro | REQUEST_CHANGES

_run_deploy_pipeline の起動サービス解決が down の後に来ており、構成解決を down 前に済ませるという設計不変条件を破っている。詳細はインライン参照。

Comment thread lib/devbase/commands/container.py Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | codex | REQUEST_CHANGES

TUI のプロファイル取得にも、CLI と同じ対象プロジェクトの環境準備を適用してください(指摘1件)。

Comment thread lib/devbase/tui/actions_project.py Outdated
- _run_deploy_pipeline: default_services を docker_compose_down より前に求める。
  config --services が失敗しても稼働中の環境を落とさず旧構成を書き戻す
- TUI の _profile_names: container.project_profile_names を _preserve_cwd_env の
  中で呼び、対象プロジェクトの env と機密を載せてから Compose に解決させる。
  切替手順は _enter_project として _dispatch_lifecycle と共有する

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ (round 2)

対応件数: critical=0 / major=2 / minor=0 (合計 2 件)
deferred: 0 件 / rejected: 1 件
commit: f5fd93a
CI: PENDING (push 直後。Python syntax check 3.10/3.11・Ruff lint・ShellCheck は pass、3.12 実行中)

詳細

  • [major] lib/devbase/commands/container.py _run_deploy_pipeline — default_services(override_file) を停止 ([3/6]) より前に求めるよう移動。config --services が失敗しても稼働中の環境を落とさず旧構成を書き戻す。回帰テスト test_default_services_failure_keeps_containers_running を追加 (thread)
  • [major] lib/devbase/tui/actions_project.py _profile_names — _preserve_cwd_env() の中で新設の container.project_profile_names(name) を呼び、対象プロジェクトの env と機密を載せてから解決する。切替手順は _enter_project として _dispatch_lifecycle と共有。CWD / os.environ が解決中は対象を向き、終了後に戻ることをテストで固定 (thread)
  • [rejected / minor] lib/devbase/utils/docker.py — round 1 で理由を返信済み (最低対応版 2.20.0)。今回も変更なし

検証

  • uv run pytest tests/ -q -p no:cacheprovider → 2594 passed, exit=0
  • uvx ruff check --select=E9,F63,F7,F82 lib → exit=0

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 3 | codex | REQUEST_CHANGES

修正が必要な指摘は1件です。関連テスト94件は通過しました。

Comment thread lib/devbase/tui/actions_project.py

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 3 | agy | APPROVE

要求仕様 (PLAN58) の受け入れ条件を満たしており、不整合や退行は見出せませんでした。

_preserve_cwd_env は os.environ の値だけを戻し、runtime の注入履歴を戻して
いなかった。ハンドラの中で別プロジェクトへ切り替えると、値は切替元へ戻るのに
履歴は切替先のものになり、次の clear_injected が切替元固有の機密を落とせず
次に操作するプロジェクトの Compose 子プロセスへ渡っていた。メニュー表示時の
プロファイル照会と、既存の dispatch_lifecycle の経路の両方が該当する。

runtime に snapshot_injected / restore_injected を足し、_preserve_cwd_env が
入口で履歴を控え、finally で os.environ と同時に書き戻す。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ (round 3)

対応件数: critical=0 / major=1 / minor=0 (合計 1 件)
deferred: 0 件 / rejected: 1 件
commit: fe0b1e5
CI: PENDING (push 直後)

詳細

  • [major / セキュリティ] lib/devbase/tui/dispatch.py _preserve_cwd_env — CWD・os.environ の値と同時に機密の注入履歴も控えて戻すようにした。lib/devbase/env/runtime.py に snapshot_injected / restore_injected を追加。値だけ戻して履歴が切替先のままだと、次の clear_injected が切替元固有の機密を落とせず次の Compose 子プロセスへ渡っていた。同じ欠陥は PR 前からある dispatch_lifecycle の経路にもあったため、共通の復元境界で両方を直した。回帰テスト 4 件を追加 (修正前に失敗を確認) (thread)
  • [rejected / minor] lib/devbase/utils/docker.py — round 1 で理由を返信済み (最低対応版 2.20.0)。今回も変更なし

検証

  • uv run pytest tests/ -q -p no:cacheprovider → 2598 passed, exit=0
  • uvx ruff check --select=E9,F63,F7,F82 lib → exit=0

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 4 | kiro | COMMENT

設計と正確性は妥当で、プロファイル解決・--no-deps・COMPOSE_PROFILES 打ち消し・フック委譲の各経路はテストで固定されている。ブロッカーは無い。以下は minor の修正提案のみ。

  • lib/devbase/utils/docker.py:225 — docker_compose_down が常に --profile '*' を付けるが、--profile へのワイルドカード * は比較的新しい Compose(概ね v2.24 以降)でしか「全プロファイル有効化」として解釈されない。README の前提は「Compose v2.x 以上」なので、それより古い v2.x では * がリテラルのプロファイル名として扱われ、profile up で起動したサービスが devbase down で残る(down はエラーを握り潰すため気づきにくい)。前提の最小 Compose バージョンを引き上げて明記するか、この劣化を docs/troubleshooting に注記するのが安全。

Comment thread lib/devbase/tui/actions_project.py

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 4 | agy | APPROVE

全変更点およびラウンド 1〜3 の修正(TUI 復元境界での機密履歴の復元、稼働状況 ps のプロファイル指定、事前解決順序等)を精査し、追加の修正アクションが必要な問題がないことを確認しました。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 4 | kiro | APPROVE

PLAN58 の Compose profiles 実装をレビューした。設計(決定 1〜8 との対応)、正確性、責務分割、後方互換いずれも修正提案なし。compose_env() による COMPOSE_PROFILES 打ち消しは docker_compose / _compose_run / config 読み取り 2 か所 / editor の ps まで一貫して適用され、profile up の --no-deps + 明示サービス指定で dev 非再作成、docker_compose_down の --profile '*' で残留防止という不変条件が保たれている。_preserve_cwd_env の注入履歴 snapshot/restore(round 3 指摘)も値復元と整合。テストは境界・失敗系・版差(ps の JSON 形式)まで押さえており、追加の指摘は無い。

@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ(最終スイープ)

対応件数: critical=0 / major=0 / minor=1 (合計 1 件)
deferred: 0 件 / rejected: 1 件(最終スイープで Resolve)
commit: bf2cf52
CI: SUCCESS(push 時点のスナップショット。Python syntax check 3.10/3.11/3.12・Ruff lint・ShellCheck が pass)

詳細

  • [修正] lib/devbase/tui/actions_project.py:157(kiro round 4、正確性): プロファイル操作の handler で再解決した名前が空なら、選択メニューを出さずに logger.warning を出し、flow.BackOut(→ ARG_CANCEL)で同じサブメニューへ戻る。tests/cli/tui/test_profile_menu.py に回帰テストを追加(先に失敗を確認済み)
  • [rejected → Resolve] lib/devbase/utils/docker.py:232(kiro round 1、互換性): 最低対応版は Docker Compose 2.20.0 で、指摘の v2.13 より新しい。round 1 の返信のとおりコードは変えない

検証

  • uv run pytest tests/ -q -p no:cacheprovider → exit=0(2600 passed)
  • uvx ruff check --select=E9,F63,F7,F82 lib → exit=0

未解決スレッド数(Resolve 後に GraphQL で数え直し): 0

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

構造改善で範囲外と判断した cmd_scale の抽出と config 読み取りの重複は、#192 として残した。

@takemi-ohama
takemi-ohama marked this pull request as ready for review September 17, 2026 00:13
@takemi-ohama
takemi-ohama merged commit 24e5dcc into main Sep 17, 2026
5 checks passed
@takemi-ohama
takemi-ohama deleted the feat/issue-189 branch September 17, 2026 00:23
@takemi-ohama takemi-ohama mentioned this pull request Sep 17, 2026
4 tasks
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

リリース後テスト

対象の版: v3.5.0(2026-09-17 09:28 公開、タグ 3d60fff)
導入経路: 利用者と同じ git 導入(/Users/takemi_ohama/devbase を git pull --ff-only で 3d60fff へ更新)。devbase --version → devbase 3.5.0
対象の環境: 本番(main がそのまま配布。検証用のチャネルは無い)。Docker 29.4.3 / Compose v5.1.4、backend は OpenBao(version: 2 / layout: group)
検証用プロジェクト: plan58rv(dev + profiles: [test] の app / db、dev→db と app→dev に required: false、scale 2、deploy フックが DEVBASE_ACTIVE_PROFILES を記録)。終了後にコンテナ・network・plan58rv のボリュームを削除済み

受け入れ条件 実行したこと 実行時刻 結果
profiles 付きのサービスは devbase up で起動しない(全経路: env 確認・イメージ準備・機密注入・生成・待機・フック・bao token) devbase up --no-open 09:29:21 合格 / exit=0。起動は dev-1 / dev-2 だけ
up からの ./deploy は DEVBASE_ACTIVE_PROFILES が空 deploy.log 09:29:23 合格(idx=1,2 とも [])
profile list が名前と稼働状況を出す devbase project profile list 09:29:32 合格 / exit=0(test db,app 0/2 stopped、起動後 2/2 running)
profile up X で X のサービスだけ起動し、dev の Container ID・StartedAt 不変、./deploy が生成物の 2 台へ X で走る devbase project profile up test 09:29:33 合格 / exit=0(dev-1 5fd0dc5bce37 / dev-2 10ba65448680、StartedAt 00:29:22.686 のまま。deploy idx=1,2 [test])
profile down X でコンテナだけ削除、dev 不変、名前付きボリュームは残る devbase project profile down test 09:29:35 合格 / exit=0(app / db 消滅、plan58rv_dbdata 残存)
未知のプロファイル名は一覧を出して 1 devbase project profile up nope 09:29:36 合格 / exit=1(「使えるプロファイル: test」)
ct profile は同じ結果で非推奨の警告 1 行 devbase ct profile up test 09:29:45 合格 / exit=0(警告 1 行)
プロファイル稼働中 + COMPOSE_PROFILES=test の端末で devbase up → 冒頭で X も止まり、起動後は既定のサービスだけ COMPOSE_PROFILES=test devbase up --no-open 09:29:47 合格 / exit=0(dev-1 / dev-2 のみ。network も作り直された)
devbase down でプロファイルのサービスも削除し 0 で終わる devbase project profile up test → devbase down 09:29:52 合格 / exit=0(警告なし、コンテナ 0、network 0)
(PLAN56 / #184)layout: group の実サーバで up の機密注入と bao token の書き込み 上の devbase up 09:29:21 合格(注入に成功し、bao の token を書きました: plan58rv-dev-1, plan58rv-dev-2)
devbase list の TUI に 2 項目が出て、起動・停止後に STATUS が変わる — — 保留(理由: 対話端末での目視が要る。項目の出し分け・委譲・復元は自動テストで確認済み。利用者が次に devbase list を開いたときに確認する)
project profile up <プロジェクト> X(別ディレクトリから名前指定) — — 保留(理由: projects/ 配下へ検証用プロジェクトを置く必要があり、利用者の projects を汚さないため実施しなかった。名前解決は既存の _dispatch_lifecycle 経路で自動テスト済み)
Compose 2.20.0 以上 5.x 未満での --profile '*' — — 保留(理由: 手元に該当版が無い。該当版の利用者から報告があれば確認する。仕様書の「対応する Docker Compose の版」に未確認と明記済み)

合否: 合格(13 件中 10 件を実施し全件合格、3 件は保留)
起票したもの: なし(構造改善で見つけた範囲外の課題は #192 として起票済み)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Compose の profiles で、dev に触れずに付随サービス群を後から起動・停止できるようにする

1 participant