$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nix入門パラダイム編
Search
asa1984
October 27, 2024
Technology
4
240
Nix入門パラダイム編
Nix meetup #1 に登壇した際のスライド
asa1984
October 27, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
sre本読んだ感想
pisakun
0
200
専門領域に特化したチームの挑戦
leveragestech
0
250
アジャイルテストの4象限で考える プロダクト開発の品質への向き合い方
nagano
1
270
GAS × Discord bot × Gemini で作ったさいきょーの情報収集ツール
ysknsid25
1
650
TimeTreeが経た3つの転換点 ー プロダクト成長過程でその時、その瞬間、何を考えてたか
ysmtysts
1
2.7k
MySQL 8.0 から PostgreSQL 16 への移行と RLS 導入までの道のりと学び
baseballyama
0
710
Raspberry Pi 秋の新製品をチェックしてみよう / 20231202-rpi-jam-tokyo
akkiesoft
0
340
データカタログを自作したけど 運用しなかった話@Findy Lunch LT「データカタログ 事例から学ぶメタデータ管理の実態」
ryo_suzuki
2
640
Engineer Recruting Deck
siva_official
PRO
1
3.3k
品質管理チームのEMとして大事にしていること / QA EM
nihonbuson
0
420
GitHub Actions의 다양한 기능 활용하기 - GitHub Universe '24 Recap
outsider
0
110
Ruby on Browser - RubyWorld Conference 2024
tmtms
1
100
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
For a Future-Friendly Web
brad_frost
175
9.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
880
Statistics for Hackers
jakevdp
796
220k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Agile that works and the tools we love
rasmusluckow
328
21k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Making the Leap to Tech Lead
cromwellryan
133
9k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
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 ありがとうございました