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

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

最終更新:
💡 入力と手順をそろえて、再現性を高める

ビルドの手順と依存する入力を宣言し、再現性を高めるパッケージ管理・ビルドの仕組み。Nixは依存関係を含むビルド入力に基づいて成果物を管理するが、時刻や乱数などによる差まで自動でなくすわけではない。

📌 このページのポイント
Nix:入力と手順をそろえる flake.nix / flake.lock ソース・依存・手順 ローカル開発 入力を共有 CIでビルド 入力を共有 同じ対象OS / CPUを確認 時刻・乱数などで差が出る場合も 必要なら再ビルドして内容を比較
Flakesを使う例。入力/手順を共有して再現性を高めるが、lockファイルだけで全OS/CPUの成果物や実行結果が同一になるわけではない。時刻などの非決定性も確認する。
ひよこ ひよこ
Nixは普通のパッケージ管理と何が違うの?
ペンギン先生 ペンギン先生
ソース、ビルド用のツール、依存するパッケージ、手順を宣言して管理し、それらを含むビルド入力に基づくハッシュを使ってNix storeに保存するよ。版や構成が違うパッケージを別のパスへ置けるので、共存させやすいんだ。
ひよこ ひよこ
同じ設定なら、どのPCでも必ず同じものができる?
ペンギン先生 ペンギン先生
そこまでは保証しないよ。対象のOSやCPUが違えば成果物も違うし、時刻や乱数などを含む手順では同じ入力から作っても内容が変わることがある。入力をそろえることと、バイト単位で同一の成果物になることを分けて考えよう。
ひよこ ひよこ
flake.nixとflake.lockは何をするの?
ペンギン先生 ペンギン先生
Flakesという仕組みでは、flake.nixに入力と出力を宣言し、flake.lockで参照する入力の版やハッシュなどを固定するよ。lockファイルも共有し、必要な開発用シェルを定義するとnix developで入れる。FlakesはNixの唯一の使い方ではなく、公式では実験的な機能として扱われているんだ。
ひよこ ひよこ
CIとローカルの違いをなくすのに役立つ?
ペンギン先生 ペンギン先生
同じ入力と対応する対象環境でツールをそろえる助けになるよ。ただし外部サービス、実行時のデータ、機器の差まで一致するわけではない。再現可能な成果物が必要なら再ビルドして内容を比較する。2回一致しても、あらゆる条件での証明にはならないんだ。
ひよこ ひよこ
NixOSも同じ仕組みを使うの?
ペンギン先生 ペンギン先生
NixOSはNixを使い、パッケージだけでなくOSのサービスや設定も宣言的に組み立てるLinuxディストリビューションだよ。保持されている以前の構成へ戻せるけれど、アプリが書き換えたデータまで元に戻るという意味ではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Nix(再現可能ビルド)」って出てきたら「入力と手順を管理して、ビルドを再現しやすくする仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Nix」 = オランダ語のniks(何もない)に由来
💬 公式FAQでは、明示した入力以外をビルドから見せない考え方に由来すると説明しているよ。雪を表すのはラテン語のnixで、雪の結晶のロゴに関係する話。ギリシャ語で雪という説明ではないんだ。

参考資料

← 用語集にもどる