Skip to content

fix(cli): devbase build --help がヘルプを出さずにビルドを始める #196

Description

@takemi-ohama

何が起きるか

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_buildbuild_base_image の経路。コードから読める挙動で、実測はしていない)。

再現

devbase build --help    # ヘルプではなくビルドの出力が出る
devbase build -h        # 同じ

他のコマンドは正しくヘルプを出す(devbase rebuild --help / devbase up --help は Python 側の argparse に届く)。

原因

bin/devbasebuild) の分岐が、引数を走査して単体イメージ名か --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

  • 要求と受け入れ条件 — 2026-09-18 20:34
  • 作業場所の用意 — 2026-09-18 20:37
  • 設計 — 2026-09-18 20:38
  • 素材の収集と出典の確定
  • ドキュメント再構成 — 2026-09-18 20:50
  • ドキュメントレビュー — 2026-09-18 20:50
  • 計画 — 2026-09-19 09:11
  • 実装 — 2026-09-19 09:39
  • 構造改善 — 2026-09-19 10:13
  • 実装レビュー — 2026-09-19 10:50
  • 完了判定 — 2026-09-19 10:57
  • Pull Request — 2026-09-19 09:39
  • 確定仕様化 — 2026-09-19 11:13
  • 後片付け
  • 配布 — 2026-09-19 13:36
  • 体裁レビュー
  • リリース後テスト — 2026-09-19 13:38
  • 振り返り — 2026-09-19 13:39

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions