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
5
1.4k
Nix入門パラダイム編
Nix meetup #1 に登壇した際のスライド
asa1984
October 27, 2024
Tweet
Share
More Decks by asa1984
See All by asa1984
Real World Nix CI/CD編
asa1984
3
550
Other Decks in Technology
See All in Technology
Red Hat OpenStack Services on OpenShift
tamemiya
0
130
AWS Network Firewall Proxyを触ってみた
nagisa53
1
240
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
210
20260204_Midosuji_Tech
takuyay0ne
1
160
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
120
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
180
コミュニティが変えるキャリアの地平線:コロナ禍新卒入社のエンジニアがAWSコミュニティで見つけた成長の羅針盤
kentosuzuki
0
130
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
680
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
370
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.3k
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
710
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
1k
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
67
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
Amusing Abliteration
ianozsvald
0
100
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
440
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Raft: Consensus for Rubyists
vanstee
141
7.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.7k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
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 ありがとうございました