flakeのinputsにおけるfollowsについて
前回のflake.nixにみられるinputs.nixpkgs-lib.follows = "nixpkgs";について、スルーしてしまいましたがこれの目的と問題点について調べたことを書いておきます。
Nixではハッシュによって区別された複数のバーションのパッケージが共存できますので依存関係地獄は起きません。ですが一方で、とくに問題のない場合でもハッシュが異なればすべて並列に保存されますのでストレージが圧迫されていきます。さらに新しいリビジョンでのバグ修正や性能向上といった恩恵が受けられません。しかしそれはまた不安定性を招くことにもなり得るので、堂々巡りといったところです。痛し痒しで理解して選択していくしかないのですが、followsオプションでそれは可能です。
わたしの浅い経験からは判断できませんが、現在のところ「既知の問題がない限りfollowsする」という方針で臨みたいと思っています。この議論を参照ください。
followsの作用を確認してみます。
まずflake-partsが入力先としているnixpkgsを指定しない場合です。
inputs = {
nixpkgs.url = "github:/nixos/nixpkgs/nixpkgs-unstable";
import-tree.url = "github:vic/import-tree";
flake-parts = {
url = "github:hercules-ci/flake-parts";
};
};
ビルドしたあと、nix flake metadataで各々が使用しているパッケージを確認してみます。
naogami@x1 ~/infra> nix flake metadata .
Resolved URL: path:/home/naogami/infra
Locked URL: path:/home/naogami/infra?lastModified=1767601626&narHash=sha256-TGI0D0rVr2lzFbKrgblImGWAwRF7cOvw9cuP15df9UY%3D
Description: My NixOS configuration`
Path: /nix/store/sm4kbl4jm80kqi7138z2d3jncph6w67w-source
Last modified: 2026-01-05 17:27:06
Inputs:
├───flake-parts: github:hercules-ci/flake-parts/a34fae9c08a15ad73f295041fec82323541400a9?narHash=sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw%3D (2025-12-15 21:49:12)
│ └───nixpkgs-lib: github:nix-community/nixpkgs.lib/2075416fcb47225d9b68ac469a5c4801a9c4dd85?narHash=sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo%3D (2025-12-14 01:15:36)
├───import-tree: github:vic/import-tree/3c23749d8013ec6daa1d7255057590e9ca726646?narHash=sha256-ZvYKbFib3AEwiNMLsejb/CWs/OL/srFQ8AogkebEPF0%3D (2025-11-21 22:07:00)
└───nixpkgs: github:nixos/nixpkgs/16c7794d0a28b5a37904d55bcca36003b9109aaa?narHash=sha256-fFUnEYMla8b7UKjijLnMe%2BoVFOz6HjijGGNS1l7dYaQ%3D (2026-01-02 14:39:32)
ふたつのnixpkgsが確認できます。
次はflake-partsが入力先としているnixpkgsに同じnikpkgsを指定した場合です。
inputs = {
nixpkgs.url = "github:/nixos/nixpkgs/nixpkgs-unstable";
import-tree.url = "github:vic/import-tree";
flake-parts = {
url = "github:hercules-ci/flake-parts";
inputs.nixpkgs-lib.follows = "nixpkgs";
};
};
Resolved URL: path:/home/naogami/infra
Locked URL: path:/home/naogami/infra?lastModified=1767606335&narHash=sha256-SNwkZQjkJsW15Qtm84dU9MflPSdSXfEbBS2g7KT5lYU%3D
Description: My NixOS configuration`
Path: /nix/store/zyfwgq0bj818k63fpf0nd9scc29ds6d0-source
Last modified: 2026-01-05 18:45:35
Inputs:
├───flake-parts: github:hercules-ci/flake-parts/a34fae9c08a15ad73f295041fec82323541400a9?narHash=sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw%3D (2025-12-15 21:49:12)
│ └───nixpkgs-lib follows input 'nixpkgs'
├───import-tree: github:vic/import-tree/3c23749d8013ec6daa1d7255057590e9ca726646?narHash=sha256-ZvYKbFib3AEwiNMLsejb/CWs/OL/srFQ8AogkebEPF0%3D (2025-11-21 22:07:00)
└───nixpkgs: github:nixos/nixpkgs/16c7794d0a28b5a37904d55bcca36003b9109aaa?narHash=sha256-fFUnEYMla8b7UKjijLnMe%2BoVFOz6HjijGGNS1l7dYaQ%3D (2026-01-02 14:39:32)
ひとつになりました。