Nix
https://gyazo.com/9b806f305b506804a42a7fa83befa935
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 などの代替として,パッケージマネージャとしても用いることができる. code:sh
$ nix-env -iA nixpkgs.nodejs
ryota-ka.icon は Homebrew をやめた.
かなりオタク向けの使い方
hiroqn.icon は nix-darwin を使っている.
VS Code ユーザー向け