本文へスキップ

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コマンドだけで全員が同一の開発シェルに入れます。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語