❄️

【Nix】`nodePackages`は廃止されていくらしいよ

に公開

私ごとですが、macのCLIをnix home managerで管理しております。vercel cliもhome managerでインストールしているのですが、アップデートせよと警告が出ました。

╭──────────────────────────────────────────────────────────╮
│                                                          │
│           Update available! v41.4.1 ≫ v44.7.3            │
│   Changelog: https://github.com/vercel/vercel/releases   │
│         Run `npm i -g vercel@latest` to update.          │
│                                                          │
│   The latest update may fix any errors that occurred.    │
│                                                          │
╰──────────────────────────────────────────────────────────╯

そういえば長い間出ている気がします。なかなかnixリポジトリでアップデートされないので、自分でもコントリビュートできるかとソースを読みに行きました。すると意外なことがわかったのでした。

結論:nodePackages is deprecated

Home managerでvercel cliのインストールは次のように指定していました。(ここでは基本的なnixの説明は省きます)

home.packages = [
    ...
    pkgs.nodePackages.vercel
    pkgs.jq
    ...他のパッケージ
  ];

ここのnodePackagesというのが、npmアプリケーションのnixパッケージをまとめた大きなリストです。nixpkgs/pkgs/development/node-packages/node-packages.json at master · NixOS/nixpkgsというJSONファイルにパッケージのリストがあり、node2nixというスクリプトでnix expressionに変換するという仕組みのようです。

しかし、このリストが肥大化してきて、生成に4時間ほどかかるようになってしまったとのこと。nodePackagesという管理方式が難しくなってきたため、別ツールに乗り換えるようです。そのツールはbuildNpmPackageというものらしいですが、まだ勉強中のため今後記事にするつもりです。

一旦結論としては、今後はなるべくnodePackagesのパッケージをbuildNpmPackageで移植していく方針のようです。

調べたログ

NixOS Searchで検索するとパッケージのソースリンクがのっています。それをたどるとnixpkgs/pkgs/development/node-packages/node-packages.nix at master · NixOS/nixpkgsというページに移動します。これがnodePackagesの本体ですが、2MB以上ありgithub上では表示できません。

そこで、RAWとして表示すると1行目のコメントが# This file has been generated by node2nix 1.11.1. Do not edit!となっています。このファイル自体は編集できないようです。

node2nixのリポジトリを探りましたが、こちらには直接nodePackagesに関係する記述はありませんでした。nixpgksのリポジトリの言語別ガイドnixpkgs/doc/languages-frameworks/javascript.section.md at master · NixOS/nixpkgsを読むと、ここでnodePackagesのアップデート方法がのっていました。

しかし、nixpkgsのIssuePRを見ていると、いくつか気になるページがありました。

https://github.com/NixOS/nixpkgs/issues/229475

https://github.com/NixOS/nixpkgs/pull/425377

https://github.com/NixOS/nixpkgs/pull/437493

https://github.com/NixOS/nixpkgs/pull/423113

これには、まだドキュメントに反映されていないnodePackages廃止についての話題が書かれていました。1つ目のリンクに丁寧に事情が書かれています。nodePackagesが肥大化し400以上のパッケージがあること。その結果ビルドに4時間ほどという困難な事態になっていることなどの記述があります。

終わりに

今回は調査だけの記事にしました。内容はとても簡単なものですが、意外と文章化されていないのでは?と記事にしてみました。

これを機にnixにコントリビュートしてみようと思います。それについてはまた記事にしようと思いますので、乞うご期待を!

Discussion