Slide 1

Slide 1 text

Nix入門 パラダイム編 asa1984 2024-10-26 Nix meetup #1

Slide 2

Slide 2 text

謝辞 asa1984 2024-10-26 Nix meetup #1 フィードバックや有料バッジを送ってくださった皆様 ありがとうございます!

Slide 3

Slide 3 text

$ Nixと! #$ パッケージマネージ Ç$ Nixのパラダイ ($ 実現される機能 Nix meetup #1 2024-10-26 asa1984 Nix入門 パラダイム編

Slide 4

Slide 4 text

01 Nixとは asa1984 2024-10-26 Nix meetup #1

Slide 5

Slide 5 text

asa1984 2024-10-26 Nix meetup #1 Nixとは、既存ツールとは 異なるパラダイムに基づく パッケージマネージャである

Slide 6

Slide 6 text

歴史 asa1984 2024-10-26 Nix meetup #1 2003 Eelco Dolstra氏の研究プロジェクト として開発開始 2006 NixOSを発表 2015 NixOS Foundation 設立 2024 Nix meetup #1 開催

Slide 7

Slide 7 text

背景 asa1984 2024-10-26 Nix meetup #1 目的 特徴 G 「正しいデプロイ」を行える安全・柔軟なシステムの実g G 「デプロイ」の定u G ソフトウェアを配置し、使用可能な状態にするこ9 G パッケージのインストールのことだと考えてよい — 完全な依存関係管™ ˜ ソフトウェアコンポーネントの干渉の回~ x 原子的なアップグレード / ダウングレー u ソースコード / バイナリデプロイの透明¢ € 安全な削除(ガベージコレクション)

Slide 8

Slide 8 text

3つの柱 asa1984 2024-10-26 Nix meetup #1 Reproducible Declarative Reliable

Slide 9

Slide 9 text

Nixとは? asa1984 2024-10-26 Nix meetup #1

Slide 10

Slide 10 text

Nixとは? asa1984 2024-10-26 Nix meetup #1 純粋関数型パッケージマネージャ

Slide 11

Slide 11 text

Nixとは? asa1984 2024-10-26 Nix meetup #1 純粋関数型パッケージマネージャ パラダイム (根幹的なモノの考え方・認識の枠組み)

Slide 12

Slide 12 text

異なるパラダイムを学ぶには asa1984 2024-10-26 Nix meetup #1 難しさの原因 x パラダイムが異なるかh x 同じ言葉、違う意` x プリミティブな部分が別P x 既存のメンタルモデルが学習の妨げになる 解決策 wi 比喩しな— qi ボトムアップ式に学p –i 受け入れ’ ni 記憶を消す 急峻な学習曲線

Slide 13

Slide 13 text

asa1984 2024-10-26 Nix meetup #1 純粋関数型パッケージマネージャ これは何? その前に…

Slide 14

Slide 14 text

02 パッケージマネージャ asa1984 2024-10-26 Nix meetup #1

Slide 15

Slide 15 text

コンピュータに何のソフトウェアがインストールされたかを記録しÉ 新しいソフトウェアのインストー2 新しいバージョンへのソフトウェアの更 以前インストールしたソフトウェアの削除 を容易に行えるようにするプログラム パッケージマネージャの定義 asa1984 2024-10-26 Nix meetup #1 引用元: aptitudeユーザマニュアル「パッケージマネージャとは」debian.org

Slide 16

Slide 16 text

多様化するパッケージマネージャ asa1984 2024-10-26 Nix meetup #1 いっぱいある

Slide 17

Slide 17 text

パッケージマネージャの比較 4! パッケージのスコー' 0! 管理のスコー' $! 権限領 ! インストール形式 asa1984 2024-10-26 Nix meetup #1

Slide 18

Slide 18 text

1. パッケージのスコープ asa1984 2024-10-26 Nix meetup #1 ドメイン固有 汎用 € 複数の言語・ツールの管理に対e € OSのアプリ、共有ライブラリなu € 例: OSのパッケージマネージャ € 特定の言語・エコシステム専l € 言語のライブラリなu € 例: 言語固有のパッケージマネージャ

