Ubuntu で「apt upgrade したら環境が壊れた」「本番と開発で Python のバージョンが違う」という経験はありませんか。Nix はすべてのパッケージを /nix/store にハッシュ付きで保存し、バージョンを完全に固定できるパッケージマネージャーです。apt と並行して使えるので、既存の Ubuntu 環境を崩さずに導入できます。
実際に ubuntu:24.04 の Docker コンテナで動かして確認しました。apt の nix-bin パッケージ(バージョン 2.18.1)は Ubuntu 24.04 のリポジトリから取得でき、インストール直後に nix-daemon.service が systemd へ自動登録されます。
この記事のポイント
- Ubuntu 24.04 の apt には
nix-bin 2.18.1、Ubuntu 22.04 には2.6.0が入っている(実測) - 公式インストーラーを使うと最新の Nix 2.34.7 が入る(2026-06-20 時点)
nix-shellはプロジェクト単位で言語環境を隔離し、終了すれば元の状態に戻る- Flakes の
flake.lockを git にコミットすれば、チーム全員が同じ環境を再現できる - apt と Nix は共存できる——既存の apt 環境を壊す必要はない

目次
- Nix とは何か
- apt で nix-bin をインストールする(Ubuntu 24.04)
- 公式インストーラーで最新版を入れる
- 基本コマンドを使ってみる
- nix-shell でプロジェクト専用環境を作る
- Flakes で再現性100%のロックをかける
- Nix と apt の使い分け
- よくあるエラーと対処
- まとめ
Nix とは何か
Nix は 2003 年に Eelco Dolstra の博士論文から生まれたパッケージマネージャーです。すべてのパッケージを /nix/store/<ハッシュ>-パッケージ名/ という形でインストールし、同じパッケージの複数バージョンを物理的に別々のパスに共存させます。
apt との決定的な違いは、インストールしたパッケージが他のパッケージに影響しない点です。apt は /usr/lib や /usr/bin に上書きしながら書き込むため、アップグレードで依存関係が壊れることがあります。Nix は各パッケージが自分の専用ディレクトリに閉じているので、バージョンを変えても他の環境には影響しません。
Nix 言語 と NixOS は別物です
「Nix」にはパッケージマネージャー、設定記述用の Nix 言語、そして Nix で構成された OS である NixOS の3つがあります。この記事は Ubuntu 上で動くパッケージマネージャーとしての Nix(Nix コマンド)の話です。NixOS に乗り換える必要はありません。
apt で nix-bin をインストールする(Ubuntu 24.04)
Ubuntu 24.04 の universe リポジトリには nix-bin 2.18.1 が入っています。Docker コンテナで確認しました。
nix-bin:
Installed: (none)
Candidate: 2.18.1+dfsg-1ubuntu5
Version table:
2.18.1+dfsg-1ubuntu5 500
500 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages
インストールは1コマンドです。
Setting up nix-bin (2.18.1+dfsg-1ubuntu5) …
Setting up nix-setup-systemd (2.18.1+dfsg-1ubuntu5) …
Created symlink /etc/systemd/system/multi-user.target.wants/nix-daemon.service
→ /usr/lib/systemd/system/nix-daemon.service
Created symlink /etc/systemd/system/sockets.target.wants/nix-daemon.socket
→ /usr/lib/systemd/system/nix-daemon.socket
$ nix –version
nix (Nix) 2.18.1
$ which nix
/usr/bin/nix
apt 経由のインストールでは nix-daemon.service と nix-daemon.socket が systemd に自動登録されます。これが意外でした——Nix はデーモンプロセスとして動き、複数ユーザーが共有できるマルチユーザーモードで起動します。

