Nix Flakesとは?
にっくすふれいくす
Nix Flakesとは、Nixパッケージマネージャーの拡張機能で、依存関係を完全に固定・再現可能な形でプロジェクトの環境を定義・共有できる仕組みです。
Nix Flakesは、NixOSプロジェクトが開発したNixパッケージマネージャーの実験的拡張機能で、2021年頃からNix 2.4以降で利用できるようになりました。Nixの強みである「完全再現可能なビルド」をより扱いやすく、かつ外部依存まで含めて固定するための仕組みです。
従来のNixでは、チャンネル(channel)という仕組みでパッケージのバージョンを管理していましたが、チャンネルはグローバルな状態を持つため、異なる環境で同じ設定を使っても結果が変わることがありました。Flakesはこの問題をflake.lockファイルによって解決します。flake.lockは全ての外部入力(nixpkgsなど)のコミットハッシュを記録し、Gitのlockファイルと同様に環境を完全に固定します。
Flakesの主な構成要素は次の通りです。
- flake.nix: inputsで依存関係、outputsでビルド成果物・devShell・NixOSモジュールなどを定義
- flake.lock: 全inputsの正確なリビジョンを記録するロックファイル
- devShell: プロジェクト固有の開発環境を定義し、nix developで即座に再現できる
開発現場では、チームメンバー全員が「全く同じバージョンのコンパイラ・ライブラリ・ツール」を使う環境を一コマンドで再現できるため、「自分のマシンでは動くのに...」という問題を根本から防げます。DockerやDevContainerと比較すると、コンテナイメージを使わずにホストOSネイティブで動作させられる点が特徴です。
使い方・例文
Nix Flakesは「RustとPython、特定バージョンのOpenSSLが必要なプロジェクトを、全メンバーと本番環境で完全に同じ構成で動かしたい」場面で使われます。nix developコマンドだけで全員が同一の開発シェルに入れます。
この用語をシェア
最終更新: