ハーメティックビルドとは何か?
ハーメティックビルドは密閉された環境で実行され、すべての入力が事前に宣言され、ネットワークやホストマシンから何も漏れ込みません。
ハーメティック性とは、buildが明示的に宣言された入力だけに依存することを意味します - ホストからの隠れた読み取りも、build途中のインターネットからの取得もありません。この隔離こそが、buildを再現可能にし、安全にcache可能にするものです。
"密閉" とは何を意味するか
ハーメティックビルドは、たまたまマシンにインストールされているものに手を伸ばしたり、その場で何かをダウンロードしたりできません。すべてのソース、依存関係、ツールは宣言された入力として提供されるため、同じ入力は常に同じ結果を生みます。
小さな例
非ハーメティックなbuildは、build途中で apt-get install を実行し、その日たまたま最新のバージョンを取得するかもしれません。対してハーメティックビルドは、正確なツールを固定された入力として宣言するため、ホストにインストールされているパッケージに関係なくbuildは同一になります。
ハーメティック vs 再現可能
ハーメティック性は入力の隔離に関するもので、再現性は同一の出力に関するものです。ハーメティック性は再現性を強力に後押しします - buildが宣言された入力しか見られないなら、宣言されていない変動が忍び込むことはできません。
なぜcachingに役立つのか
リモートcacheは、あるステップの宣言された入力がその出力を完全に決定する場合にのみ安全です。ハーメティックビルドはそれを保証するため、古い結果や誤った結果を招くリスクなしに、積極的にcachingできます。Bazelのようなツールはこれを中心に構築されています。
ハーメティック性のコスト
すべての入力を宣言するのは、buildにホストから物を取ってこさせるよりも手間がかかります。その見返りは信頼性です: ハーメティックビルドは、宣言されていないホスト依存から生じる "自分のマシンでは動く" という失敗をめったに起こしません。
重要なポイント
- ハーメティックビルドは、明示的に宣言された入力だけに依存します。
- buildをホストとネットワークから隔離します。
- ハーメティック性は、信頼できる再現性と安全なcachingを可能にします。