generated at
Nix

> The Purely Functional Package Manager

一言で説明するのは難しいが,
優れた依存解決ツール
パッケージマネージャ
ビルドツール
といった側面を持つ.

Shopify でも Nix が活用されているらしく,中の人による入門記事がある.

HERPでは,リポジトリごとに固有の開発に必要な依存の宣言や,成果物 (e.g. npm package, Docker image) のビルドなどに用いられている.

LinuxmacOS がサポートされている.最近はWSL2もサポートし始めている

NixOS と区別すること.

嬉しさ
https://nixos.org/#examples にいろいろ動画があるので見るといいです.

「Homebrew などでインストールした hogehoge に依存する開発」という形態を取る以上,環境構築の煩わしさや,インストールされているソフトウェアのヴァージョンの不一致といった非生産的な問題から逃れることは難しい.
Nix を用いることでこのような問題が解決される.

インストール

基本的な使い方

開発環境の共有
各リポジトリに shell.nix というファイルを置いておくことで,そのリポジトリの開発に必要な依存を宣言できる.
.nix ファイルは Nix Language という言語で記述する.

また, $ nix-shell を実行すると,それらの依存がインストールされ $PATH が通った状態のシェルが立ち上がる.
direnv use nix を用いると, nix-shell を立ち上げる必要さえなくなるため,そのような .envrc もリポジトリに合わせて用意されていることが多い.
nix-direnvを使うと上記で参照される shell の derivation がキャッシュされるようになる。
.direnv/ というディレクトリを作るため、 $XDG_HOME/git/ignore などに .direnv/ を追記するとよい。

成果物のビルド
Nix の優れた依存解決の仕組みを用いて,再現性の高いビルドを実現することができる.
#TODO もうちょっと詳しく書く

Stack Nix integraion
#TODO あとで書く

ちょっとオタク向けの使い方
Homebrew などの代替として,パッケージマネージャとしても用いることができる.
sh
$ nix-env -iA nixpkgs.nodejs
ryota-ka は Homebrew をやめた.

かなりオタク向けの使い方
NixOS (Linux) や nix-darwin (macOS) を用いれば,どのようなソフトウェアがインストールされている状態を実現したいかという点まで含めて,マシンの設定を Nix Language で記述することができる.
hiroqn nix-darwin を使っている.

VS Code ユーザー向け
arrterian.nix-env-selector 拡張を使うと VS Code が nix-shell 環境下で動くようになるので便利