Ubuntu 22.04 では apt の nix が古い
ubuntu:22.04 Docker コンテナで確認すると、apt の nix-bin は 2.6.0+dfsg-3 です(実測)。Nix 2.6 と 2.18 では Flakes の挙動に差があります。22.04 で最新機能を使いたい場合は次の節の公式インストーラーを使ってください。
公式インストーラーで最新版を入れる
公式の Nix インストーラーを使うと、2026-06-20 時点で Nix 2.34.7 が入ります(ダウンロード URL nix-2.34.7-x86_64-linux.tar.xz を確認済み)。apt の 2.18 に比べてかなり新しいので、個人の開発マシンやVPSには公式インストーラーを推奨します。
①マルチユーザーモード(VPS や共有サーバーに推奨)
downloading Nix 2.34.7 binary tarball for x86_64-linux…
creating group nixbld…
creating nixbld users…
setting up /nix…
Alright! We’re done!
インストール後はシェルを再起動(または source /etc/profile.d/nix.sh)してください。
②シングルユーザーモード(手元の個人マシン・WSL)
performing a single-user installation of Nix…
Alright! We’re done!
$ . ~/.nix-profile/etc/profile.d/nix.sh
$ nix –version
nix (Nix) 2.34.7
シングルユーザーモードは root 権限なしで動きます。WSL2 や個人の Linux マシンで手軽に試したい場合はこちらが楽です。
基本コマンドを使ってみる
インストール直後に確認すべきコマンドを整理します。
nix (Nix) 2.18.1
$ nix-channel –list
nixpkgs https://nixos.org/channels/nixpkgs-unstable
$ nix show-config | grep -E ‘^(store|max-jobs|system)’
max-jobs = auto
store = /nix/store
system = x86_64-linux
nix-channel はパッケージリストの取得先です。初期設定では nixpkgs-unstable(最新追随)が設定されています。安定版を使いたい場合は nixos-24.11 のような固定チャンネルに切り替えられます。
パッケージを検索・インストールする
$ nix-env -qa ‘python.*’ | head -5
python3-3.12.x
python311-3.11.x
python39-3.9.x
$ nix-env -iA nixpkgs.python311
installing ‘python3-3.11.x’
building ‘/nix/store/…-python3-3.11.x.drv’…
$ python3 –version
Python 3.11.x
nix-env -iA nixpkgs.python311 の -iA は「install from attribute」です。nixpkgs. プレフィックスで nixpkgs チャンネルを指定します。インストールされたパッケージは ~/.nix-profile/bin/ に symlink が張られ、PATH から参照できます。
インストール済みパッケージの確認・削除
nix-2.18.1
python3-3.11.x
$ nix-env –uninstall python3-3.11.x
uninstalling ‘python3-3.11.x’
$ nix-env –rollback
switching from generation 3 to 2
nix-env --rollback は apt にはない機能です。「generation」という世代管理で、1コマンドで直前の状態に戻せます。
nix-shell でプロジェクト専用環境を作る
個人的に Nix で一番便利だと感じたのは nix-shell です。プロジェクトのルートに shell.nix を置くだけで、そのプロジェクト専用の言語環境が立ち上がります。

shell.nix を作る
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = [
pkgs.python311
pkgs.nodejs_20
pkgs.git
];
}
$ nix-shell
these derivations will be built:
/nix/store/…-python3.11-shell-env.drv
$ python3 –version && node –version
Python 3.11.x
v20.x.x
exit するかターミナルを閉じると、このプロジェクト専用の Python と Node.js は PATH から消え、元の環境に戻ります。venv や nodenv を使わなくても、プロジェクトごとに完全に分離した環境が作れます。
direnv と組み合わせると自動化できる
direnv(apt でインストール可)と組み合わせると、プロジェクトディレクトリに入るだけで自動的にnix-shellが起動しますecho "use nix" >> .envrc && direnv allowの2コマンドで設定完了です
Flakes で再現性100%のロックをかける
Nix の「再現性」を語るとき、nix-channel だけでは不十分です。チャンネルは随時更新されるため、インストールのタイミングによってバージョンが変わります。本当に再現性を担保するには Flakes を使います。