Slide 19

Slide 19 text

2. 管理のスコープ asa1984 2024-10-26 Nix meetup #1 ローカル グローバル T システム or ユーザー単位で管理 T プロジェクト単位で管u T マニフェストファイルが存在すg T グローバルインストールにも対応 していることが多い

Slide 20

Slide 20 text

3. 権限領域 asa1984 2024-10-26 Nix meetup #1 ユーザー root U sudo必B U システムインストールを行F U ドライバやカーネルなどの インストールが可能 U sudo不t U ユーザーインストールを行う

Slide 21

Slide 21 text

4. インストール形式 asa1984 2024-10-26 Nix meetup #1 ビルド バイナリ E バイナリを直接取得 E ソースコードを取T E ローカルでビルド ハイブリッド

Slide 22

Slide 22 text

Nixの場合 asa1984 2024-10-26 Nix meetup #1 パッケージのスコープ 汎用 管理のスコープ グローバル & ローカル 権限領域 ユーザー(※1) インストール形式 常にビルド(※2) ※1. NixOSはroot領域を操作可能 ※2. バイナリキャッシュ(後述)を利用するとバイナリインストールが可能

Slide 23

Slide 23 text

03 Nixのパラダイム asa1984 2024-10-26 Nix meetup #1

Slide 24

Slide 24 text

asa1984 2024-10-26 Nix meetup #1 QI ビルドは純粋関数であE 8I ビルド成果物は不6 AI 全てはDerivationである

Slide 25

Slide 25 text

純粋関数 asa1984 2024-10-26 Nix meetup #1 入力に対して出力が一意に定まっている 出力が一意でない u 数学的な関“ † 写像の定義を満たq † 「入力」に対して「出力」が一意に定まU u 利— u 振る舞いが決定d u つまり、必ず再現する

Slide 26

Slide 26 text

