リモート Mac CI で vcpkg と FetchContent の経路と並列を固定する実務ガイドです。直結/ミラー/自前キャッシュと
builtin-baseline と切断更新を一枚化しました。ホーム・ブログ一覧・大容量取得はHF 転送表。
課題:二重取得・baseline 漂移・並列と帯域の三層
- 二重取得:同種を二系統から取らないよう README で供給元を一本化する。
- baseline:
builtin-baselineが無いと registry とバイナリ条件がブランチ間でズレる。 - 並列:取得律速なのに本数と
-jだけ上げると外向きが先に飽和する。
比較表:直結/ミラー/自前バイナリキャッシュ
| 経路 | 向き先の例 | 長所 | 注意点 |
|---|---|---|---|
| 直結 | 公式 Git/registry | 単純 | RTT と帯域で不安定 |
| ミラー | 社内 Git/registry | 審査付きで安定 | 遅延と baseline 管理が要る |
| 自前キャッシュ | VCPKG_BINARY_SOURCES | 取得を大きく短縮 | triplet・compiler・vcpkg コミットをキーへ |
決定マトリクス(シナリオ別のおすすめ組合せ)
| シナリオ | vcpkg 側 | FetchContent 側 | 並列の目安 |
|---|---|---|---|
| 社内完結 | 社内 registry+BC | 社内 GIT_REPOSITORY+SHA | 取得は直列寄り |
| 跨境律速 | BC 優先+baseline 固定 | GIT_SHALLOW+切断 ON | 本数を抑え BC を温める |
| オフライン | 内部ポート寄せ | FULLY_DISCONNECTED+事前展開 | 外向き最小・手間増 |
実行パラメータとコマンド例
| 名前 | 役割 | 例 |
|---|---|---|
VCPKG_ROOT/toolchain | vcpkg 接続 | -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake |
VCPKG_FEATURE_FLAGS | manifest/binarycaching | binarycaching,manifests |
VCPKG_BINARY_SOURCES | キャッシュ | clear;files,/var/tmp/vcpkg-bc,readwrite |
| FetchContent 切断 | 再取得抑止 | -DFETCHCONTENT_UPDATES_DISCONNECTED=ON など |
最小例(arm64-osx)
export VCPKG_ROOT="$HOME/vcpkg" VCPKG_DEFAULT_TRIPLET=arm64-osx
export VCPKG_FEATURE_FLAGS=binarycaching,manifests
export VCPKG_BINARY_SOURCES='clear;files,/var/tmp/vcpkg-bc,readwrite'
"$VCPKG_ROOT/vcpkg" install
cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" \
-DFETCHCONTENT_UPDATES_DISCONNECTED=ON
cmake --build build -j"$(sysctl -n hw.ncpu)"
vcpkg.json の builtin-baseline と registry は同じ PR でレビューする。
lockfile 一貫性の検収チェックリスト
- baseline:専用 PR のみ更新しポート差分を目視する。
- FetchContent:
GIT_TAGは SHA 固定。GIT_SHALLOWとミラー側ポリシーを一致させる。 - キャッシュ鍵:vcpkg コミット・
vcpkg.jsonダイジェスト・triplet・Xcode メジャーを CI キーへ。
引用目安:外向き律速なら本数×-jを先に下げる。VCPKG_MAX_CONCURRENCY は四〜八から壁時計比較。populate 後に FETCHCONTENT_UPDATES_DISCONNECTED を ON。
meta title/description テンプレート
Title 型:2026|{製品}|vcpkg×FetchContent|リモートMacCI|MacPull。Description 型:{読者}向け。直結/ミラー/自前BC、baseline、切断、並列、検収。{補足120字以内}。 先頭に年号と主要ツール名を置くと検索意図と一致しやすいです。
手順チェックリスト(導入〜検証)
1
runner から curl -I で到達性とプロキシを確認する。
2
vcpkg.json の baseline と VCPKG_BINARY_SOURCES をコミットする。
3
toolchain 読込後、FetchContent の GIT_TAG を固定しレビューに載せる。
4
クリーン一回→BC ON でログと所要を比較する。
5
PR で baseline 差分と所要上限を必須ゲートにする。
FAQ
vcpkg と FetchContent で二重ビルドになりますか?
なり得ます。供給元を README で一本化してください。
FULLY_DISCONNECTED で失敗する
依存を事前展開するか、CI キャッシュで _deps を復元してから ON にします。
バイナリキャッシュにヒットしない
triplet・ツールチェーン・vcpkg コミットが生成時とズレていることが多いです。
まとめ:経路・baseline・並列の三本柱
経路は表で決め、baseline とタグでロックし、並列は帯域に合わせて段階的に上げます。