NixOSを使い続ける理由——「状態の山」から解放される宣言的OS管理とは

元記事を読む
キュレーターコメント

「OSが状態の山になる」という誰もが経験する問題を、宣言的設定で根本解決するNixOSの魅力を筆者の実体験から語った良記事。LLMコーディングエージェントとの相性という視点が特に刺さった。

概要

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 shellnix 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単体インストールから始めてみるのが手軽な入口だ。