# コンテンツアドレス指定ストレージ
## 定義
コンテンツアドレス指定ストレージ(content-addressed storage)とは、データそのもの(またはその構築に使われた入力全体)の暗号学的ハッシュ値から一意な識別子・格納先パスを導出する記憶方式である。[[@2004__LISA__Nix - A Safe and Policy-Free System for Software Deployment]] では、コンポーネントのビルドに関わる全入力(ソース・ビルドスクリプト・依存コンポーネントのストアパスなど)をハッシュ化してストアパス(例: `/nix/store/eeeeaf42e56b-subversion-0.32.1`)を計算する方式として導入されている。名前が中身(の生成過程)から一意に決まるため、同一入力から得られたコンポーネントは常に同じ格納先を共有し(最大共有)、異なる入力から得られたコンポーネントは決して衝突しない。
## 未解決の問い
- コンテンツアドレス指定は、あるユーザーがビルドした結果を別ユーザーが安全に再利用する「ビルド結果の相互信頼」をどこまで実現できるか。Nix論文はハッシュの完全性がこれを安全にしうると展望するのみで、検証機構の具体設計には踏み込んでいない。
- ハッシュの対象を「宣言された入力全体」にするか「出力データそのもの」にするか(Nixのderivationハッシュ vs Gitのブロブハッシュ的な方式)で、依存関係の完全性検出や再現性の保証範囲がどう変わるか。
- コンテンツアドレス指定ストレージと、Docker/OCIのレイヤーキャッシュや Bazel のリモートキャッシュのような後発システムとの間で、設計の収斂点と相違点は何か。
## 関連
- [[@2004__LISA__Nix - A Safe and Policy-Free System for Software Deployment]] — ビルド入力のハッシュ化によるストアパス計算の原型的な実装。
- [[イミュータブルインフラストラクチャ]] — コンテンツアドレス指定によって実現される不変なコンポーネントストアと、それを土台にしたアトミックな環境切り替えの関係。
## 出典
- [[@2004__LISA__Nix - A Safe and Policy-Free System for Software Deployment]]