Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nix入門パラダイム編
Search
asa1984
October 27, 2024
Technology
4
310
Nix入門パラダイム編
Nix meetup #1 に登壇した際のスライド
asa1984
October 27, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
170
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
200
Opcodeを読んでいたら何故かphp-srcを読んでいた話
murashotaro
0
250
1等無人航空機操縦士一発試験 合格までの道のり ドローンミートアップ@大阪 2024/12/18
excdinc
0
160
KnowledgeBaseDocuments APIでベクトルインデックス管理を自動化する
iidaxs
1
260
Wantedly での Datadog 活用事例
bgpat
1
460
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
220
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
190
C++26 エラー性動作
faithandbrave
2
740
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
160
Featured
See All Featured
Site-Speed That Sticks
csswizardry
2
190
Gamification - CAS2011
davidbonilla
80
5.1k
A Philosophy of Restraint
colly
203
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
A better future with KSS
kneath
238
17k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Why Our Code Smells
bkeepers
PRO
335
57k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Done Done
chrislema
181
16k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Adopting Sorbet at Scale
ufuk
73
9.1k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Transcript
Nix入門 パラダイム編 asa1984 2024-10-26 Nix meetup #1
謝辞 asa1984 2024-10-26 Nix meetup #1 フィードバックや有料バッジを送ってくださった皆様 ありがとうございます!
$ Nixと! #$ パッケージマネージ Ç$ Nixのパラダイ ($ 実現される機能 Nix meetup
#1 2024-10-26 asa1984 Nix入門 パラダイム編
01 Nixとは asa1984 2024-10-26 Nix meetup #1
asa1984 2024-10-26 Nix meetup #1 Nixとは、既存ツールとは 異なるパラダイムに基づく パッケージマネージャである
歴史 asa1984 2024-10-26 Nix meetup #1 2003 Eelco Dolstra氏の研究プロジェクト として開発開始
2006 NixOSを発表 2015 NixOS Foundation 設立 2024 Nix meetup #1 開催
背景 asa1984 2024-10-26 Nix meetup #1 目的 特徴 G 「正しいデプロイ」を行える安全・柔軟なシステムの実g
G 「デプロイ」の定u G ソフトウェアを配置し、使用可能な状態にするこ9 G パッケージのインストールのことだと考えてよい 完全な依存関係管 ソフトウェアコンポーネントの干渉の回~ x 原子的なアップグレード / ダウングレー u ソースコード / バイナリデプロイの透明¢ 安全な削除(ガベージコレクション)
3つの柱 asa1984 2024-10-26 Nix meetup #1 Reproducible Declarative Reliable
Nixとは? asa1984 2024-10-26 Nix meetup #1
Nixとは? asa1984 2024-10-26 Nix meetup #1 純粋関数型パッケージマネージャ
Nixとは? asa1984 2024-10-26 Nix meetup #1 純粋関数型パッケージマネージャ パラダイム (根幹的なモノの考え方・認識の枠組み)
異なるパラダイムを学ぶには asa1984 2024-10-26 Nix meetup #1 難しさの原因 x パラダイムが異なるかh x
同じ言葉、違う意` x プリミティブな部分が別P x 既存のメンタルモデルが学習の妨げになる 解決策 wi 比喩しな qi ボトムアップ式に学p i 受け入れ ni 記憶を消す 急峻な学習曲線
asa1984 2024-10-26 Nix meetup #1 純粋関数型パッケージマネージャ これは何? その前に…
02 パッケージマネージャ asa1984 2024-10-26 Nix meetup #1
コンピュータに何のソフトウェアがインストールされたかを記録しÉ 新しいソフトウェアのインストー2 新しいバージョンへのソフトウェアの更 以前インストールしたソフトウェアの削除 を容易に行えるようにするプログラム パッケージマネージャの定義 asa1984
2024-10-26 Nix meetup #1 引用元: aptitudeユーザマニュアル「パッケージマネージャとは」debian.org
多様化するパッケージマネージャ asa1984 2024-10-26 Nix meetup #1 いっぱいある
パッケージマネージャの比較 4! パッケージのスコー' 0! 管理のスコー' $! 権限領 ! インストール形式 asa1984
2024-10-26 Nix meetup #1
1. パッケージのスコープ asa1984 2024-10-26 Nix meetup #1 ドメイン固有 汎用
複数の言語・ツールの管理に対e OSのアプリ、共有ライブラリなu 例: OSのパッケージマネージャ 特定の言語・エコシステム専l 言語のライブラリなu 例: 言語固有のパッケージマネージャ
2. 管理のスコープ asa1984 2024-10-26 Nix meetup #1 ローカル グローバル T
システム or ユーザー単位で管理 T プロジェクト単位で管u T マニフェストファイルが存在すg T グローバルインストールにも対応 していることが多い
3. 権限領域 asa1984 2024-10-26 Nix meetup #1 ユーザー root U
sudo必B U システムインストールを行F U ドライバやカーネルなどの インストールが可能 U sudo不t U ユーザーインストールを行う
4. インストール形式 asa1984 2024-10-26 Nix meetup #1 ビルド バイナリ E
バイナリを直接取得 E ソースコードを取T E ローカルでビルド ハイブリッド
Nixの場合 asa1984 2024-10-26 Nix meetup #1 パッケージのスコープ 汎用 管理のスコープ グローバル
& ローカル 権限領域 ユーザー(※1) インストール形式 常にビルド(※2) ※1. NixOSはroot領域を操作可能 ※2. バイナリキャッシュ(後述)を利用するとバイナリインストールが可能
03 Nixのパラダイム asa1984 2024-10-26 Nix meetup #1
asa1984 2024-10-26 Nix meetup #1 QI ビルドは純粋関数であE 8I ビルド成果物は不6 AI
全てはDerivationである
純粋関数 asa1984 2024-10-26 Nix meetup #1 入力に対して出力が一意に定まっている 出力が一意でない u 数学的な関
写像の定義を満たq 「入力」に対して「出力」が一意に定まU u 利 u 振る舞いが決定d u つまり、必ず再現する
ビルドを関数に見立てe c ビルド成果物 = f (ビルド入力 ビルド成果物はビルド入力から一意に導かれ4
ビルド入力: ソフトウェアコンポーネントを同定する全要 ソースコー ビルド時依存・実行時依T プラットフォームの情3 ビルドスクリプ その他 純粋なビルド asa1984 2024-10-26 Nix meetup #1 ビルド入力 ビルド 成果物 ビルド
C ビルドの副作c d 暗黙的依T d 外部の環境変@ d インターネットアクセE C ビルド環境をサンドボックス
d ビルド入力を明示的に指定しないと ビルドに失敗すÈ d 自動的に副作用が排除される サンドボックスによる副作用の排除 asa1984 2024-10-26 Nix meetup #1
V ビルド入力をハッシュ化して識別子として付4 V パッケージはハッシュでのみ区別され% パッケージのバージョンが意味を失Ç アップグレード = 異なるハッシュの算出 一意なパッケージ識別 asa1984
2024-10-26 Nix meetup #1 ビルド入力 ビルド 成果物 サンドボックス でビルド ハッシュ計算 SHA-256
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
e Nixにおける最小単U e ビルド入力とハッシュ(ストアパス)が記述された中間表 e Derivationはビルド成果物に一意に対応す Ã 実質、パッケージ = Derivation
Derivation (導出) asa1984 2024-10-26 Nix meetup #1 Derivation ビルド 成果物 Realise Realisation Derivationから実際にビルド成果物を生成する手順
パッケージに相当するもの: Derivatiop 一般的な「パッケージ」という単位で管理していなE Derivationとビルド成果物を区別する意味はなE 成果物はレシピから一意に導かれ1
つまり、宣言7 パッケージをビルドするにはDerivationを扱う必要があ1 Ä Nix言語の登場 Nixにおける「パッケージ」の意味 asa1984 2024-10-26 Nix meetup #1 Derivationの汎用性 Derivationは何でも導け1 実行可能ファイルでも、ただのテキストファイルでもよE あらゆるソフトウェアコンポーネントをDerivationとして扱える
" Derivationを辿っていくと木構造にな' " 完全な依存関係ツリ " Closures(クロージャー)と呼ばれる 完全な依存関係の特定 asa1984 2024-10-26 Nix
meetup #1 Derivation Derivation Derivation Derivation Derivation Derivation Derivation Derivation
04 実現される機能 asa1984 2024-10-26 Nix meetup #1
Nixの特徴的な機能 asa1984 2024-10-26 Nix meetup #1 DS バイナリキャッシX IS リモートビルF
WS ガベージコレクション
2種類のデプロイ asa1984 2024-10-26 Nix meetup #1 ソースコードデプロイ バイナリデプロイ t デプロイ先でビルg
t 依存関係の整合性を確保できf t リソース消費が大きい t デプロイ前にビルg t 整合性を損なう可能性があf t リソース消費が小さい ビルド ビルド
ビルドが決定的な場合 asa1984 2024-10-26 Nix meetup #1 ソースコードデプロイ バイナリデプロイ v デプロイ先でビルi
v 依存関係の整合性を確保できh v リソース消費が大きい v デプロイ前にビルi v 整合性を損なう可能性があh v リソース消費が小さい ビルド ビルド = 等価になる
バイナリキャッシュ asa1984 2024-10-26 Nix meetup #1 Derivation ビルド 成果物 Realise
バイナリキャッシュ サーバー クラウド ローカル ハッシュを照会 ビルド成果物を直接取得
リモートビルド asa1984 2024-10-26 Nix meetup #1 Derivation ビルド 成果物 Realise
リモートマシン クラウド ローカル Realisationを委任 ビルド成果物だけ送信
4 安全なアンインストー1 4 依存関係ツリーを利用した安全な削È 4 有効化されたパッケージから辿れない パッケージを自動的に削除 ガベージコレクション asa1984 2024-10-26
Nix meetup #1 ストアオブジェクト Derivation ストアオブジェクト ストアオブジェクト ストアオブジェクト ストアオブジェクト ストアオブジェクト ストアオブジェクト 有効なパッケージと してマーク
最後に asa1984 2024-10-26 Nix meetup #1
p パラダイムシフc p 今後、Nixのパラダイムが普及するのではないA p 安全・柔軟・正しいデプロv p 複雑性の高まりによる破綻の防 p (パラダイムが同じならNixでなくてもよい
p Nixフレンドリーなプロジェクc p 言語・ツール・プロジェクトによってパッケージングの難易度は大きく変わる 展望 asa1984 2024-10-26 Nix meetup #1
asa1984 2024-10-26 Nix meetup #1 ありがとうございました