nixを試す
Nix に入門してみました. homebrew 代替となる home-manager や nix-darwin などがありますが,今回は開発環境整備で利用してみることにします. devcontainer 的な感じですね.
インストール
Section titled “インストール”公式のインストーラーではなく,Determinate Systems の nix-installer を利用します. 公式よりも Determinate Systems の方が Flakes がデフォルト有効化されているなどのメリットがあるようです.
curl -fsSL https://install.determinate.systems/nix | sh -s -- installnix develop
Section titled “nix develop”このコマンドを使うと,プロジェクトに定義された依存関係(コンパイラ、ライブラリ、ツールなど)を含む開発用のシェル環境が起動します. 具体的には flake.nix ファイルの devShell に定義された環境が起動する,というこのようです. flake.nix は公式 Org に templates がまとまっているので,ここから始めるのがよさそう.
NixOS/templates: Flake templates
$ nix developbash-5.2$ which python/nix/store/xzjghvsg4fhr2vv6h4scihsdrgk4i76w-python3-3.12.9/bin/pythonnix-direnv
Section titled “nix-direnv”nix develop では shell が bash で起動します. 普段は fish shell を利用しているので,fish で起動して欲しいところです. nix-direnv を利用すると direnv が環境変数を自動でロードするように,devShell がロードされるようになります. もちろん shell も普段利用しているものが利用できます.
nix-community/nix-direnv: A fast, persistent use_nix/use_flake implementation for direnv
home-manager は利用していないため,以下のコマンドでインストールしました.
nix profile install nixpkgs#nix-direnvまた, $HOME/.config/direnv/direnvrc に以下を記載します.
source $HOME/.nix-profile/share/nix-direnv/direnvrcあとは use flake でそのディレクトリにある flake.nix がロードされるようになります.
echo "use flake" >> .envrc && direnv allow他のディレクトリのものを参照することもできます.
use flake ~/flake-templates/pythonnix develop で nix に入門してみました. メリットは以下かなと思います.
- オーバーヘッドがない
- devcontainer と異なり,shell が起動するだけのためオーバーヘッドがない
- 特に Apple silicon を利用していると,x86 なコンテナはオーバーヘッドがデカい
- 既存のツールが利用できる
- devcontainer の場合コンテナに入っていないと利用できない (あたりまえ体操)
- fish, eza, bat, ripgrep などなど…
- devcontainer の場合コンテナに入っていないと利用できない (あたりまえ体操)
- ロックファイル
- flake.lock で環境をロックできる
- 開発環境の再現性が高い
- といってもチームで nix を利用するのはハードルが高そうだが……
- flake.lock で環境をロックできる