Skip to content

feat: devbase env init で HOST_SSH_USER を自動設定する #48

@takemi-ohama

Description

@takemi-ohama

概要

devbase env init の対話セットアップで、ホスト(mac/Linux/WSL)のログインユーザー名を HOST_SSH_USER として .env に自動設定したい。

これにより、コンテナからホストへ SSH してホスト側 GUI アプリ(例: Chrome をリモートデバッグモードで起動)を起動するワークフローを、追加設定なしで利用できるようにする。

背景・動機

ai-plugins の ndf:playwright-browser-connect skill に、コンテナから SSH 経由でホストの Chrome (CDP) を起動するスクリプト scripts/start-host-chrome.sh を追加した。
このスクリプトはホストへ SSH するために ホストのログインユーザー名 を必要とし、現状は実行時に HOST_SSH_USER=<ユーザー名> を手動指定している。

# 現状: 毎回手で渡す必要がある
HOST_SSH_USER=$(whoami) ./scripts/start-host-chrome.sh

devbase env initホスト上で実行される CLI であり、ホストのユーザー名を確実に取得できる立場にある。
ここで HOST_SSH_USER.env に書き出してコンテナへ引き継げば、利用側スクリプトは環境変数を手で渡す必要がなくなる。

参照(利用側): ai-plugins plugins/ndf/skills/playwright-browser-connect/start-host-chrome.sh / SKILL.md「コンテナからホスト Chrome を起動する (SSH 経由)」)

提案する実装

既存のコレクタ機構(lib/devbase/env/collectors/)に倣い、ホスト接続情報用のコレクタを追加する。

  1. キー定義 (lib/devbase/env/keys.py)

    HOST_SSH_USER = "HOST_SSH_USER"
    HOST_SSH_HOST = "HOST_SSH_HOST"  # 任意。default: host.docker.internal
  2. コレクタ追加 (lib/devbase/env/collectors/host.py)

    • display_name: 例「ホスト接続情報 (SSH)」
    • collect_fn:
      • HOST_SSH_USER の既定値を getpass.getuser()(または $USER / whoami)で自動取得し、safe_input で確認・上書き可能にする
      • HOST_SSH_HOST は任意。既定 host.docker.internal
    • 既存の git.py コレクタと同じ Collector インターフェースで collect_<name>(env_file) を実装
    import getpass
    from devbase.env import keys
    from devbase.env.store import EnvFile, safe_input
    from devbase.env.collector import Collector
    
    def collect_host_info(env_file: EnvFile) -> None:
        default_user = getpass.getuser()
        user = safe_input(f"ホストのログインユーザー名 [{default_user}]: ", default_user)
        env_file.set(keys.HOST_SSH_USER, user)
    
    collector = Collector(
        name="host",
        display_name="ホスト接続情報 (SSH)",
        collect_fn=collect_host_info,
    )
  3. devbase env sync でも再取得できると望ましい(任意)。

受け入れ条件

  • devbase env init 実行時に HOST_SSH_USER の既定値(ホストのユーザー名)が提示され、確認・変更できる
  • .envHOST_SSH_USER が書き出され、コンテナ内の環境変数として参照できる
  • 非対話/CI でも既定値(getpass.getuser())で設定される、もしくは安全にスキップされる
  • ドキュメント(docs/user/environment-variables.md)に HOST_SSH_USER(必要なら HOST_SSH_HOST)を追記

補足

  • セキュリティ上、HOST_SSH_USER はユーザー名のみで秘密情報ではない。SSH 鍵やリモートログイン有効化はホスト側でユーザーが別途設定する前提(ai-plugins 側スクリプトは鍵が無い場合に手動起動コマンドを案内するフォールバックを備えている)。
  • WSL2/Windows の場合はホストユーザーと SSH 先が一致しないケースがあるため、HOST_SSH_HOST の上書き余地を残しておくとよい。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions