痛みの整理:緑のrsync終了コードが「画面が古い」を救わない
痛み1:検証は通るのにホットリロードが来ない。チームはrsyncとSFTPの成功を祝い、Vite・Webpack・Xcode周辺ツールで何時間も溶かす。原因は輸送ではなく、監視層が理解できるイベントが来ていないことにありがちです。
痛み2:真実はリモート、手元はミラー。権威あるビルドツリーはリモートMacにあり、ノートは部分コピーです。監視は対話速度向けに最適化され、サイレントなリモート書き込みから意図を推論できません。通知経路を設計しない限り足りません。
痛み3:マウントとコピーを混同する。SSHFS系のパスとrsyncの原子置換は、オブザーバから見て別の書き込みリズムです。まずSSHFSとrsyncの判断表を読み、監視フラグの前にアーキテクチャを揃えます。
痛み4:CI並列が乱れを増幅する。同一ディレクトリに複数ジョブが書くとmtimeと一時ファイルの跡が増分ツールを惑わせます。監視方針を並行セッションの設計と同じ表で計画してください。
なぜSFTP/rsyncの書き込みがwatcherに届かないことがあるか
macOSはカーネルイベントを上層で結合・デバウンスします。rsyncは一時ファイル+リネームを使うため、一部の監視スタックはノイズとして捨てます。SFTPはPOSIX書き込みを代理実行するためイベントは本物ですが、inode再利用が一時ファイルに似ると消費側が冗長とみなして捨てることがあります。
エディタは起動時だけルートを登録し、セッション途中の一括書き込みを取り逃がす例があります。Finderは新サイズを見せても、bundlerが古いfdを握ったままになることもあります。
整合性ゲートは「バイトが正しいか」であり「UIが更新されたか」ではありません。SHA256ゲートと「消費側の確認」は別段にし、大きな転送では原子リリースと揃えます。事後調査はUnified Loggingとローカル監視ログの両方を見て、通知ホップの欠落を疑ってください。
測れる基準値:数字で議論を止める
同期方針を変えるたびに五つを記録します:rsyncの実時間、転送バイト、ファイル数、ソースとシンクの最大mtime差、promote後十秒以内に監視が動いたか。数字がないと感情論になります。
同期後にカナリアをtouchして監視ログを確認し、IDE版・監視バックエンド・踏み台別名をRunbookに固定します。
判断マトリクス:監視、ポーリング、CI、マウント開発、リモート優先
| 方針 | 得るもの | 払うコスト | 向く場面 |
|---|---|---|---|
| ローカル監視+rsync promote | promote後の対話は速い | 原子切替と任意touchの設計が要る | distが明確なWeb系 |
| 高頻度ポーリング | 更新タイミングが予測しやすい | CPUとファン、バッテリー | 短期プロトタイプ |
| CIのWebhook/メッセージ | FSEvents非依存の失効 | 安全な配信経路が要る | 分散チームと強い統制 |
| SSHFS等のマウント | パス感覚の統一 | 遅延・キャッシュ・オフライン痛み | 小ファイルだらけのコンテンツ倉庫 |
| リモート優先開発 | 単一のファイルシステム真実 | ネットワーク体験とセッション安定 | 署名、GPU、Apple専用ビルド |
リポジトリごとに主パターンを一つ選び、macOSやIDEの大版本のたびに見直します。
実践手順:再現、promote、検証までを属人化しない
# 1) ベースライン(例)
# ls -le ./dist/index.html && stat -f "%i %z %Sm" ./dist/index.html
# 2) rsync:削除と遅延マップ(ポリシーに合わせて調整)
# rsync -av --delete --delay-updates ./dist/ user@remote-mac:/Volumes/builds/app/dist/
# 3) 任意:カナリアのmtime更新
# touch ./dist/.watcher-canary
# 4) 非対話SFTPの抜き取り(例)
# sftp -b batch.txt user@remote-mac
# 5) 方針どおり消費側だけ再起動
# pnpm dev --force || npm run dev -- --clearCache
手順はチャットではなくバージョン管理に所有者付きで置き、チェックサムとロールバックを同じページに載せます。踏み台越えのパスは、ローカルで見ているディレクトリとProxyJumpの別名を一致させます。
読む順番:転送→整合性→体験
推奨は本文→SSHFSとrsync→SHA256ゲート→スループットと並列→ホームです。「同期済み」は整合性と可視性の二義性があると短く共有し、リモート死活と監視ヘルスを並べて見てください。
FAQとSFTPMACホスト型リモートMacを検討する理由
touchは万能ですか?
mtime駆動の多くには効きますが、fdキャッシュやデーモン再起動が要るケースは別です。道具の一つ。
全面SSHFSにすべきですか?
マトリクスを読み、ファイルサイズ分布で遅延を測ってからです。バグのクラスを入れ替えるトレードです。
まとめ:SFTP/rsyncはバイトを運び、FSEventsとIDEはローカルの変更物語を解釈します。promoteの意味、基準値、アーキテクチャを揃えて閉じてください。
限界:自前のリモートMac群はパッチ、ストレージ、セッション衛生、オンコールを要ります。安定したSFTP/rsync入口を運用込みで欲しいならSFTPMACホスト型リモートMacを検討してください。監視Runbook、rsync承認、リリース週の容量検証の所有者を明文化します。
ホスト型プールは安定した入口と運用規律を束ね、同期と監視の物語をチーム横断で再現可能にします。
