Nix
> The Purely Functional Package Manager
一言で説明するのは難しいが,
優れた依存解決ツール
パッケージマネージャ
ビルドツール
といった側面を持つ.
Shopify でも Nix が活用されているらしく,中の人による入門記事がある.
HERPでは,リポジトリごとに固有の開発に必要な依存の宣言や,成果物 (e.g. npm package, Docker image) のビルドなどに用いられている.
嬉しさ
「Homebrew などでインストールした hogehoge に依存する開発」という形態を取る以上,環境構築の煩わしさや,インストールされているソフトウェアのヴァージョンの不一致といった非生産的な問題から逃れることは難しい.
Nix を用いることでこのような問題が解決される.
インストール
基本的な使い方
開発環境の共有
各リポジトリに shell.nix
というファイルを置いておくことで,そのリポジトリの開発に必要な依存を宣言できる.
また, $ nix-shell
を実行すると,それらの依存がインストールされ $PATH
が通った状態のシェルが立ち上がる.
direnv の
use nix
を用いると,
nix-shell
を立ち上げる必要さえなくなるため,そのような
.envrc
もリポジトリに合わせて用意されていることが多い.
nix-direnvを使うと上記で参照される shell の derivation がキャッシュされるようになる。
.direnv/
というディレクトリを作るため、 $XDG_HOME/git/ignore
などに .direnv/
を追記するとよい。
成果物のビルド
Nix の優れた依存解決の仕組みを用いて,再現性の高いビルドを実現することができる.
ちょっとオタク向けの使い方
Homebrew などの代替として,パッケージマネージャとしても用いることができる.
sh$ nix-env -iA nixpkgs.nodejs

は Homebrew をやめた.
かなりオタク向けの使い方

は
nix-darwin
を使っている.
VS Code ユーザー向け