Nixを始めてから一週間経った

読み終わるまでの目安 約6分

Nixを始めてから一週間経ったので雑感とか書いていく。

自分がNixを勧めたい人

まず自分がNixをオススメしたい人を挙げていく。 これに当てはまる人がいたらこの後は読まずにNixをインストールするのが良いかもしれない。

NixのインストールにはDeterminateのNixインストーラがオススメ(キレイにアンインストールできる)だけど、脆弱性のあるバージョン(2.24)がインストールされるらしいので1、不安な人は公式のインストーラーを使った方が良いかもしれない。

  • 言語毎パッケージマネージャを使い分けるのに辟易している人
  • プログラムをビルドしたらライブラリが見つからなくて一日(もしくは数日)潰した経験のある人
  • 言語のランタイムやコンパイラを極力グローバルインストールをしたくない人
  • 安心してテキストエディタのHEADをコンパイルしたい人

どうしてNixを始めようと思ったのか

一応自分の環境はdotfilesで管理しているのだけど、OSにインストールするコマンドなどは管理できておらず毎回インストールしていた。 Nixを使うと環境を宣言的に構築できるのでそのあたりを解決できるのでは、という期待があった。

また、NixはFlake(後述)という仕組みでリポジトリ単位で環境を構築できる。 これを使うと、従来開発環境を構築するのに使っていたadsfmiseryesdkmanなどの言語ごとの管理ツールを全てNixに統一できる。 正直言語毎にそういうツールの使い方を覚えるのに辟易している部分もあったので、この点にはかなり魅力を感じた。

また、今vim-jpではNixがとても流行っている。 Nixについて書き込むチャンネルである#tech-nixは毎日盛況だし、それ以外のチャンネルでも活発にやりとりが行われている。

正直日本語でNixについて話すならvim-jpが一番だと思う。2

始めはその流行りを横目で見ている感じだったが、みんながNixをやっているという雰囲気がありいつでも質問しやすい雰囲気ができていたこと、「環境を精密に再現できるからいつでも安心してyasunori3できるよ」という触れ込みが決め手になり自分も始めてみた。

冷やしNix始めました

そんな感じでここ一週間はFlake書いてみたり普段使いしてるツールをhome-managerに移してみたりしていた。

お影でNix言語にも慣れてきたし、ある程度Flakeを使えるようにもなってきた。 今はNixの恩恵もちょっとずつ分かってきていると思う。

Nix言語は始めは取っ付きずらそうに見えるけど、いざ書いてみると結構簡単だと思った。まぁDSLだし。 あと動的型付け言語なので補完が効かないことには気を付ける必要があると思う。

と言うのも、Nix言語は型情報がないので指定する必要がある値がちゃんと書かれているかどうかをエディタ側で指摘してくれない。 なのでいざnix runしてみたらpackages.x86_64-linux.defaultが指定されてなかった…みたいなことがわりと起こりがちだったりする。

そういうのを避けるためにも、FlakeだったらNixOS WikiのFlakeのページとかをよく読みこんでおくのが個人的にオススメ。「Nix 〇〇 schema」とかで調べると良い感じの情報が出てくると思う。

あとNix純粋関数型言語なのでみんな大好きprint debugがやりずらい。 なので--debugオプションを付けたりnix logで処理をトレースしたりする必要があり、そのあたりの感覚がJSとかそういう言語と結構違うというのも気を付けるべきかもしれない。

Nixは良いぞ

まだ一週間しか使ってないけど、NixはYOL(yasunority of life)を向上させたり環境構築を簡単にできたりと有用性を感じているのでこれからも触っていきたい。

Footnotes

  1. 該当のissue

  2. 参照

  3. OS(大抵の場合Linux)をクリーンインストールするという意。転じて何かを消すことを指すこともある。