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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
asa1984
October 27, 2024
Technology
1.6k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nix入門パラダイム編
Nix meetup #1 に登壇した際のスライド
asa1984
October 27, 2024
More Decks by asa1984
See All by asa1984
Real World Effect-TS: 堅牢なプロダクトを型で組み上げる
asa1984
2
660
Real World Nix CI/CD編
asa1984
3
690
Other Decks in Technology
See All in Technology
2026TECHFRESH畢業分享會 - Lightning Talk - E起 See See : 電商推薦讀心術? 數據說了算
line_developers_tw
PRO
0
930
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
110
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
150
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2.2k
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
150
Bedrock AgentCore RuntimeでAuth0 Changelog調査AIをアップグレードした話
t5u8a5a
1
110
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
550
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
940
AIエージェントが名古屋の猛暑からあなたを守る
happysamurai294
0
110
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
940
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
130
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
77
5.4k
Producing Creativity
orderedlist
PRO
348
40k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
Are puppies a ranking factor?
jonoalderson
1
3.5k
Leo the Paperboy
mayatellez
7
1.8k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The Art of Programming - Codeland 2020
erikaheidi
57
14k
We Have a Design System, Now What?
morganepeng
55
8.2k
How to Ace a Technical Interview
jacobian
281
24k
Designing for Performance
lara
611
70k
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 ありがとうございました