Skip to content

docs: tmux 追随フックの生存確認を接続ベースに修正 - #101

Merged
takemi-ohama merged 1 commit into
mainfrom
docs/tmux-ipc-hook-connect-check
Aug 19, 2026
Merged

docs: tmux 追随フックの生存確認を接続ベースに修正#101
takemi-ohama merged 1 commit into
mainfrom
docs/tmux-ipc-hook-connect-check

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

概要

#100 で devbase 側の IPC ソケット判定を connect ベースにしましたが、ドキュメントが配っている tmux プロンプトフックのサンプルは test -S のままで、同じ穴が残っていました。実環境でこれが原因となり、#100 のマージ後も devbase up --open が自動で開かない状態が続いていたため修正します。

症状と原因

~/.tmux.confupdate-environment は正しく効いていて、tmux のセッション環境には生きたソケットが入っています。それでも既に動いているペインのシェルだけが古い値を持ち続けていました。

VSCODE_IPC_HOOK_CLI状態
tmux セッション環境...8dd26478...ALIVE
実行中のペインのシェル...8d9a04ee...DEAD(孤児)

橋渡しをするはずのプロンプトフックが、次の guard で早期 return していたためです。

[ -n"${VSCODE_IPC_HOOK_CLI:-}" ] && [ -S"${VSCODE_IPC_HOOK_CLI}" ] &&return 0

-S はファイルの種別しか見ないので、VS Code の異常終了で残った孤児ソケットも通過します。ls でも test -S でも生きているものと区別が付かず、生死の判定には実際の接続が必要です。

tmux セッションの作成時刻と死んだソケットの mtime が一致することからも裏付けが取れました。

tmux セッション作成対応する死んだソケット
devbase-1 / devbase-208-16 04:148d9a04ee / 846482f8(同時刻)
devbase-3 / devbase-408-19 10:06 / 10:125656afb6 / 8c041b39(08-19 10:06)

変更点

  • サンプルの guard に nc -U -w 1 <sock> </dev/null による接続確認を追加
  • -S は前段に残す。ソケットファイルが無い一般ケースでは追加のプロセスを起こさないため
  • 本文に「ls でも test -S でも見分けが付かない」旨を明記
  • CHANGELOG に Fixed エントリを追加

nc のフラグについて

macOS の nc-z を付けると Unix ドメインソケットで誤判定します。生きているソケットに対しても rc=1 を返すため、-z は付けていません。

コマンド生存ソケット孤児ソケット
nc -z -U <sock>rc=1(誤判定rc=1
nc -U -w 1 <sock> </dev/nullrc=0rc=1

動作確認

  • ドキュメントの bash スニペットを抽出して bash -n — 構文 OK
  • 実環境の ~/.bash_profile に同じ修正を適用し、関数を直接呼んで検証
    • 孤児ソケットを持った状態 → 8d9a04ee から生きている 8dd26478 へ拾い直す
    • 生きたソケットを持った状態 → 値は変化せず、無駄な拾い直しをしない
  • nc の挙動を実測(上表)
  • ruff check --select=E9,F63,F7,F82 lib(CI と同じ引数)— All checks passed

PR #100 で devbase 側の判定は connect ベースにしたが、docs が配っている tmux
プロンプトフックのサンプルは `test -S` のままだった。-S はファイルの種別しか見ない
ため、VS Code の異常終了で残った listen していない孤児ソケットも通過してしまい、
フックが tmux show-environment からの拾い直しを早期 return でスキップする。
その結果、tmux セッション環境には生きたソケットが入っているのに、すでに動いている
ペインのシェルだけが古い値を持ち続け、`devbase up --open` が毎回「手元で実行する
コマンドの提示」へ degrade していた(実機で再現を確認)。
- サンプルの guard に `nc -U -w 1 <sock> </dev/null` による接続確認を追加。
macOS の nc は -z を付けると Unix ドメインソケットで誤判定するため付けない
(生存ソケットで rc=1 になることを実測)
- -S を前段に残し、ソケットファイルが無い一般ケースでは nc を起動しないままにする
- 孤児ソケットは ls でも test -S でも見分けが付かない旨を本文に明記
- CHANGELOG に Fixed エントリを追加
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01622CAKyYfonYuZ6AqRJvDg
@takemi-ohama
takemi-ohama merged commit 35c4a86 into mainAug 19, 2026
5 checks passed
@takemi-ohama
takemi-ohama deleted the docs/tmux-ipc-hook-connect-check branch August 19, 2026 15:55
Sign up for freeto 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

@takemi-ohama