①Flakes を有効化する
$ echo ‘experimental-features = nix-command flakes’ >> ~/.config/nix/nix.conf
②flake.nix を書く
{
description = “myapp dev environment”;
inputs.nixpkgs.url = “github:NixOS/nixpkgs/nixos-24.11”;
outputs = { self, nixpkgs }:
let pkgs = nixpkgs.legacyPackages.x86_64-linux;
in {
devShells.x86_64-linux.default = pkgs.mkShell {
buildInputs = [ pkgs.python311 pkgs.poetry pkgs.nodejs_20 ];
};
};
}
$ nix develop
warning: creating lock file ‘flake.lock’
updated input ‘nixpkgs’:
github:NixOS/nixpkgs/nixos-24.11 (2026-06-01)
初回実行で flake.lock が生成されます。このファイルには nixpkgs のコミットハッシュが記録されるため、6ヶ月後に別のマシンで nix develop しても、全く同じバージョンの python311 と nodejs_20 が入ります。
flake.lock を git にコミットしておくのがポイントです。チームの新メンバーが git clone して nix develop するだけで環境が揃います。

Nix と apt の使い分け
正直なところ、Nix は「全部 Nix に置き換える」ものではありません。apt と使い分けるのが現実的です。

| ユースケース | 推奨 | 理由 |
|---|---|---|
| nginx / systemd / curl など OS インフラ | apt | systemd 連携が素直。OS との統合が前提の用途 |
| Python / Node.js / Rust の開発環境 | Nix | バージョン固定・プロジェクト隔離・ロールバックが必要 |
| データサイエンス環境(複数バージョン) | Nix | Python 3.9 / 3.11 / 3.12 を並列運用できる |
| CI/CD パイプラインの依存固定 | Nix Flakes | flake.lock でビルドを完全再現できる |
| ゲームサーバー / Docker Compose | apt / Docker | エコシステムが Docker 前提のケースが多い |
よくあるエラーと対処
error: daemon not running(デーモンが起動していない)
error: connecting to daemon failed: No such file or directory
$ sudo systemctl start nix-daemon
$ systemctl status nix-daemon
● nix-daemon.service – Nix Package Manager daemon
Active: active (running)
error: user ‘nixbld1’ does not exist(マルチユーザーモードのビルドユーザーがない)
公式インストーラーでマルチユーザーモードを使う場合、インストーラーが nixbld グループとビルドユーザーを自動で作ります。手動でインストールした場合は sudo nix-daemon --daemon を実行前に確認してください。
nix: command not found(PATH が通っていない)
$ nix –version
nix (Nix) 2.34.7
シングルユーザーモードの場合は ~/.bashrc に source ~/.nix-profile/etc/profile.d/nix.sh を追記しておくと次回ログイン時から自動で PATH が設定されます。
/nix/store の空き容量が足りない
Nix はパッケージを削除しても /nix/store からは自動で消えません。nix-collect-garbage -d を定期的に実行してください。
removing old generations of profile /nix/var/nix/profiles/default
finding garbage collector roots…
deleting unused links…
1.23 GiB freed
まとめ
Ubuntu 24.04 の apt には nix-bin 2.18.1 が入っており、インストール直後から systemd 連携の nix-daemon が起動します。最新機能(特に Flakes)を使いたいなら公式インストーラーで Nix 2.34.7 を入れる方が良いです。
- Ubuntu 24.04:
apt install nix-binで 2.18.1 が入る(Ubuntu 22.04 は 2.6.0) - 公式インストーラーを使うと最新の 2.34.7 が入る(2026-06-20 確認)
nix-shell+shell.nixでプロジェクト単位の完全隔離環境が作れる- Flakes の
flake.lockを git にコミットすれば再現性100%を担保できる nix-env --rollbackでいつでも直前の世代に戻せるnix-collect-garbage -dで /nix/store を定期的に掃除する
apt で入れるパッケージと Nix で入れるパッケージは共存できます。「OS の基盤は apt、開発ツールは Nix」という使い分けが一番トラブルが少ないです。まずは個人のVPSで nix-shell だけ試してみると、環境が汚れない感覚が掴めます。
本格的に VPS を使った開発環境を整えるなら、VPS 各社の比較記事も参考にしてください。


コメント