Skip to content

fix: devbase build <image> が実在プロジェクト名と衝突して黙って別のイメージをビルドする #142

Description

@takemi-ohama

何を見つけたか

devbase build <image><image>$DEVBASE_ROOT/projects/ に実在する名前と一致すると、bin/devbase の先頭にある name 解決がその引数をプロジェクト名として消費します。イメージ指定が消え、そのプロジェクトの compose ビルドへ化けます。

現在の該当は bi-tools です(projects/bi-toolscontainers/bi-tools が両方実在します)。

dockercompose_with_secrets をスタブ化して bin/devbase の dispatch だけを実行した結果:

$ devbase build bi-tools --no-cache
DOCKER:buildx build --load -t devbase-base:latest <ROOT>/containers/base --no-cache
COMPOSE:docker compose build dev --no-cache
Shell cwd was reset to <ROOT>

containers/bi-tools は一度もビルドされず、projects/bi-tools の compose ビルドが走っています。エラーも警告も出ません。

どこで見つけたか

bin/devbase の name 解決(_NAME_RESOLVABLE_SHORTCUTSbuild が含まれる箇所と、その直前のコメント)。#139 の設計中に、devbase build <image> が全イメージで動くかを確認して気づきました。

bin/devbase のコメントは、この挙動を「トップレベル build/login/scale を『そのプロジェクトを操作』と解釈する意図的設計(存在性ベース判定)のトレードオフであり、挙動としては仕様である」と明記しています。つまり既知です。ただし login の index 衝突と違い、build同名のディレクトリが containers/projects/ の両方に実在するため、衝突が偶発ではなく構造的に起きます。

なぜこの変更の範囲外なのか

#139 の受け入れ条件は、位置引数が docker へそのまま渡って失敗する不具合の修正です。name 解決の設計そのものは触りません。issues/old/PLAN49_build-image-argument.md の「前提 2」で現行挙動の維持を明示し、「対象範囲(含まない)」にも入れています。

直さないと何が起きるか

containers/bi-tools をトップレベルの devbase build bi-tools からビルドできません。逃げ道は devbase project build bi-tools です(project build の位置引数は name 解決の対象外のため)。

黙って別のものをビルドするため、利用者は成功したと思ったまま古いイメージを使い続けます。今後 containers/projects/ に同名が増えるたびに同じことが起きます。

対処の候補:

  • 衝突時に警告を出し、どちらとして解釈したかを表示する
  • containers/<image> が実在する場合は build を name 解決の対象から外す
  • --image のような明示フラグを足す

由来

issue #139

進行

モード: 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