【ニックスさいげんかのうびるど】

Nix(再現可能ビルド) とは?

公開:
💡 レシピが同じなら、どのキッチンでも同じ料理が出てくる
📌 このページのポイント
Nix 再現可能ビルド flake.nix + flake.lock Nix Build ハッシュで固定 同一の成果物 /nix/store/abc123… どの環境でも同じ結果 ローカル開発 nix develop CI 環境 nix build 本番環境 nix build 同じ flake.lock → /nix/store のパスが同一 → 完全に同じ動作
Nix再現可能ビルドのイメージ:同じ設定からどの環境でも同一の成果物が生成される
ひよこ ひよこ
ペンギン先生、「Nixで再現可能ビルド」って聞いたんだけど、普通のパッケージ管理と何が違うの?
ペンギン先生 ペンギン先生
普通のパッケージマネージャーは「バージョン番号」で依存を指定するだけだけど、Nix依存関係のすべてをSHA256ハッシュで固定するんだよ。だから同じ設定ファイルなら世界中どこでも完全に同じビルド結果が得られるんだ。
ひよこ ひよこ
じゃあ「自分のPCでは動くのにCIで落ちる」みたいな問題がなくなるの?
ペンギン先生 ペンギン先生
そのとおり!ライブラリのバージョンがこっそり上がって挙動が変わる「環境ドリフト」が原因のことが多いんだけど、Nixは依存の木全体を固定するから再現性が完璧に保たれるよ。
ひよこ ひよこ
Dockerと何が違うの? Dockerも同じイメージで同じ結果になるよね?
ペンギン先生 ペンギン先生
Dockerコンテナ単位で隔離するけど、イメージのビルド自体はネットワーク取得に依存していて完全には再現できないことがあるんだ。NixDockerイメージそのものをNixで宣言的に生成できるから、より根本的な再現性を持っているよ。
ひよこ ひよこ
flake.nixっていうファイルを聞いたんだけど、それが設定ファイルなの?
ペンギン先生 ペンギン先生
そうだよ。Nix Flakesという仕組みで、プロジェクトの依存関係と開発環境をflake.nixに書いて、flake.lockで全依存のハッシュをロックするんだ。`nix develop` 一発でチーム全員が同じ開発環境に入れるよ。
ひよこ ひよこ
NixOSっていうOSもあるって聞いたけど、それもNixと関係あるの?
ペンギン先生 ペンギン先生
NixOSはNixを使ってOSの設定全体を宣言的に管理するLinuxディストリビューションだよ。ブートローダーからカーネルモジュール、インストール済みパッケージまで全部1つの設定ファイルに記述でき、設定を変えるたびに以前の状態へロールバックできるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
Nix再現可能ビルド」って出てきたら「環境差異ゼロのビルドシステム」と思えればだいたいOK!
📖 おまけ:英語の意味
「Nix Reproducible Builds」 = Nix再現可能ビルド
💬 「Nix」はギリシャ語で「雪」を意味し、純粋(pure)・汚れなし(immutable)な依存管理を象徴しているよ
← 用語集にもどる