OSはなぜ「ゴミ屋敷」になるのか
Linuxを長く使っていると、誰もが一度は経験する問題がある。パッケージをインストールして、設定をいじって、ツールを試して消して、アップグレードを繰り返した結果——「なぜか動いているが、なぜ動いているか説明できないマシン」の出来上がりだ。これはシステムが「状態の山(pile of state)」に変貌していく過程であり、再現性も透明性もない。
NixOSはこの問題に対して、根本から別のアプローチを取る。OSの作者Birkey氏が語るように、NixOS愛の本質はLinuxディストロとしてのブランドではなく、Nixパッケージマネージャーが実現する「決定論的・再現可能な関数型パッケージ管理」にある。
NixOSの核心——宣言的定義でOSを「ビルド」する
NixOSでは、パッケージ・設定・デスクトップ挙動をすべてNix DSL(ドメイン固有言語)で一元的に記述できる。たとえばGNOME拡張機能の導入と設定はこうなる:
environment.systemPackages = with pkgs; [
gnomeExtensions.dash-to-dock
gnomeExtensions.unite
gnomeExtensions.appindicator
libappindicator
];
services.desktopManager.gnome.extraGSettingsOverrides = ''
[org.gnome.shell]
enabled-extensions=['dash-to-dock@gnome-shell-extensions.gcampax.github.com',
'unite@hardpixel.eu', 'appindicatorsupport@rgcjonas.gmail.com']
[org.gnome.shell.extensions.dash-to-dock]
dock-position='BOTTOM'
autohide=true
dock-fixed=false
extend-height=false
transparency-mode='FIX'
'';
キーボードマッピングも同様に、デバイスIDごとに異なるキーマップを宣言的に定義できる:
services.keyd = {
enable = true;
keyboards = {
usb_keyboard = {
ids = [ "usb:kb" ];
settings.main = {
leftcontrol = "leftmeta";
leftmeta = "leftcontrol";
};
};
laptop_keyboard = {
ids = [ "laptop:kb" ];
settings.main = swapLeftAltLeftControl;
};
};
};
これをリビルドすれば設定が即反映され、気に入らなければロールバックできる。新しいPCを買っても、同じNixファイルから環境を再現できる。
LLM時代のコーディングに最適な理由
Birkey氏が特に強調しているのが、AIコーディングエージェント時代との相性の良さだ。コーディングエージェントは特定バージョンのコンパイラやランタイムを必要とし、使い捨てのツールを頻繁に出し入れする。NixOSのnix shellやnix developを使えば、ベースシステムを汚染せずに完全に隔離されたパッケージ環境を瞬時に構築・破棄できる。
nix shell nixpkgs#python311 nixpkgs#nodejs_20——一時的に複数ツールを利用nix develop——プロジェクト定義の再現可能な開発シェルに入る- ロールバック機能でOSアップグレードのリスクをゼロに近づける
- macOS・Linux・FreeBSD(コミュニティ版)で同一のパッケージマネージャーを使用可能
また6ヶ月ごとの安定リリースサイクルを持ち、安定版のnixos-stableと実験的なnixos-unstableチャンネルを切り替えることで、安定性と最先端のどちらも享受できる。
まとめ——「退屈なノートPC」こそ最高の開発環境
Birkey氏はHPのノートPCを購入してNixOSをインストールし、ハードウェアとの格闘もなくすぐに使える状態になったと語っている。彼の言葉を借りれば、「最良の意味で退屈なラップトップ」——それがNixOSの目指すところだ。
システムの状態管理に悩むDevOpsエンジニア、複数台の開発マシンを統一管理したいエンジニア、LLMエージェントを活用する開発者にとって、NixOSとNixパッケージマネージャーは一度試す価値が十分にある。まずはmacOSやLinuxへのNix単体インストールから始めてみるのが手軽な入口だ。