2026原子リリースrsync

2026 リモート Mac ビルド成果物の原子リリース:in-place SFTP と rsync ステージング+シンボリック切替

リモート Mac へ成果物を配る際、本番ツリーを SFTP で直接上書きすると、転送中に新旧ファイルが混在し CDN やキャッシュと組み合わさって不整合が出やすくなります。本稿では releases/タイムスタンプ へ rsync し、検証後に current シンボリックを ln -sfn で切り替える手順を五段階で示します。比較表、ディスク余裕 2.5 倍・タイムアウト 3 倍などのゲート指標、ロールバック手順、および自管より安定した配信を求める場合のホスト型リモート Mac(SFTPMAC)の位置づけを整理します。関連:SFTP と rsync GUI 選定権限と監査の比較

原子リリースrsyncCI/CDリモート Mac
リモート Mac での rsync ステージングとシンボリック切替のイメージ

2026 年に現場で起きやすい三つの痛み

1) 読み書きの交錯。 転送ウィンドウ中、ユーザーは新 HTML と旧アセット、あるいはその逆の組み合わせを取得する可能性があります。

2) 部分失敗後の曖昧さ。 どのファイルが最終的に正しいかを名指しできず、復旧に時間がかかります。

3) 監査と鍵管理。 共有アカウントはログの粒度を粗くし、鍵ローテーションを難しくします。

なぜ in-place SFTP は依然として高リスクか

問題はプロトコルではなく「公開ディレクトリを継続変異させる」ことです。新しいディレクトリに完全なスナップショットを構築してからシンボリックだけを切り替えれば、利用者が見るパスは検証完了まで旧版のままです。rsync はファイル単位でも、宛先が新規フォルダであればこの性質を保てます。

意思決定表:直接上書き対ステージング+シンボリック

観点in-placereleases + current
中間状態の露出長い切替の一瞬に限定
ロールバック再転送が多い旧ディレクトリが残れば数秒
CI 連携順序ミスが出やすい同期・ゲート・切替の三段階で標準化

五手順のコマンド例

TS=$(date +%Y%m%d%H%M)
mkdir -p /srv/app/releases/$TS
rsync -av --delete-after --exclude '.git' ./dist/ deploy@remote-mac:/srv/app/releases/$TS/
ssh deploy@remote-mac "test -f /srv/app/releases/$TS/index.html && shasum -a 256 /srv/app/releases/$TS/index.html"
ssh deploy@remote-mac "ln -sfn /srv/app/releases/$TS /srv/app/current && readlink /srv/app/current"

Web サーバのドキュメントルートを current に向けてください。

ゲート指標と監査フィールド

最大成果物サイズの 2.5 倍 以上の空き容量を維持します。CI タイムアウトは中央値の 3 倍 を目安にします。監査ログには実行者、UTC 時刻、ホスト、$TS、切替前後の readlink を残し 90 日 保管を推奨します。デプロイユーザーは releases/* のみ書き込み、実行ユーザーは current 経由で読み取りのみに分離します。

ロールバックと SFTPMAC リモート Mac の価値

  • $TS が残っていることを確認する。
  • ln -sfncurrent を旧版へ戻す。
  • 代表ファイルのハッシュとエラーレートを短時間監視する。

このパターンは自宅の Mac mini、クラウド Mac、マネージドのリモート Mac のいずれでも同じです。差はディスク監視、外向き帯域、常時稼働のコストです。リリース頻度が上がるほど、ディレクトリ隔離と SFTP 准入をプラットフォーム側に任せる利得が大きくなります。

SFTPMAC は開発者と CI 向けのリモート Mac と SFTP を提供し、隔離パス内で同じ rsync+シンボリック運用を続けながら、到達性と権限ベースラインをサービス側で支えます。自管ノードの夜間障害対応を減らし、プロダクト配信に集中したいチーム向けです。

in-place SFTP の主な問題は?

転送中の混在状態と、失敗後のスナップショット不明瞭さです。

原子リリースを維持したまま運用負荷を下げるには、SFTPMAC のプランとノード仕様を確認してください。