なぜリモート Mac で Git/Homebrew/npm はタイムアウト・切断しやすいか
リモート Mac は物理的にリージョンが離れているため RTT(往復遅延)が大きくなり、長時間の clone や install で TCP セッションが切れやすくなります。また HTTP のデフォルトタイムアウトが短く、大容量転送の途中で切断が発生しやすいです。Git の HTTP 転送は postBuffer が小さいと分割送信になり、Homebrew/npm はリトライ回数が少ないと一度のネットワーク揺らぎで失敗します。
Git のタイムアウトと断線リトライの実行可能パラメータ
以下をグローバルまたはリポジトリ単位で設定してください。
git config --global http.postBuffer 524288000(約 500MB。大きな clone で切断を防ぎます)git config --global http.lowSpeedLimit 1000 --global http.lowSpeedTime 60(低速度で 60 秒続いたら中止)- clone 時に
git clone --config http.postBuffer=524288000 <url>で一時的に指定も可能です。 - SSH 利用時は
~/.ssh/configでControlMaster auto、ControlPath、ControlPersist 600を設定し、同一ホストへの再接続を維持すると安定します。
Homebrew と npm のリトライ・タイムアウト設定手順
Homebrew: 環境変数 HOMEBREW_CURL_RETRIES=5 でリトライ回数を増やします。キャッシュを有効にし、可能なら HOMEBREW_API_DOMAIN や mirror を近いリージョンに設定してください。
npm: プロジェクトまたはホームの .npmrc に fetch-retries=5、fetch-retry-mintimeout=20000、fetch-timeout=120000 を追加します。CI では npm ci とキャッシュディレクトリの再利用で再取得を減らせます。
-
1
echo "fetch-retries=5" >> .npmrcとecho "fetch-timeout=120000" >> .npmrcでリトライとタイムアウトを設定。 -
2
Homebrew は
export HOMEBREW_CURL_RETRIES=5を.zshrc等に追記。
自前ミラー vs プロキシ vs ミラーサイト選定比較表
| 方式 | 速度・安定性 | 運用コスト | おすすめシーン |
|---|---|---|---|
| 自前ミラー | 高(自環境に最適化可) | 高(構築・同期必要) | CI 多頻度・チーム規模大 |
| プロキシ | 中〜高(設定次第) | 低 | Git/HTTP を一括で経路変更したい場合 |
| 公設ミラーサイト | 中(リージョン・鮮度に依存) | 不要 | 個人・小規模、まずは手軽に試したい場合 |
まとめとおすすめ
リモート Mac で安定してプルするには、(1) Git の http.postBuffer・timeout・ControlPersist、(2) Homebrew の HOMEBREW_CURL_RETRIES とキャッシュ、(3) npm の fetch-retries・fetch-timeout を設定し、必要に応じて自前ミラー・プロキシ・ミラーサイトのいずれかを選定するのがおすすめです。