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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
asa1984
October 27, 2024
Technology
1.6k
6
Share
Nix入門パラダイム編
Nix meetup #1 に登壇した際のスライド
asa1984
October 27, 2024
More Decks by asa1984
See All by asa1984
Real World Effect-TS: 堅牢なプロダクトを型で組み上げる
asa1984
2
500
Real World Nix CI/CD編
asa1984
3
660
Other Decks in Technology
See All in Technology
【禁断】Obsidianの第二の脳に「知の巨人」と呼ばれた師匠の脳をロードしてみた
nagatsu
0
6.4k
コーポレートサイトのアクセシビリティ改善とJIS準拠への実践
lycorptech_jp
PRO
2
140
20260528_生成AIを専属DSに_Howの次にすべきことを考える
doradora09
PRO
0
200
Claude Code x Accounting
kawaguti
PRO
1
320
GitHub Copilot CLI の Rubber Duck 機能を使ってコーディングの品質をあげよう #techbaton_findy
stefafafan
2
1k
Geek Woman の育ち方 〜コミュニティとAIと〜
chicaco
0
410
Amazon CloudFrontにおけるAIボットアクセス制御のポイント
kizawa2020
4
270
権限管理設計を完全に理解した
rsugi
1
200
RubyでRuby拡張を書いたらRubyより35倍速になったってどういうこと??
kazuho
3
600
TypeScript で Platform SDK を作る技術
toiroakr
1
280
AI時代の私の技術インプットとアウトプット術
tonkotsuboy_com
3
2.1k
AIAgentと取り組むKaggle
508shuto
2
550
Featured
See All Featured
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
340
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
130
Unsuck your backbone
ammeep
672
58k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
140
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Mobile First: as difficult as doing things right
swwweet
225
10k
Site-Speed That Sticks
csswizardry
13
1.2k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Automating Front-end Workflow
addyosmani
1370
210k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
390
Paper Plane (Part 1)
katiecoart
PRO
0
7.8k
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 ありがとうございました