非NixOS の Linux ディストリで nixpkgs を使ってるけど今のところはこれでいいかとなってる

WSL2 上で Ubuntu を使っていたけど Arch Linux に乗り換えて数か月が経った。WSL2 なので正直システムがどんなけ汚れようが構わないんだけどなんとなくユーザーランドで汚染の範囲をとどめたかったので Ubuntu の時代からかれこれ1年くらい nixpkgs を使い続けている。

nixpkgs を使った環境再現は本当に楽でエントリポイントのシェルスクリプトを1枚用意しておいてそいつを実行すれば特に問題なく勝手に環境が再現できるため今のところストレスが全くなく、nix そのものに対しての印象はいいツールだなという感じ。

ただ、NixOS を素直に使うべきかなと自問するタイミングがたまに訪れる。事実 Arch Linux を使う積極的な理由は特に思い浮かばない。 とはいえ NixOS が nixpkgs としてユーザーリポジトリを切り出している時点で正常な用途ではあるはずだ。なので、個人的にはとりあえずこれでいいやとなっている。

nix のサブレに入り浸って情報収集はできてるので nix が普通に使われてると錯覚しているけど、多分一般的にはまだそんなに認知されてないのはなぜだろうか。

よく言われてそうなのは nix のアーキテクチャや nix expression の理解と定着が単純に学習コストをそれなりに必要とするし(Nix pills だけではどう考えても足りない)、環境の独立性を実現する手段として direnv や Docker でもいいじゃんという考えもある。それに gc しない限り nix-store がバカみたいにストレージを食い続けることになるのでむやみに使用するパッケージを追加するといろいろとオーバーヘッドが増えるみたいなところに原因があるんだと思う。

でもこんなもの一度でも使い慣れてしまえば Docker に比べれば簡潔で簡単とも思えるし、ビルドが必要という場合であれば nix がそこを担保してくれるので DevOps みたいな領域もカバーできるはず。(nix で真面目に構成管理なんてやったことない)

個人的な cabal を使った Haskell 製の自作シングルバイナリアプリでは cabal2nix を使うのが当たりまえになってるし、もはや nix を使わない選択肢がそもそもなくなってるのでかなりバイアスがあるとは思う。でも、個人差で要領の良し悪しはあれどツールの使い方を身に着けるのはそれを使い続けるしかないし、近道なんてないでしょって感じなので日々学習するしかないんじゃねえのと割り切るしかないだろと思ってる。

とりあえず nix を使って開発環境を整える中で感じる一番のメリットは Docker みたいになんかややこしいプロセスがなくてまさに本物の環境で作業できるってところかなとは思う。

まあよく言われてるようにそもそも Docker と nix では役割が違うので比べること自体がナンセンスだと思うので Docker 使えるなら別に Docker でも十分だとは感じるけど。どっちが優れてるとかいう定性的な話は無意味で、個人の経験と用途に依存する話でしかないので不毛だなこれは。

ところで devbox が登場したことで nix 自体が普及するだろうか。多分しない。devbox はすんごい nix のラッパーツールであり nix を理解する必要性がほぼなくなるからだ。そうすると、間接的に nix が人口に膾炙する可能性はあるとしても nix そのものが受け入れられているというより、devbox が受け入れられるみたいなことになる気がする。

現段階で今のところは引き続き nix コミュニティにはひれ伏す気持ちではあるので、僕ができることと言えばどんな形であれ nix が受け入れられて nix コミュニティの寿命が延び続けることを願うばかりだ。