nix-shellでprojectごとに環境をsetupする
Gitの各repositoryにshell.nixのような設定ファイルを用意しておけば、
$ nix-shell --pure shell.nixを実行するだけで必要な環境がすぐに揃う
仮にそれがHaskell projectだとしても、JS projectだとしても、nix-shellのコマンドを1発打てば、globalを汚さずに環境を作れる
仮にそのprojectの内部でRubyとJSの両方を使っていようとも問題ない
一般的に言語ごとのtoolchainを入れるのは大変だが、
その手間がそもそもなくなり、
さらにversion違いなどによるerrorもなくなる
projectの新規作成時にすること
shell.nixを書く
buildInputsやshellHook等を使って
nix-direnv用の設定をする
$ echo "use nix" >> .envrc
$ direnv allow
code:.gitignore
# nix
.direnv
/direnv
TIPS ref
nixpkgsをpinする
nix-shellがないとき
例えばチームで作っているprojectが、
serverとしてRailsを、frontendとしてJSを、DBにMySQLを、と使っていると
これらの実行環境を作るために、rbenvやgem、nvmやnpmなど諸々を用意してversionを揃える必要がある
さらに、package.jsonのような管理ファイルがあったとしても同じものが再現されるとは限らないので、package-lock.jsonが必要になったりする
これらの問題は、チームメンバー間だけでなく、dev環境/prod環境の間でも生じる
冗長だし、大変
例
https://github.com/ryota-ka/twterm
このprojectを実行するためには、
Rubyの環境
いくつかのgem package
が必要だが、globalにrubyやgemがなくともコマンド一発で揃う
VSCode
Nix Environment Selectorを使うとその環境でVSCodeを起動できるので、補完とかも効く
言語ごと
nix-shellでRust環境をsetupする
nix-shellでJavaScript/TypeScript環境をsetupする
Haskellの環境構築
PureScript with Nix
https://github.com/justinwoo/easy-purescript-nix
spago2nix
Python
https://nixos.wiki/wiki/Python
https://ghedam.at/15978/an-introduction-to-nix-shell
Python, Rust, Ruby, NodeJS
https://ghedam.at/15443/a-nix-shell-for-developing-elixir
elixir, erlang, hex