リモート Mac の Bazel CI では 外源キャッシュ階層の誤用 がボトルネックになりやすいです。--disk_cache--repository_cache--remote_cache--jobs、Git 浅複製の IO を閾値表と .bazelrcに整理します。

リモート Mac における Bazel 外源・レジストリのボトルネック像

軸は RTT×ホップ同時フェッチ。外源ルールは TLS・帯域を直撃し、共有ランナーでは repository_cache 競合 でタイムアウト表示のディスク待ちも起きます。

症状疑い切り分け
fetch 長停/毎回重い外源 or repository_cache単独 fetch+キャッシュパス固定
並列でランダム失敗FD/帯域--jobs×concurrency を下げる

ミラー運用は 跨境 Git/ミラー最適化 と併読。

disk cache と remote cache の選定しきい値表

--repository_cache=外源取得--disk_cache=ローカル成果物--remote_cache=チーム共有の順で覚えると取り違えません。

条件推奨要点
単一ランナー・大容量ディスクrepository_cachedisk_cachefetch/再ビルドが安い
複数 Mac で成果物共有remote_cache 追加アーティファクト再利用
ディスク逼迫・高並列remote_cache 主、ローカル縮小inode/容量枯渇を避ける
.bazelrc 断片
common --repository_cache=~/.cache/bazel-repo
build --disk_cache=~/.cache/bazel-disk
build --remote_cache=grpcs://bazel-cache.example.com:443
build --remote_upload_local_results=true

JVM 並走時は Gradle/Maven マトリクスボリューム単位でキャッシュパスを分離

WORKSPACE/MODULE フェッチ失敗:再試行・timeout パラメータ

フラグ名は Bazel メジャー依存 のため .bazelversion+bazelisk 固定後、bazel help build で HTTP/repository 系を確認します。

項目置き場所メモ
版固定.bazelversionフラグ互換の前提
registrycommon --registry=…README と同一 URL
再試行・timeoutcommon版対応のみ列挙
fetch 分離CIfetch 後に test/build

チェック:--verbose_failures で URL を残す/CI 再試行は 2s・4s・8s 最大 3 回/ロックは別 PR。

Git 浅複製と並行するディレクトリ・IO FAQ

メイン --depth 1 と Bazel 外源は IO が別。浅複製+archive+高 --jobs はディスク飽和をネットエラーに見せます。repository_cache は永続ボリューム、inode も監視。複数パイプラインは 並列 pull・ディスク FAQ の上限表を参照。

ノード地域と並列コンパイルが fetch 安定性に与える影響

鏡が遠いと fetch が伸び、--jobs がディスク帯域を奪います。ノードをソース近傍に、跨境チームは fetch を直列化--jobs はコアの 0.5〜0.75 倍から試し、ヒット率を見て上げます。

まとめ:repository と action のキャッシュ分離が最短

外源=repository_cache+回線、成果物=disk_cacheremote_cache と割り切ると切り分けが速いです。ホームブログ一覧ヘルプ(SSH)

料金購入はログイン不要で閲覧可。fetch 安定化は ノード地域+repository_cacheが効きます。

Bazel・remote cache・CI

bazel fetch 安定化は キャッシュ階層+ノード地域

Apple Silicon リモート Mac に self-hosted を置き、永続ボリュームへキャッシュを載せやすくします。

24時間以内デリバリー 複数リージョン いつでも解約可