Skip to content
Latchkey

sccache vs ccache:CI 向けのコンパイラキャッシュ

ccache は C/C++ 向けの長年使われてきたローカルコンパイラキャッシュです。sccache は共有/リモートストレージを追加し、Rust を含むより多くの言語をサポートします。

どちらもコンパイラの出力をキャッシュし、変更のないソースを再コンパイルしません。ccache は成熟しており、ローカルの C/C++ キャッシュに特化しています。sccache(Mozilla 製)はリモートストレージ(S3、GCS など)を利用でき、C/C++ に加えて Rust なども対応するため、ephemeral な CI runner に適しています。

sccacheccache
言語C/C++、Rust、その他C/C++(およびラッパー経由)
キャッシュの場所ローカルまたはリモート(S3/GCS など)ローカルディスク
ephemeral な CI への適合高い(共有リモートキャッシュ)キャッシュの永続化が必要
成熟度確立済み非常に成熟し、広く使われている
Rust サポートありネイティブには非対応

sccache が優れる場面

ephemeral な CI runner では、ローカルキャッシュは job 間で消えてしまいます。sccache は共有リモートバックエンド(S3/GCS)を指定でき、キャッシュヒットが runner や run をまたいで維持されます。また ccache がネイティブに扱わない Rust のコンパイルもキャッシュします。Rust の CI や分散 build には sccache が自然な選択です。

ccache が優れる場面

永続的なマシン上の C/C++、あるいはローカルのキャッシュディレクトリを保持できる環境では、ccache は極めて成熟しており、シンプルで高速、豊富な設定と長い実績を持ちます。リモートストレージや Rust が不要なら、ccache に勝るものはなかなかありません。

CI では

ccache では、CI の cache アクションでキャッシュディレクトリを永続化します(キーは toolchain + ソース)。sccache では、ephemeral な runner をまたいでヒットするようリモートバックエンドを設定します。いずれにせよ、コンパイラキャッシュは再 build の時間を大幅に削減できます。

結論

Rust、分散チーム、あるいは共有リモートキャッシュを必要とする ephemeral な runner には sccache を、永続的なマシン上での成熟でシンプルなローカル C/C++ キャッシュには ccache を使いましょう。どちらも繰り返しの build を大きく高速化します。

関連ガイド