Help us understand the problem. What is going on with this article?

Nixパッケージマネージャーの使い方

Nixはいいぞ

私は仕事用に Windows(会社支給), 普段使い用に MacBook Pro(友達から貰った), 実験用に Manjaro Linux(会社の先輩から貰った)を使っていますが、その全てでパッケージマネージャーには nix を使ってます。
(ただし、Windows では Ubuntu on WSL2 の中で Nix を使ってます)

なぜ大人しく apt や homebrew を使うのでなく、Nix を使うのかというと、

  1. 宣言的に環境を管理できるので環境の再現が容易
  2. カスタマイズ性が高い
  3. docker が要らない
  4. アンインストールしたときに予期せぬところにゴミが残ることがない
  5. 環境をいつでも戻すことができる

というところが嬉しいからです。

もっと Nix が普及してほしいので、Nix パッケージマネージャーのインストール方法と基本的なコマンドの使い方を紹介します。

Nix のインストール

Linux

$ sh <(curl -L https://nixos.org/nix/install)

ひとつ注意点があって、fish shell では実行できません。

macOS

$ sh <(curl -L https://nixos.org/nix/install) --darwin-use-unencrypted-nix-store-volume

.bashrc への追記

Linux でも Mac でも nix を使うための必要な環境変数の設定のために、 ~/.bashrc

if [ -e $HOME/.nix-profile/etc/profile.d/nix.sh ]; then
    . $HOME/.nix-profile/etc/profile.d/nix.sh;
fi

を追記しておきましょう。

チャンネル登録

まず、使うためには、Nix パッケージのチャンネルを登録する必要があります。

チャンネルの操作にはnix-channelコマンドを使ってください。

$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
$ nix-channel --update

nix-channel --updatesudo apt update みたいなものです。

パッケージ管理

パッケージ管理のためのメインのコマンドは nix-env です 。

nix-envを使って、パッケージのインストール、アップグレード、削除、検索などができます。

検索

nix-env -qa でインストール可能なパッケージを全部閲覧できます。

nix-env --query --available でも同じです。

$ nix-env -qa
aterm-2.2
bash-3.0
binutils-2.15
bison-1.875d
blackdown-1.4.2
bzip2-1.0.2
...

-qa のあとにパッケージの名前を入れれば特定のパッケージを検索できます。

$ nix-env -qa firefox
firefox-68.11.0esr
firefox-78.1.0esr
firefox-79.0

検索には正規表現も使えます。

$ nix-env -qa 'firefox-.*'

パッケージのインストール

nix-env -iまたはnix-env --installでパッケージのインストールができます。

ちなみに、 sudo は要りません。インストールしたパッケージはシステムにではなく、ユーザーにインストールされます。システム全体への影響は(多分)ありません。

$ nix-env -i subversion

nix-env -qでインストール済みのパッケージを全て確認することができます。

$ nix-env -q
nix-2.3.7
subversion-1.12.2

アップグレード

nix-env -uまたはnix-env --upgradeで環境を更新できます。

特定のパッケージのみのアップグレードをするときは、

$ nix-env -u subversion

全てのインストール済みパッケージをアップグレードするときは、

$ nix-env -u

アンインストール

nix-env -eまたはnix-env --eraseでパッケージをアンインストールできます。

nix-env -e subversion
uninstalling 'subversion-1.12.2'

rollback

Nix では、パッケージを追加したり削除したりするたびに環境の generation が作成されます。

そして、いつでもそれらの generation にロールバックすることができます。

例えば、パッケージインストールしてバグがあったから、うまく動いてたインストール前に戻したいって時に便利です。

generation の確認は、 nix-env --list-generations

$ nix-env --list-generations
   1   2020-08-03 23:36:12   
   2   2020-08-06 19:15:43   
   3   2020-08-06 19:55:13   
   4   2020-08-09 18:33:59   
   5   2020-08-09 18:34:46   (current)

(current)が現在の環境です。

ひとつ前の環境に戻るには、 nix-env --rollbackをつかいます。

$ nix-env --rollback
switching from generation 5 to 4

$ nix-env --list-generations
   1   2020-08-03 23:36:12   
   2   2020-08-06 19:15:43   
   3   2020-08-06 19:55:13   
   4   2020-08-09 18:33:59   (current)
   5   2020-08-09 18:34:46   

特定の generation に移動するには、 nix-env --switch-generationをつかいます。

$ nix-env --switch-generation 2
switching from generation 4 to 2
hnakano863
製造業の統計おじさん
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away