Skip to content

fix: devbase list 経路の env 変数展開 + env init で VS Code 自動オープン設定#71

Merged
takemi-ohama merged 5 commits into
mainfrom
fix/load-project-env-var-expansion
Jun 14, 2026
Merged

fix: devbase list 経路の env 変数展開 + env init で VS Code 自動オープン設定#71
takemi-ohama merged 5 commits into
mainfrom
fix/load-project-env-var-expansion

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

概要

Remote-SSH 環境で devbase list からコンテナを開く際の不具合修正と、VS Code 自動オープン設定の改善。

  1. 不具合修正: devbase list (TUI) 経由でコンテナを開くとワークスペースが /work/$GIT_REPO という未展開パスで開いてしまう問題を修正。
  2. 機能追加: devbase env init で VS Code 自動オープン (DEVBASE_OPEN_EDITOR) を対話設定できるようにした (既定: 有効)。

関連 Issue

  • Closes #

変更点

  • fix: _load_project_env (TUI/直接起動フォールバック経路) が $VAR / ${VAR} を展開しないため、全プロジェクト env が依存する WORK_DIR=/work/$GIT_REPO がリテラルのまま VS Code に渡っていた。os.path.expandvars で shell source ./env 相当に展開する (単一引用符値はリテラル、$(...) コマンド置換は従来どおり非対応)。
  • feat: env collector collectors/editor.py を追加し、devbase env init の対話フローで DEVBASE_OPEN_EDITOR を設定 (既定 1・[Y/n] 選択式・非対話/EOF でも 1・0/n/no/false/off で無効化)。プロジェクト個別 env で上書き可能。
  • keys.py: DEVBASE_OPEN_EDITOR のコメントを env init 対象である旨に更新。
  • test: 変数展開の回帰テスト + editor collector テスト (計 17 件) を追加。

動作確認

  • 全テスト green (pytest tests/ → 823 passed)
  • devbase list 経路を再現し resolve_workdir/work/<repo> に展開されることを確認
  • editor collector が [Y/n] 既定 1・無効化選択・EOF 既定を満たすことをテストで確認
  • 必要に応じてドキュメント (docs/) を更新

補足

  • 関連して各 plugin リポジトリの全プロジェクト env に DEVBASE_OPEN_EDITOR=1 を明示追加済み (別途 main へ反映)。本 PR は devbase 本体の修正のみ。

takemi-ohama and others added 2 commits June 14, 2026 11:57
_load_project_env が $VAR / ${VAR} を展開しない仕様だったため、
全プロジェクト env が依存する WORK_DIR=/work/$GIT_REPO が devbase list
経由ではリテラルのまま VS Code に渡り、ワークスペースが $GIT_REPO という
パスで開いてしまっていた。shell `source ./env` 相当に os.path.expandvars で
変数展開する (単一引用符値はリテラル、$(...) コマンド置換は非対応のまま)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
up/list 後の VS Code 自動オープン (DEVBASE_OPEN_EDITOR) を env init の
対話フローで設定できる collector を追加。既定は有効 (1) で [Y/n] 選択式、
空入力/非対話(EOF)でも 1。0/n/no/false/off で無効化可能。プロジェクト個別の
env で上書きできる。

Co-Authored-By: Claude Opus 4.8 <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 1 | gemini | APPROVE

PR横断での設計レベルの指摘事項はありません。テストコードにおける os.environ モック化の改善提案1点のみです。

Comment thread tests/cli/test_project_name_resolution.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 2 | gemini | APPROVE

PR横断での設計レベルの指摘事項はありません。テストコードにおける os.environ モック化の改善提案1点のみです。

Comment thread tests/cli/test_project_name_resolution.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 2 | codex | REQUEST_CHANGES

既定OFFの既存仕様を維持するため、env init が未入力/EOFで自動オープンを有効化しないよう修正してください。

Comment thread lib/devbase/env/collectors/editor.py
container._load_project_env が os.environ に追加する変数が後続テストへ
漏出しないよう、monkeypatch で os.environ をテストスコープに隔離する
(cross-review gemini minor 指摘)。

Co-Authored-By: Claude Opus 4.8 <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 3 | codex | REQUEST_CHANGES

変数展開を shell source ./env 相当にするなら、既存の \$ エスケープを維持したうえで $VAR / ${VAR} だけを展開する実装にしてください。

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 3 | gemini | REQUEST_CHANGES

PR の修正意図(環境変数のテスト間リーク防止)は理解できますが、os.environ を標準の dict で上書きする手法は副作用が大きいため修正を提案します。

os.environ は単なる辞書ではなく、C レベルの環境変数と同期するための専用オブジェクト (os._Environ) です。これを dict で上書きすると putenv が呼ばれなくなり、将来的にテスト内で subprocess などを呼び出した際に環境変数が引き継がれないバグの原因となります。
全体をサンドボックス化したい場合は、オブジェクトをすり替えるのではなく with unittest.mock.patch.dict(os.environ): などを利用してインプレースで退避・復元するようにしてください。

Comment thread tests/cli/test_project_name_resolution.py Outdated
Comment thread tests/cli/test_project_name_resolution.py Outdated
os.path.expandvars は \$ を誤展開し shell source のリテラル $ や EnvFile が書く
\$ 付き値を壊すため、$VAR/${VAR} のみ展開し \$ をリテラル $ にデエスケープ、
未定義は空、$(...) は素通しする _expand_env_vars に置換 (cross-review codex major)。
あわせてテストの os.environ 隔離を dict 置換から in-place 退避 (autouse fixture) に
変更し os._Environ の putenv 同期を保つ (cross-review gemini major)。

Co-Authored-By: Claude Opus 4.8 <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 | codex | APPROVE

修正必須の指摘はありません。

@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 | gemini | APPROVE

docstring 内の shell source の挙動説明について、1点事実誤認があるため指摘します。

Comment thread lib/devbase/commands/container.py Outdated
非クォートの FOO=bar # x は shell ではコメント有効で値は bar になる。
誤って「無効」と記していた note を事実に沿って修正 (cross-review gemini minor)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@takemi-ohama takemi-ohama merged commit 0680ea3 into main Jun 14, 2026
5 checks passed
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.

1 participant