Skip to content

feat: Node.js を Active LTS へ更新 + TUI 再ビルドを build --no-cache へ委譲#80

Merged
takemi-ohama merged 5 commits into
mainfrom
feat/base-node24-lts-and-tui-rebuild
Jun 30, 2026
Merged

feat: Node.js を Active LTS へ更新 + TUI 再ビルドを build --no-cache へ委譲#80
takemi-ohama merged 5 commits into
mainfrom
feat/base-node24-lts-and-tui-rebuild

Conversation

@takemi-ohama

@takemi-ohama takemi-ohama commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

概要

base イメージの Node.js を Active LTS 化し、TUI の操作性を改善する。論理的に独立した複数コミットで構成。

変更点

1. base イメージの Node.js を Active LTS 化 (containers/base/Dockerfile)

  • setup_20.xsetup_lts.x に変更し、バージョンを固定せず Active LTS (現在 v24 / Krypton) を追従
  • クリーンアップを rmsudo rm 化。Node24/npm11 がデフォルト作成する /tmp/node-compile-cache と playwright --with-deps の sudo apt が残す root 所有ファイルにより、非 root の rm -rf /tmp/* が Permission denied でビルド失敗していた問題を解消

2. TUI「再ビルド」メニューを build --no-cache へ委譲 (lib/devbase/tui/actions_project.py)

  • 従来は CLI の rebuild を呼んでいたが、rebuild は期限判定 (build --expires=7) でキャッシュを使うためラベルが謳う --no-cache を満たさなかった
  • no-cache の正規経路 build --no-cache へ委譲し、base/project とも無条件再ビルドに修正

3. TUI サブメニューに留まる挙動 + カーソル位置復元

  • サブメニューに留まる: 操作を実行した後トップ一覧へ戻らず、出力を読めるよう Enter 待ちを挟んで同じサブメニューを再表示する (flow.menu_loop)。Esc/← で初めて一覧へ戻る。env / plugin / snapshot / project / plugin-repo の全サブメニューに一括適用
  • カーソル位置復元: サブメニューから一覧へ戻る際、直前に選んだプロジェクト行へカーソルを復元 (questionary.selectdefault に rows index を渡す)
  • ⚠️ 仕様変更: サブメニュー内で実行した操作の rc は devbase list の終了コードへ伝搬しなくなる (留まる設計のため戻り値は MENU_BACK)。stopped/unknown 行の直接 up と status 表示の rc 伝搬は従来どおり維持

動作確認

  • ./bin/devbase build --no-cache でビルド成功、node --version = v24.18.0 を確認
  • pytest tests/843 passed (TUI 240 含む)
  • CI が green である
  • 実機 TUI でサブメニュー留まり / Esc 戻り時のカーソル復元を目視確認

補足

base イメージを継承する containers/lfm/Dockerfile は base から node バイナリを COPY しているため、base 再ビルドで自動的に Node 24 になる。Dockerfile 変更の反映には devbase build --no-cache が必要。

takemi-ohama and others added 5 commits June 29, 2026 18:17
TUI の「再ビルド (rebuild --no-cache)」は CLI の `rebuild` を呼んでおり、
rebuild は期限判定 (build --expires=7) でキャッシュを使うためラベルが謳う
--no-cache を満たさなかった。no-cache の正規経路である `build --no-cache`
へ委譲し、base/project とも無条件で再ビルドされるよう修正する。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
EOL を迎えた Node 20 から NodeSource の setup_lts.x へ切り替え、Active LTS
(現在 v24 / Krypton) を追従する。バージョンは固定しない。

あわせて Node24/npm11 がデフォルトで作成する /tmp/node-compile-cache や
playwright `--with-deps` の sudo apt が残す root 所有ファイルにより、
非 root の `rm -rf /tmp/*` が Permission denied でビルド失敗する問題を
クリーンアップの sudo 化で解消する。build --no-cache で v24.18.0 を確認済み。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
操作の使い勝手を 2 点改善する。

- サブメニューで操作を実行した後、トップ一覧へ戻らず同じサブメニューを
  再表示して留まる (flow.menu_loop)。出力を読めるよう Enter 待ちを挟み、
  Esc/← で初めて一覧へ戻る。env/plugin/snapshot/project/plugin-repo の
  全サブメニューが menu_loop 経由のため一括で適用。
- サブメニューから一覧へ戻る際、直前に選んだプロジェクト行へカーソルを
  復元する (questionary.select の default に rows index を渡す)。

サブメニュー内で実行した操作の rc は devbase list の終了コードへは伝搬
しなくなる (実行後も留まる設計のため戻り値は MENU_BACK)。stopped/unknown
行の直接 up と status 表示の rc 伝搬は従来どおり維持する。

影響テストを新挙動へ追従 (戻り値 MENU_BACK / 選択スタブ末尾に MENU_BACK /
pause 無効化の autouse fixture) し、カーソル復元の新規テストを追加。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
サブメニューから image build 等を実行すると大量の出力が残り、再表示した
操作メニューがその下に埋もれて見づらかった。flow.menu_loop の操作実行後
(Enter 待ちの後) に画面をクリアし、サブメニューを先頭行から描き直す。

画面クリア処理を menu.clear_screen に集約し、トップ一覧の app._clear_screen
からも委譲する (サブメニュー再表示と同じ消去処理を共有)。引数収集中止
(_ARG_CANCEL) では出力が無いためクリアしない。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
再起動 (up) / 停止 (down) はコンテナの起動状態が大きく変わるため、実行後は
サブメニューに留まらずトップ一覧へ戻り最新状態を再表示する。それ以外の
login/ps/logs/scale/build/rebuild は連続操作できるようサブメニューに留まる。

flow.menu_loop に back_after 述語を追加し、True を返す操作は実行後 (出力確認の
一時停止のあと) MENU_BACK を返してトップへ戻す。actions_project は
_BACK_TO_TOP_OPS={up, down} を渡す。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@takemi-ohama takemi-ohama merged commit facbf8a into main Jun 30, 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