ˆ ビルドを関数に見立てe c ビルド成果物 = f (ビルド入力€ ˆ ビルド成果物はビルド入力から一意に導かれ4 ˆ ビルド入力: ソフトウェアコンポーネントを同定する全要 ˆ ソースコー‚ ˆ ビルド時依存・実行時依T ˆ プラットフォームの情3 ˆ ビルドスクリプ ˆ その他 純粋なビルド asa1984 2024-10-26 Nix meetup #1 ビルド入力 ビルド 成果物 ビルド

Slide 27

Slide 27 text

C ビルドの副作c d 暗黙的依T d 外部の環境変@ d インターネットアクセE C ビルド環境をサンドボックス d ビルド入力を明示的に指定しないと ビルドに失敗すÈ d 自動的に副作用が排除される サンドボックスによる副作用の排除 asa1984 2024-10-26 Nix meetup #1

Slide 28

Slide 28 text

V ビルド入力をハッシュ化して識別子として付4 V パッケージはハッシュでのみ区別され% パッケージのバージョンが意味を失Ç アップグレード = 異なるハッシュの算出 一意なパッケージ識別 asa1984 2024-10-26 Nix meetup #1 ビルド入力 ビルド 成果物 サンドボックス でビルド ハッシュ計算 SHA-256

Slide 29

Slide 29 text

3 ビルド成果物を一元管B 3 ハッシュをキー(ストアパス)として単一階層に格7 3 ストアオブジェクトは不Y 8 上書きが発生しな" 8 ハッシュで厳密に区別されるため、他のコンポーネントと干渉しなp 3 複数のバージョンが共存可能 ビルド成果物の一元管理 asa1984 2024-10-26 Nix meetup #1 Nixストア ストアオブジェクト ストアオブジェクト ストアオブジェクト openssl-1.1 openssl-3.0 openssl-3.1 SHA-256 SHA-256 SHA-256 SHA-256 SHA-256 SHA-256

Slide 30

Slide 30 text

e Nixにおける最小単U e ビルド入力とハッシュ(ストアパス)が記述された中間表 e Derivationはビルド成果物に一意に対応す Ã 実質、パッケージ = Derivation Derivation (導出) asa1984 2024-10-26 Nix meetup #1 Derivation ビルド 成果物 Realise Realisation Derivationから実際にビルド成果物を生成する手順

Slide 31

Slide 31 text

 パッケージに相当するもの: Derivatiop  一般的な「パッケージ」という単位で管理していなE  Derivationとビルド成果物を区別する意味はなE  成果物はレシピから一意に導かれ1  つまり、宣言7  パッケージをビルドするにはDerivationを扱う必要があ1 Ä Nix言語の登場 Nixにおける「パッケージ」の意味 asa1984 2024-10-26 Nix meetup #1 Derivationの汎用性  Derivationは何でも導け1  実行可能ファイルでも、ただのテキストファイルでもよE  あらゆるソフトウェアコンポーネントをDerivationとして扱える

Slide 32

Slide 32 text

" Derivationを辿っていくと木構造にな' " 完全な依存関係ツリ " Closures(クロージャー)と呼ばれる 完全な依存関係の特定 asa1984 2024-10-26 Nix meetup #1 Derivation Derivation Derivation Derivation Derivation Derivation Derivation Derivation

Slide 33

Slide 33 text

04 実現される機能 asa1984 2024-10-26 Nix meetup #1

Slide 34

Slide 34 text

Nixの特徴的な機能 asa1984 2024-10-26 Nix meetup #1 DS バイナリキャッシX IS リモートビルF WS ガベージコレクション

Slide 35

Slide 35 text

2種類のデプロイ asa1984 2024-10-26 Nix meetup #1 ソースコードデプロイ バイナリデプロイ t デプロイ先でビルg t 依存関係の整合性を確保できf t リソース消費が大きい t デプロイ前にビルg t 整合性を損なう可能性があf t リソース消費が小さい ビルド ビルド

Slide 36

Slide 36 text

ビルドが決定的な場合 asa1984 2024-10-26 Nix meetup #1 ソースコードデプロイ バイナリデプロイ v デプロイ先でビルi v 依存関係の整合性を確保できh v リソース消費が大きい v デプロイ前にビルi v 整合性を損なう可能性があh v リソース消費が小さい ビルド ビルド = 等価になる

Slide 37

Slide 37 text

バイナリキャッシュ asa1984 2024-10-26 Nix meetup #1 Derivation ビルド 成果物 Realise バイナリキャッシュ サーバー クラウド ローカル ハッシュを照会 ビルド成果物を直接取得

Slide 38

Slide 38 text

リモートビルド asa1984 2024-10-26 Nix meetup #1 Derivation ビルド 成果物 Realise リモートマシン クラウド ローカル Realisationを委任 ビルド成果物だけ送信

Slide 39

Slide 39 text

4 安全なアンインストー1 4 依存関係ツリーを利用した安全な削È 4 有効化されたパッケージから辿れない パッケージを自動的に削除 ガベージコレクション asa1984 2024-10-26 Nix meetup #1 ストアオブジェクト Derivation ストアオブジェクト ストアオブジェクト ストアオブジェクト ストアオブジェクト ストアオブジェクト ストアオブジェクト 有効なパッケージと してマーク

Slide 40

Slide 40 text

最後に asa1984 2024-10-26 Nix meetup #1

Slide 41

Slide 41 text

p パラダイムシフc p 今後、Nixのパラダイムが普及するのではないA p 安全・柔軟・正しいデプロv p 複雑性の高まりによる破綻の防 p (パラダイムが同じならNixでなくてもよい p Nixフレンドリーなプロジェクc p 言語・ツール・プロジェクトによってパッケージングの難易度は大きく変わる 展望 asa1984 2024-10-26 Nix meetup #1

Slide 42

Slide 42 text

asa1984 2024-10-26 Nix meetup #1 ありがとうございました