何が起きるか
devbase build --help(-h も同じ)が、devbase のヘルプを出さずにビルドの処理へ入る。最後に出るのは docker compose build のヘルプで、devbase の build が受け付ける引数(--no-cache / --expires / --context / <image> 指定)は分からない。
実際の出力(devbase 3.5.0、$DEVBASE_ROOT 直下で実行):
=== Building devbase images ===
[1/2] devbase-base already exists (use --no-cache to rebuild)
[2/2] Building project image...
Usage: docker compose build [OPTIONS] [SERVICE...]
Build or rebuild services
Options:
--build-arg stringArray Set build-time variables for services
...
✓ All images built successfully
devbase-base が既にある端末では「既存のためスキップ」で済むが、無い端末ではヘルプを見ただけで base のビルドが始まる(cmd_build → build_base_image の経路。コードから読める挙動で、実測はしていない)。
再現
devbase build --help # ヘルプではなくビルドの出力が出る
devbase build -h # 同じ
他のコマンドは正しくヘルプを出す(devbase rebuild --help / devbase up --help は Python 側の argparse に届く)。
原因
bin/devbase の build) の分岐が、引数を走査して単体イメージ名か --expires があるかだけを見ている。
for _ba in "${_DEVBASE_ARGS[@]}"; do
case "$_ba" in
--expires|--expires=*) _has_expires=1 ;;
-*) ;; # ← -h / --help はここで素通りする
*) _build_image="$_ba" ;;
esac
done
if [ "$_has_expires" = 1 ] || [ -n "$_build_image" ]; then
run_python project build ...
else
cmd_build "${_DEVBASE_ARGS[@]}" # ← --help のまま shell 実装のビルドへ
fi
cmd_build は冒頭で === Building devbase images === を出してビルドの手順に入り、認識しない --help はそのまま docker compose build へ渡る。ファイル末尾の -h|--help|help|"") run_python "--help" はコマンドの位置にある help にしか当たらないため、build の後ろに置いた --help は捕まらない。
build は shell 実装(cmd_build)が CWD で動く唯一のコマンドで、他のサブコマンドは run_python 経由なので argparse がヘルプを処理する。この分岐だけが抜けている。
期待する挙動
devbase build --help / -h が、ビルドを 1 つも起こさずに build の使い方(--no-cache / --project-no-cache / --expires[=N] / --context NAME / <image> 指定)を出して終了する。
直し方の案
build) の分岐の先頭で -h / --help を捕まえ、run_python project build --help へ委譲するか、shell 側に使い方を出して exit 0 する。前者なら Python の argparse が持つ説明と一致し、--project-no-cache など shell だけが持つ引数は説明の側へ足す必要がある。
検査は tests/cli/ に、devbase build --help の終了コードが 0 で、出力に === Building devbase images === が現れないことを見るものを 1 件足せば足りる。
見つけた場所: PR #150 のマージ後に devbase build の引数を確かめようとして踏んだ
進行
モード: standard / 作業ツリー: .worktrees/fix/plan61-name-resolution / 計画: issues/PLAN61_name-resolution.md
何が起きるか
devbase build --help(-hも同じ)が、devbase のヘルプを出さずにビルドの処理へ入る。最後に出るのはdocker compose buildのヘルプで、devbase のbuildが受け付ける引数(--no-cache/--expires/--context/<image>指定)は分からない。実際の出力(devbase 3.5.0、
$DEVBASE_ROOT直下で実行):devbase-baseが既にある端末では「既存のためスキップ」で済むが、無い端末ではヘルプを見ただけで base のビルドが始まる(cmd_build→build_base_imageの経路。コードから読める挙動で、実測はしていない)。再現
他のコマンドは正しくヘルプを出す(
devbase rebuild --help/devbase up --helpは Python 側の argparse に届く)。原因
bin/devbaseのbuild)の分岐が、引数を走査して単体イメージ名か--expiresがあるかだけを見ている。cmd_buildは冒頭で=== Building devbase images ===を出してビルドの手順に入り、認識しない--helpはそのままdocker compose buildへ渡る。ファイル末尾の-h|--help|help|"") run_python "--help"はコマンドの位置にある help にしか当たらないため、buildの後ろに置いた--helpは捕まらない。buildは shell 実装(cmd_build)が CWD で動く唯一のコマンドで、他のサブコマンドはrun_python経由なので argparse がヘルプを処理する。この分岐だけが抜けている。期待する挙動
devbase build --help/-hが、ビルドを 1 つも起こさずにbuildの使い方(--no-cache/--project-no-cache/--expires[=N]/--context NAME/<image>指定)を出して終了する。直し方の案
build)の分岐の先頭で-h/--helpを捕まえ、run_python project build --helpへ委譲するか、shell 側に使い方を出してexit 0する。前者なら Python の argparse が持つ説明と一致し、--project-no-cacheなど shell だけが持つ引数は説明の側へ足す必要がある。検査は
tests/cli/に、devbase build --helpの終了コードが 0 で、出力に=== Building devbase images ===が現れないことを見るものを 1 件足せば足りる。見つけた場所: PR #150 のマージ後に
devbase buildの引数を確かめようとして踏んだ進行
モード: standard / 作業ツリー:
.worktrees/fix/plan61-name-resolution/ 計画:issues/PLAN61_name-resolution.md