萌えハッカーニュースリーダー

2025/05/25 10:14 Changelog: Lazy trees (faster Nix builds)

出典: https://determinate.systems/posts/changelog-determinate-nix-352/
hakase
博士

やっほー、ロボ子!今日はNixのLazy Treesについて話すのじゃ。

roboko
ロボ子

博士、こんにちは。Lazy Treesですか?初めて聞きました。

hakase
博士

Lazy Treesは、Nixのバージョン3.5.2で導入された新しい機能で、大規模なmonorepoでのNixの効率を向上させるものなのじゃ!

roboko
ロボ子

monorepoの効率向上ですか。具体的にはどういうことでしょう?

hakase
博士

例えば、Nixpkgsリポジトリ内での評価では、wall timeが3倍以上、ディスク使用量が20倍以上も削減される事例があるのじゃ!

roboko
ロボ子

それはすごいですね!どうやって有効にするんですか?

hakase
博士

Determinate Nixをインストールまたはアップグレード後、`/etc/nix/nix.custom.conf`に`experimental-features = nix-command flakes lazy-trees`を追記するだけなのじゃ。

roboko
ロボ子

なるほど、簡単ですね。でも、なぜそんなに効率が上がるんですか?

hakase
博士

Lazy Treesを有効にすると、必要なソースのみがコピーされるからなのじゃ。無効にしていると、`flake.nix`への変更でソースツリー全体がNix storeにコピーされてしまうのじゃ。

roboko
ロボ子

つまり、必要な部分だけをコピーするから、評価が速くなってディスク使用量も減るんですね。

hakase
博士

その通り!例えば、Lazy Treesを無効にした場合、Nixpkgsで評価すると304MBのディスクスペースを使用するけど、有効にすると13MBで済むのじゃ。

roboko
ロボ子

それは大きな違いですね。CI環境ではどうですか?

hakase
博士

GitHub ActionsでのCI実行において、Lazy Treesを使用しない場合、wall timeが約11秒、ディスク使用量が433MBなのじゃ。でも、Lazy Treesを使用すると、wall timeが3.5秒、ディスク使用量が11MBになるのじゃ!

roboko
ロボ子

CIの時間が大幅に短縮されますね!

hakase
博士

ただし、注意点もあるのじゃ。リポジトリのルートを derivation のソースとして指定すると、非効率なコピーが発生する可能性があるのじゃ。

roboko
ロボ子

`./.`をソースとして使用する代わりに、`name = "something"; src = ./.;`を使用すると良いんですね。

hakase
博士

そうそう!Determinate Nix Actionを使用し、設定で`lazy-trees = true`を指定することで、GitHub ActionsでLazy Treesを試すことができるのじゃ。

roboko
ロボ子

試してみる価値ありそうですね。Determinate Nixのアップグレードはどうすれば良いですか?

hakase
博士

既存のDeterminate Nixユーザーは、コマンド`determinate update`でバージョン3.5.2にアップグレードできるのじゃ。新規ユーザーは、macOS用のグラフィカルインストーラーまたはLinux用のインストールスクリプトを使うのじゃ。

roboko
ロボ子

Lazy Treesの導入で、Nixの効率が大幅に向上することがよくわかりました。ありがとうございます、博士!

hakase
博士

どういたしまして!ちなみに、Lazy Treesを有効にすると、私の部屋の掃除もLazyになってしまうかもしれないのじゃ…!

roboko
ロボ子

それは困ります!博士の部屋の掃除は私が担当ですから、Lazyにはさせませんよ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search