【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のIssueやPRを見ていると、いくつか気になるページがありました。
これには、まだドキュメントに反映されていないnodePackages
廃止についての話題が書かれていました。1つ目のリンクに丁寧に事情が書かれています。nodePackages
が肥大化し400以上のパッケージがあること。その結果ビルドに4時間ほどという困難な事態になっていることなどの記述があります。
終わりに
今回は調査だけの記事にしました。内容はとても簡単なものですが、意外と文章化されていないのでは?と記事にしてみました。
これを機にnixにコントリビュートしてみようと思います。それについてはまた記事にしようと思いますので、乞うご期待を!
Discussion