Macには、追加ソフトウェアをインストールするためのサードパーティ製パッケージマネージャーがいくつかあります。macOSでNixパッケージマネージャーを使用する方法をご紹介します。
Nixとは何ですか?
Nixは、プラットフォームを問わずコンテナベースの開発環境を提供するパッケージマネージャーです。DockerやKubernetesなどのコンテナシステムと同様に、Nixを使用すると、設定や手間をかけずに、複数のマシンやネットワークに構成済みの開発環境をインストールできます。
従来、Macではサードパーティ製パッケージのインストールにMacPortsまたはHomebrewが使用されていました。どちらのシステムにも長所と短所があります。
Homebrew は、その使いやすさとインストールのしやすさから、Mac コミュニティで人気を博しています。macOS のターミナル アプリから数個のコマンドだけでパッケージをインストールでき、アップデートも自動で簡単に行えます。
しかし、HomebrewとMacPortsはどちらもマシン間の移植性に欠けています。ターミナル(シェル)スクリプトを作成してHomebrewまたはMacPortsのパッケージを複数のシステムにインストールすることは可能ですが、スクリプトのメンテナンスが複雑になり、あらゆるマシン構成を考慮したスクリプトを作成するのは困難な場合が多くあります。
Nix は、開発環境をコンテナ化し、システム間での移植性を高めることでこの問題を解決します。
Nix を使用する場合のトレードオフコストは、構成が若干複雑になり、学習曲線が急になるという点です。
Nixエコシステム
NixOS FoundationのNixOSは、実際には複数の機能を備えています。Nixパッケージマネージャーを使用するLinuxディストリビューションです。Nixpkgsは、Nixパッケージマネージャーを使用してインストールできる80,000以上のパッケージのコレクションです。
Nix パッケージ マネージャーを使用して Nixpkgs をインストールします。
Nix には、Nix マニュアル、Nixpkgs マニュアル、NixOS マニュアルの 3 つのマニュアルがあります。
Nix リファレンス マニュアルもあります。
コミュニティによって管理されている非公式のNixOS Wikiが利用可能で、Nix開発サイトはnix.devにあります。NixOS Wikiには、パッケージマネージャ、Nix言語、Nixpkgs、そしてNixOS自体に関する情報が掲載されています。
新しいインストール用にパッケージの一部を作成およびコピーするために使用できる Nix 言語もあります。
Nix をインストールして使用する前に、少なくとも Nix マニュアル全体を読むことをお勧めします。
Nix のドキュメント。
定義
Nix を使用するには、理解する必要がある新しい用語がいくつかあります。
Nixは宣言型プログラミングに基づいています。つまり、ソフトウェアがどのように行うかではなく、何をすべきかを記述することでプログラムを作成します。簡単に言うと、宣言型プログラミングは、ソフトウェアが状態に基づいて動作したり、何らかの結果を得るために状態を変更したりすることを避けようとします。
式。Nix式は基本的に、インストール可能なソフトウェアのサブコンポーネントであり、後で取得してインストールできるように事前に定義されています。式を使用する目的は、コンポーネントが既に定義されているため、インストール時にすべてのシステムで同じように動作することです。
各式には検索パスもあります。
チャンネル。Nixチャンネルは、リモートから取得およびインストールできる、1つ以上の定義済みNix式への特定のパスです。公式チャンネルのリストはchannels.nixos.orgに掲載されています。
ほとんどのチャンネルにはバージョンがあります。チャンネルは登録したり登録解除したりすることもできます。
各チャンネルにはダウンロード可能なコンテンツがあり、チャンネルのインストール時にインストールされます。
Store。Homebrew や UNIX 自体とは異なり、Nix は /usr、/bin、/sbin、/opt などの標準の UNIX ディレクトリにパッケージをインストールしません。
代わりに、Nixは独自のストアを作成します。これは、インストールされたすべてのパッケージを保存するための特別なディレクトリとボリュームです。ストアを使用することで、ストア全体をまとめて移動できるため、Nixパッケージの移植性が大幅に向上します。
Nix は に設定ファイルをインストールしますが/etc/nixos/configuration.nix
、このファイルは macOS Finder の隠しファイル機能をオンにしない限り通常は表示されません。
FlakesはNixの実験的な機能で、パッケージ間の依存関係を定義および制御するために使用されるファイルです。Nix flakesは人気がありますが、まだ実験段階であり、十分なドキュメントがないため、自己責任でご利用ください。
ガベージコレクション。一部のプログラミング環境と同様に、Nix パッケージを削除しても、実際にはすぐにはアンインストールされません。アンインストールするには、Nixガベージコレクターを実行します。
ガベージ コレクターは、バックグラウンドで静かに実行され、不要になった未使用または古くなったコンポーネントをクリーンアップするプロセスと考えてください。
多くの最新システムではガベージ コレクターが使用されています。これには、Java VM、Apple の Swift および Objective-C ランタイムが含まれます。
インストール後はいつでもターミナルで次のコマンドを使用して Nix ガベージ コレクターを呼び出すことができます。
nix-collect-garbage
コマンドラインツール
Nixのインストールには、ターミナルアプリから実行できるコマンドラインツール(CLI)がいくつか含まれています。これらには以下が含まれます。
nix-env
- Nixユーザー環境を操作するために使用されるnix-build
- Nix式の構築に使用nix-shell
- Nix式に基づいた対話型コマンド環境nix-store
- Nixストアを操作または照会する
これらすべてのコマンドとその他の詳細は、Nix マニュアルに記載されています。
Nix ユーザー環境は、Nix によってインストールされるソフトウェアとツールのセットです。
Nixのインストール
Nix は通常 にインストールされます/nix
が、macOS Catalina 以降、macOS 起動ディスクのルートは読み取り専用です。
Volumes
代わりに、Catalina 以降のシステムでは、Nix は Nix ストアを保持するための新しいボリュームを作成し、それを起動ディスクのルートにある
隠し macOS フォルダ内のボリュームとしてマウントします。
管理者アクセス権がある場合、インストーラーを実行すると、新しいボリュームを作成するために sudo (スーパーユーザー) 権限の入力が求められます。
ターミナルで対話型 Nix インストーラーを実行するには、次のように入力します。
curl -L https://nixos.org/nix/install | sh
そしてReturnを押します。
インストーラーを実行すると、これから実行する処理とインストール先に関する短いメッセージが表示されます。また、新しいUNIXユーザーとそのユーザーのUUIDが作成されます。これらは、Nixコンテナとパッケージのビルド時に使用されます。
Nix インストーラーは、Nix ストア ボリュームへの参照を に保存します/etc/fstab
。
Nix ストア ボリュームはマウントされますが、Finder のデスクトップにはマウントされないことに注意してください。Mac のデスクトップには表示されませんが、それでもそこに存在します。
代わりに、Nixは起動ディスクのルートにある「Nix Store」というディレクトリにマウントします。このディレクトリ内には、storeフォルダとvarフォルダがあります。
storeフォルダーには、NIX がダウンロードしてインストールしたすべてのパッケージとチャネルが含まれ、varフォルダーにはログ フォルダーが含まれ、nixフォルダーには DB、プロファイル、バックグラウンド デーモンへの接続、ユーザー プール、およびその他の部分が含まれます。
起動ディスクのルートにある NIX ストア ボリューム。
fstab
すべてのファイルシステムとそのボリュームが存在する場所を UNIX に伝えるファイルシステムテーブルファイルです。
インストーラを続行する準備ができたら、ターミナルに管理者パスワードを入力してReturn キーを押します。
Nix インストーラが実行され、その際に何を作成しているかの説明が表示されます。
インストールされた Nix に sudo アクセス権限がある場合、Mac の起動ディスクのユーザーおよびetc
フォルダにある隠しユーザー プロファイル ファイルに次のような構成オプションを追加しようとします。
/etc/bashrc /etc/profile.d/nix.sh /etc/zshrc /etc/bash.bashrc /etc/zsh/zshrc
これらのプロファイル ファイルは、ログイン時に macOS によって読み込まれ、環境変数とインストールされたソフトウェアへのパスが含まれています。
最後に、Nix インストーラーは、バックグラウンドで Nix ストアをサイレントに管理する という
名前のバックグラウンド プロセスまたはデーモンを設定します。nix-daemon
インストーラが終了したら、ターミナルを終了して再度開くか、新しいターミナル シェルを開いてターミナルが新しい Nix 構成をすべて読み込むようにする必要があります。
インストーラが終了したら、次のコマンドでデフォルトの Nix パッケージを初期化し、ターミナルで Nix のインストールをテストできます。
nix-shell -p nix-info --run "nix-info -m"
パスの取得に関するメッセージが表示され、その後、ローカルの Nix ストアにインストールされているすべてのパッケージのリストが表示されます。
メッセージの下部に、現在の Nix および Darwin のバージョン番号、チャネル名、パッケージ プロファイル ファイルへのパスが表示されます。
ターミナルでnix-env --install
コマンドに続けてパッケージ名を入力することで、既存のNixパッケージを手動でインストールすることもできます。例:
nix-env --install firefox
パッケージのアンインストールも同様ですが、コマンド
--uninstall
にフラグを使用します。nix-env
追加リソース
優れたサードパーティの Nix サイトがいくつかありますので、ぜひチェックしてみてください。
Zero-to-nix.com は Nix の使用ガイドであり、クイック スタートと概念のセクションが含まれており、Nix の各部分とそれらがどのように組み合わされているかについての優れた概要が説明されています。
Determinate.systems は Nix 中心のサイトであり、多くの Nix チュートリアルと、ターミナルベースのインストールを使用しない場合に備えてスタンドアロンの Nix インストーラーが含まれています。
Ryan Yin による「The Nix and Flakes Book」は、役立つ Nix 関連情報が満載の初心者向けのオンライン チュートリアルおよび GitHub リポジトリです。
nix-darwin リポジトリには、Nix パッケージ マネージャーの Darwin (macOS) ポートのすべてのモジュール、パッケージ、およびドキュメントが含まれています。
Nixpacks は、任意のファイルディレクトリを取得してコンテナ化し、再利用できるようにするユーティリティです。
最後に、opencontainers.org の Open Container Initiative をぜひご覧ください。
Nixの長所と短所
一度学習曲線を乗り越えれば、Nixは非常に効果的で便利なツールになります。システム間でポータブルコンテナを設定・再インストールできる機能は非常に強力です。
任意の環境とツールのセットを構成し、ほとんどのシステムに再展開できるようにパッケージ化できます。
独自のカスタム Nix パッケージとコンテナを作成し、それを再利用できるため、新しいマシンを構成する必要があるときに多くの時間を節約できます。
パッケージマネージャーとしてのNixの主な欠点は、複雑さと学習曲線の複雑さです。また、現時点ではWindows版はありません。
HomebrewはNixよりもシンプルですが、インストール用のカスタムシェルスクリプトを独自に作成する以外、Homebrewは移植性に欠けています。あらゆるシステム向けにカスタムインストールシェルスクリプトを作成するのは現実的ではありません。
Nix を学習して習得すると、Nix は開発の武器となる強力なツールになります。