• devnevは独自のnixpkgsを持っている

    2025年10月6日

    結論

    devenvをflakeで使っていて、nixpkgsのパッケージが消えたというエラーが出たらnixpkgsの参照が異なる可能性がある。 devenvはdevenv-nixpkgsを前提に書かれているので、そういうエラーが発生したらnixpkgsを切り替えると解決するかもしれない。

    背景

    個人的なflakeテンプレートとしてscaffoldというリポジトリがあるんですが、これは定期的に自動更新してlockfileが最新になるようにした。

    いつものようにnix flake initでテンプレートを引っ張ってきた時に、こんなエラーが発生した。

    … while calling the 'derivationStrict' builtin
      at <nix/derivation-internal.nix>:37:12:
        36|
        37|   strict = derivationStrict drvAttrs;
          |            ^
        38|
    
    … while evaluating derivation 'devenv-shell'
      whose name attribute is located at /nix/store/ybmnblw90230yl4p0l18ghwx9ry597bz-source/pkgs/stdenv/generic/make-derivation.nix:544:13
    
    … while evaluating attribute 'DEVENV_PROFILE' of derivation 'devenv-shell'
    
    … while evaluating the option `perSystem.x86_64-linux.devenv.shells.default.packages':
    
    … while evaluating definitions from `/nix/store/85wf0pka5p7hbbfkyq78bxr61pfhpwsj-source/src/modules/languages/erlang.nix':
    
    (stack trace truncated; use '--show-trace' to show the full, detailed trace)
    
    error: 'erlang-ls' has been removed as it has been archived upstream. Consider using 'erlang-language-platform' instead
    

    パッケージがrenameされたという旨のエラーなのだけど、これは2つの要素によって発生した。

    まず、devenvが内部で持っている言語ごとの環境を定義するNixファイルにおいてerlnag-lsが参照されていた。 そのerlnag-lsパッケージですが、10/2に消されてerlang-language-platformの方に移動していた。

    つまり、devenv側が存在しないパッケージを内部で参照していることによって発生した。

    これはissueで報告されているかな、と思って探してみたけど見つからなかった。 これはおかしいな?と思い、tmpディレクトリでdevenv initして生成されたflakeファイルを開いてみると、nixpkgsの項目にgithub:cachix/devenv-nixpkgs/rollingと指定されていた。

    これはcachixがdevenv向けに提供しているnixpkgsで、devenvはこれを前提にflakeを吐いているらしかった。 普通にdevenv.nixを使用しているユーザーは出会さないけど、flakeからdevenvを使用しているユーザーはnixpkgsをNixOSの方に向けていることが多いと思うので、今後も遭遇する可能性はあるなと思った。


    ko-fi ☕GitHub Sponsors 🐙