Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nix入門 devShell

Avatar for USABARASHI USABARASHI
October 19, 2024

Nix入門 devShell

Avatar for USABARASHI

USABARASHI

October 19, 2024
Tweet

More Decks by USABARASHI

Other Decks in Technology

Transcript

  1. Who am i? Motoki KAMIMURA • お仕事で Scala を書いている •

    型(Parse, don’t validate, Always-Valid Domain Model)にガチガチに助け てもらうのが好き • 最近は Terraform おじさん気味 • Nix はよちよち歩き    @usabarashi    usabarashi 2
  2. Package manager • Debian, Ubuntu: apt • macOS: brew •

    Windows: 分からん🤔 • etc… 一つずつコマンドでインストールする 綺麗にアンインストールできない    同じ手順なのに再現できない      5
  3. Programming language package manager • Python: pyproject.toml, poetry.lock • Rust:

    Cargo.toml, Cargo.lock • TypeScript: package.json, package-lock.json • etc… 依存関係を宣言的に記述する  ハッシュ値で再現性を確保する 6
  4. Nix is 何? • 純粋関数的ビルド ◦ 隔離されたサンドボックス環境でビルドする ◦ ダウンロードは指定ハッシュ値と照合する ◦

    ビルド結果に再現性がある • Nix Store ◦ /nix/store/hash-name-version/ への symbolic link ◦ 依存関係の衝突を解決する ◦ /nix/store/hash-name-version/ が r– or r-x ◦ 変更されず利用に再現性がある • Nix言語 ◦ 純粋関数型言語, 遅延評価, 動的型付け この辺りが Functional 味 7
  5. Nix is 何? • 2003: Integrating Software Construction and Software

    Deployment • 2004: Imposing a Memory Management Discipline on Software Deployment • 2005: The Purely Functional Software Deployment Model • 2010: NixOS: A Purely Functional Linux Distribution 時代が追いついてきた!知らんけど 論文は全然読んでません ... 8
  6. Nix is 何? flake.nix を書く                        Elm: elm.json, Haskell: project.cabal,

    Rust: Cargo.toml, Scala: build.sbt みたいな位置付けで書く(こともできる)      9
  7. flake.nix を書く参照するパッケージリポジトリを指定する inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=24.05"; utils.url =

    "github:numtide/flake-utils"; }; 一部抜粋     Debian の apt の /etc/apt/source.list.d/ みたいな位置付け 10
  8. flake.nix を書く 開発環境で使うパッケージを指定する outputs = { self, nixpkgs, utils }:

      ... devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ sbt temurin-bin ]; };   ... 一部抜粋 13
  9. 開発環境を動かす > nix develop $ which sbt /nix/store/nvx4iv31a4xwkzfzs01gnr29vf854brh-sbt-1.10.0/bin/sbt $ echo

    $JAVA_HOME /nix/store/r2986dyv67zxw68lys1j7had34i4xsnb-temurin-bin-21.0.1 $ nix-direnv と組み合わせると便利 14
  10. References • Nix • Nix入門 • Nix入門: ハンズオン編 • Mac用

    Nix、nix-darwin、home-manager セットアップ完全手順 • Nix package versions • Installing a Specific Version of Node in a Nix Flake • Using Nix to Develop and Package a Scala Project • Nix日本語コミュニティ 16