sccache
キャッシュライブラリ
sccache
概要
sccacheは、Mozillaが開発したccacheライクなコンパイラキャッシュツールです。コンパイル結果をキャッシュし、同じコードの再コンパイルを高速化します。
詳細
sccache(Shared Compilation Cache)は、C/C++、Rust、その他の言語のコンパイララッパーとして動作し、コンパイル結果をキャッシュして開発効率を大幅に向上させます。従来のccacheと異なり、リモートストレージ(Redis、S3、GCS、Memcachedなど)への分散キャッシュをサポートし、チーム全体でコンパイルキャッシュを共有できます。特にRustプロジェクトでの使用に最適化されており、Cargoとの統合も簡単です。ローカルキャッシュとリモートキャッシュの両方をサポートし、CI/CD環境での高速ビルドを実現します。
メリット・デメリット
メリット
- 高速コンパイル: 同じコードの再コンパイルを劇的に高速化
- 分散キャッシュ: チーム全体でコンパイルキャッシュを共有
- 多言語対応: C/C++、Rust、その他の言語をサポート
- 豊富なストレージ: Redis、S3、GCS、Memcachedなど多様なバックエンド
- CI/CD最適化: 継続的インテグレーション環境での高速ビルド
- 設定の柔軟性: ローカルとリモートキャッシュの使い分けが可能
デメリット
- 初期設定: 分散環境の構築には設定が複雑
- ストレージ依存: リモートキャッシュはストレージサービスが必要
- 互換性: 一部のコンパイラオプションでは制限あり
- デバッグ: キャッシュミスの原因分析が困難な場合がある
主要リンク
書き方の例
基本的な使用方法
# sccacheのインストール
brew install sccache # macOS
scoop install sccache # Windows
cargo install sccache --locked # ソースから
# 基本的なコンパイルコマンド
sccache gcc -o program.o -c program.c
# sccacheサーバーの起動と停止
sccache --start-server
sccache --stop-server
# キャッシュ統計の確認
sccache --show-stats
Rustプロジェクトでの設定
# ~/.cargo/config.toml
[build]
rustc-wrapper = "/path/to/sccache"
# または環境変数で設定
export RUSTC_WRAPPER=/path/to/sccache
cargo build
CMakeプロジェクトでの設定
# CMakeLists.txt
find_program(SCCACHE sccache REQUIRED)
set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE})
set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE})
# MSVC使用時の追加設定
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
cmake_policy(SET CMP0141 NEW)
設定ファイルの例
# ~/.config/sccache/config
[cache.disk]
dir = "/tmp/.cache/sccache"
size = 7516192768 # 7 GiB
[cache.redis]
endpoint = "redis://127.0.0.1:6379"
expiration = 3600
key_prefix = "/sccache"
[cache.s3]
bucket = "my-build-cache"
endpoint = "s3-us-east-1.amazonaws.com"
key_prefix = "sccache"
分散キャッシュ設定
# client config
[dist]
scheduler_url = "https://cache-scheduler.example.com"
toolchain_cache_size = 5368709120
[dist.auth]
type = "token"
token = "your-auth-token"
# server config
[builder]
type = "overlay"
build_dir = "/tmp/build"
bwrap_path = "/usr/bin/bwrap"
環境変数での設定
# キャッシュサイズの設定
export SCCACHE_CACHE_SIZE="10G"
# プリプロセッサキャッシュモード
export SCCACHE_DIRECT=true
# ローカルキャッシュを読み取り専用に
export SCCACHE_LOCAL_RW_MODE=READ_ONLY
# デバッグログの有効化
export SCCACHE_LOG=debug
export SCCACHE_ERROR_LOG=/tmp/sccache.log
GitHub Actionsでの使用
# .github/workflows/build.yml
- name: Configure sccache
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_RESULTS_URL', process.env.ACTIONS_RESULTS_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Build with cache
run: |
export RUSTC_WRAPPER=sccache
cargo build --release
env:
SCCACHE_GHA_ENABLED: "on"