Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Nix入門 devShell

USABARASHI
October 19, 2024

Nix入門 devShell

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