Skip to content

v4.1.1

Latest

Choose a tag to compare

@takemi-ohama takemi-ohama released this 31 Oct 14:17
8516feb

派生イメージ(general・php・php85)の言語サーバ(#236)は、devbase build でイメージを建て直した後に届きます。

Added

  • 自分で OpenBao サーバを立てて使うための文書とポリシーの雛形・試用の構成を足しました(#295)。
    OpenBao サーバを用意するが、個人の形(自分で 1 台)・チームの形(チームで 1 台)・
    既存のサーバの形(組織のサーバへ接続)の 3 つを分け、KV v2 のマウント・AppRole・ポリシー・entity と alias・
    ロール・端末ごとの secret_id の発行と失効を bao のコマンドで示します。ポリシーの雛形(version: 1 / 2)と、
    開発モードの OpenBao を手元に立てる試用の構成(compose.yml)は docs/user/openbao/ にあります。
    個人の形もアカウントグループごとの置き場(version: 2)を使い、プロジェクトで DEVBASE_ACCOUNT_GROUP=personal を
    宣言します。接続のコマンドと引数、既存のサーバへの接続の手順は変わりません。
  • general・php・php85 の派生イメージに、Python・TypeScript・PHP の言語サーバを入れました(#236)。
    pyright-langserver(pyright 1.1.414)・typescript-language-server(6.0.2、TypeScript 5.9.3 を使う)・
    intelephense(1.18.5)が PATH の上にあり、コンテナに入った時点で Claude Code の公式 LSP プラグインから起動できます
    (プラグインは利用者が入れます)。言語サーバは /opt/language-servers に root で入り、利用者の npm i -g の領域とは
    分かれます。tsc は base と同じ 7.0.2 のままです。イメージの展開後の大きさは約 148MB 増えます。
    base とほかの派生イメージは変わりません。届くのはイメージを建て直した後です(devbase build)。
    Serena の MCP は今までどおり、初回の起動で serena-agent と自分の言語サーバを取得します(ネットワークが要ります)。

Changed

  • devbase list の TUI の「エディタを開く (open)」で、dev コンテナが 2 つ以上動いているときは開くものを選べるようにしました。
    これまでは常に既定の番号(DEVBASE_OPEN_INDEX、無ければ 1)を開いていました。カーソルの初期位置は既定の番号で、
    Esc でサブメニューへ戻ります。動いているものが 1 つのときと、CLI の devbase open の振る舞いは変わりません。
  • https://dl.basex.jp/ を devbase の紹介ページにしました。 これまでのワンライナーだけの案内に替え、できること・
    はじめ方・コマンドの体系・はじめから入っている道具・ドキュメントへの入口を 1 枚にまとめました(コピーのボタン付き)。
    ロゴ(base の上に層が積まれる形)とアイコンは自前で描いたものです。ページの正本は site/index.html です。ワンライナーの URL(https://dl.basex.jp/i)と配信の中身は変わりません。
  • シェル補完(bash・zsh)が、--context NAME を受け付けるすべてのサブコマンドで --context を出すようにしました(#435)。
    これまでは open と project post-start だけでした。up・down・ps・login・scale・build・rebuild、
    project / container の配下(logs・profile up|down|list を含む)、env exec・env token で、- を打って補完すると
    --context が候補に出ます(devbase up web -<TAB> のようにプロジェクト名の後でも出ます)。値(docker context の名前)は補完しません。
    - で始まらない語の候補は変わりません。
  • スナップショットが、作り直せる一時ファイル・ログ・取り直せる取得物を控えないようにしました(#368)。
    既定で .codex/logs_2.sqlite(-wal・-shm を含む)・.codex/.tmp・.codex/cache・.claude/plugins/cache・
    .claude/plugins/marketplaces・.serena/logs・.gemini/tmp/*/logs.json・.gemini/tmp/*/logs を、フル・差分・
    復元前バックアップから外します。会話の記録(.gemini/tmp/<プロジェクト>/chats/ を含む)・入れたプラグインの一覧と
    データ・.serena/language_servers はこれまでどおり控えます。外したパスは復元後のボリュームに無く、各 CLI が作り直します。
    backups/exclude.yml の exclude にボリュームの中の相対のパスを並べると、除外を足せます。
    世代の meta.yml に作ったときの除外の一覧(exclude)を残し、今と違う除外の一覧の世代へは差分を積みません。
    更新後の最初の devbase up の自動スナップショットは、系列ごとに新しい世代(フル)を作ります。
    除外の一覧が違う世代を devbase snapshot create --name で指定すると、差分を作らずに終了コード 1 で止まります。
    既存の世代はそのまま一覧・復元できます。
  • VS Code Server の本体(~/.vscode-server/bin)だけを全コンテナ共通の 1 本のボリューム devbase_vscode-server-bin に
    置くようにしました(#463)。
    これまではコンテナ 1 つに 1 本の devbase_vscode_<プロジェクト>_<番号> が
    ~/.vscode-server を丸ごと持ち、VS Code の更新のたびに約 0.6GB の版が各ボリュームへ溜まっていました。
    今は本体の版をプロジェクトとインスタンスの数だけ重ねて持たず、コンテナの起動が bin/ の版を新しい順に 5 つまで残し、
    同時の展開で残った入れ子の本体と古い展開の途中のディレクトリも消します(この片付けは base と派生イメージを
    建て直した後から効きます)。
    拡張機能・リモート側の設定(data/Machine/settings.json)・ローカル履歴・拡張機能がリモート側に保存する状態は、
    ボリュームに置かずコンテナの書き込みレイヤーに残るため、devbase up でコンテナを作り直すたびに消えるようになります。

    手で入れた拡張機能は入れ直しになり、Dev Containers の既定の拡張機能は作り直しの後の attach で入り直します。
    window.title は devbase up が毎回書き直します。docker restart と端末の再起動では消えません。
    移った後の最初の attach で本体(約 215MB)を取り直します。以前の devbase_vscode_<プロジェクト>_<番号> は付けず、
    中身も引き継がず、devbase は消しません。残っている間は devbase up の最後に名前と消すコマンドが出るので、
    利用者が docker volume rm で消してください(使わなくなった VS Code Server ボリュームを消す)。
    建て直す前のイメージでも attach できるよう、devbase up / scale / project post-start の起動の後の処理が
    ~/.vscode-server/bin を開発ユーザーが書ける形に揃えます。

Fixed

  • VS Code の attach が「Copy extensions to remote」で止まらないようにしました(#507)。
    Dev Containers 拡張は、拡張のキャッシュを VS Code を動かしている手元の端末に 1 つ持ち、拡張の名前だけで選んで
    コンテナへ送ります。arm64 の端末(Mac など)と x86_64 のサーバーの両方へ同じ VS Code から attach すると、
    別の CPU 向けの拡張が送られて止まっていました。dev コンテナへ名前 vscode のボリュームを /vscode に付け、
    拡張のキャッシュと VS Code Server の新しい版の本体を docker ホストごとの置き場に持たせます。コンテナを作り直しても、
    拡張は取り込み直しません。拡張のキャッシュは devbase up などの起動の後の処理が拡張ごとに新しい 3 版へ減らします。
    反映するには devbase up でコンテナを作り直します。同じ docker ホストの dev コンテナは、プロジェクトごとにすべて
    作り直してください。
    ~/.vscode-server/bin は全 dev コンテナで共有のボリュームで、作り直したコンテナは
    そこへ /vscode を指すリンクを置きます。作り直していないコンテナには /vscode が無く、そのリンクは切れて見えます。

  • TLS を傍受するプロキシ(Netskope など)の下でも、ホストの devbase が OpenBao へ繋がるようにしました(#497)。
    OpenBao の証明書を OS の信頼ストア(macOS はキーチェーン)で検証します。これまでは Python の既定の CA で検証し、
    プロキシの CA を知らずに OpenBao へ到達できないため、…のキャッシュを使います と出てキャッシュへ落ち、書き込みも
    できませんでした。SSL_CERT_FILE や別に置いた Python 3.12 で打つ回避は要りません。検証は緩めず、OpenBao 以外の
    通信(boto3 など)の検証は変わりません。依存に truststore を足しました。次の devbase の起動で自動で入ります。

  • devbase up / devbase scale の起動の待ちの時間切れの文言が、巡の回数と実際に待った秒数を出すようにしました(#374)。
    制限は 1 秒休む巡の回数(60 巡)で数え、docker の呼び出しにかかる時間を含まないため、実際に待つ時間は 60 秒より
    長くなります。これまでの timeout (60s) ... は 60 秒で止まったと読めました。今は
    timeout after 60 rounds (73s elapsed) waiting for the entrypoint to complete の形で出ます。数え方と制限は変わりません。

  • devbase env <TAB> の候補に token と backend が出るようにしました(#454)。 bash と zsh の補完の
    サブコマンドの一覧に 2 つが無く、名前を手で打たないと使えませんでした。一致テストが env のサブコマンドの
    全部を bash と zsh の一覧と比べるようになり、env のサブコマンドを足したときの取り残しで落ちます。

  • 接続先 URL が手元のサーバ(http://127.0.0.1:8200 など http の loopback)のとき、devbase up したコンテナの中の
    bao がサーバへ届くようにしました(#295)。
    これまではコンテナへ渡す BAO_ADDR がそのまま 127.0.0.1 を指し、
    コンテナ自身へつながっていました。Docker が手元の端末のものなら、コンテナの BAO_ADDR のホストを
    host.docker.internal にし、dev コンテナへ host.docker.internal:host-gateway の行を足します。https の URL・
    別の端末の Docker(docker.context)・network_mode: host の dev サービスでは今のままです。手元の devbase が使う
    URL は変わりません。次の devbase up から効きます。確かめた環境は macOS の Docker Desktop です。

  • 既にある世代の名前で devbase snapshot create --name <名前> --full を打つと、その世代を今のボリュームの全体で
    作り直すようにしました(#458)。
    これまでは full.tar.zst を作り直せずに終了コード 1 で止まり、そのとき
    snapshot.snar だけが進んでいました。作り直した世代は前のフルと差分を持たず、その世代から前の時点へは戻せません。
    前の時点を残したいときは別の名前で作るか、先に devbase snapshot copy で写してください。控えに失敗したときは
    世代が打つ前のまま残ります。入れ替えの途中で止まった世代は restore がボリュームを消す前に止まり、同じ名前で
    もう一度 --full を打つと作り直せます。
    これまでに既存の世代の名前へ --full を打って失敗したことがあり、その後に同じ世代へ差分が積まれていれば、
    その世代の差分は失敗の前の変更を欠いていることがあります。
    世代のファイルからは見分けられないため、
    心当たりがあれば新しい世代を作ってください(devbase snapshot create)。

  • 既存の世代へ差分を積む devbase snapshot create --name <名前> と devbase up の自動スナップショットが失敗しても、
    世代の snapshot.snar と差分を打つ前のまま残すようにしました(#466)。
    これまでは失敗した回に snapshot.snar だけが
    進み、その後の差分が失敗の前の変更を含まず、復元でそのファイルが無いか古い中身になっていました。書く途中で止まった
    作りかけの incr-NNN.tar.zst も残り、復元がそのアーカイブで止まることがありました。今は失敗の後の差分が失敗の前の
    変更も含みます。tar が読み取りで止まった(終了コード 2 以上)控えも失敗として扱います。失敗したときの知らせ方
    (create は終了コード 1、devbase up は警告 1 行で起動を続ける)は変わりません。差分の作成は snapshot.snar.bak を作らなくなりました。
    これまでに差分の作成が失敗したことのある世代は、その後の差分が失敗の前の変更を欠いていることがあります。
    世代のファイルからは見分けられないため、心当たりがあれば新しい世代を作ってください(devbase snapshot create)。
    作りかけの差分で復元が止まる世代は、devbase snapshot restore <名前> --point <その前の番号> でその前の時点へ戻せます。

  • プロジェクトの env に DEV_SERVICE_NAME= と空で書いたとき、開発サービス名を dev として扱うようにしました(#425)。
    これまで devbase build は dev を建てる一方、up・login・open・post-start・scale・--expires の判定・
    token の配布は空の名前のサービスを探して開発サービスを見失っていました。未設定や空でない値のプロジェクトは変わりません。

  • SSH から立てた tmux のセッションに手元の Mac の端末から attach し直したとき、devbase editor open と devbase up --open が
    VS Code を開かず「SSH セッションを検出しました」とコマンドを提示するだけになっていたのを直しました。

    tmux 内では、SSH かどうかをペインのシェルに残った SSH_CONNECTION ではなく、tmux のセッション環境(attach のたびに
    更新される)で判定します。あわせて、接続できない VSCODE_IPC_HOOK_CLI と、ペインを作ったクライアントと attach し直したクライアントの SSH 状態が
    食い違う(SSH から立てた tmux に手元から、手元で立てた tmux に Remote-SSH から attach し直した)ペインに残る以前の
    VSCODE_IPC_HOOK_CLI(ウィンドウが開いたままで接続できても)は使わないようにしました。tmux のセッション環境にいまの
    クライアントの値があればそれを使い、無ければ SSH ではコマンドの提示、手元では手元の code の起動になります。
    このとき PATH に残る Remote-SSH の remote-cli の code は使わず、手元の code を起動します(見つからなければスキップします)。

  • 同じ秒に devbase snapshot restore を続けて打っても、復元前バックアップが前の控えを上書きしないようにしました(#473)。
    復元前バックアップの名前 pre-restore-<時刻>(秒まで)が既にある世代と重なったら、その世代には触らず、末尾に
    通し番号を付けた名前(pre-restore-<時刻>-2、それも重なれば -3 …)で新しく作ります。復元する世代がちょうど
    同じ秒の pre-restore-* でも、展開するのは打つ前のその世代の中身です。通し番号の名前もほかの pre-restore-* と
    同じ規則で保持・削除されます。