再現可能なビルドとは何か?
再現可能なビルドは、同じソースからビット単位で同一の出力を生成します - 誰が、どこで、いつbuildしても同じです。
同じコミットを2回buildして異なるバイナリが得られるなら、そのバイナリがそのソースから来たことを証明できません。再現可能なビルドは変動の要因を取り除き、出力を決定的にします。これは検証可能なサプライチェーンの基盤です。
何が再現性を壊すのか
- 埋め込まれたタイムスタンプやbuild日時。
- 非決定的な順序(ファイルシステム、hash map)。
- 出力に焼き付けられた絶対パスやhostname。
- 固定されていない依存関係やtoolchainのバージョン。
チームはどうやってそれを実現するか
すべての入力を固定し(lockfile、固定されたツールバージョン)、タイムスタンプを正規化し(例えば SOURCE_DATE_EPOCH)、入力を決定的にソートし、絶対パスを取り除きます。目標は、出力に影響を与えるのがソースだけになることです。
小さな例
同じコミットの2回のCI実行が、埋め込まれたタイムスタンプだけが異なるアーカイブを生成するとします。SOURCE_DATE_EPOCH をコミット時刻に設定し、ファイルエントリをソートすると、2つのアーカイブは同一のhashになります - 違いがコードではなく偶発的なものだったことが証明されます。
なぜそれが重要なのか
再現性により、独立した第三者が再ビルドし、公開されたartifactがそのソースと一致することを確認できます - 改ざんされたbuildパイプラインに対する重要な防御であり、強力な出所証明の前提条件です。
再現可能 vs 十分に決定的
完全なビット単位の再現性は理想ですが、部分的な決定性でもcacheやデバッグに役立ちます。多くのチームは、非決定性の要因を1つずつ取り除きながら、段階的にこれを追求します。
重要なポイント
- 再現可能なビルドは、同一のソースから同一の出力を生み出します。
- タイムスタンプ、順序、固定されていない入力が通常の原因です。
- 検証可能で改ざん耐性のあるサプライチェーンを支えます。
関連ガイド
What Is a Hermetic Build?A hermetic build runs in a sealed environment with all inputs declared, isolated from network and host. Learn…
What Is Build Provenance?Build provenance is a signed, verifiable record of how an artifact was built and from what source. Learn how…
What Is a Lockfile?A lockfile pins the exact versions of every dependency so installs are reproducible. Learn why CI should inst…