[Mac]Nixとbrew

TIPS
mac マック

Macにおけるパッケージマネージャーの2大巨頭、Homebrew(brew)とNixは、設計思想が180度異なります。

一言で言えば、「手軽さ・Macらしさを重視するならHomebrew」「究極の再現性・環境の汚染防止を重視するならNix」です。

それぞれの特徴、メリット・デメリット、そしてどちらを選ぶべきかを比較しました。

🚀 3行でわかる違い

項目Homebrew (brew)Nix
設計思想Macに足りないものをシンプルに補う関数型言語に基づいた、独立・再現可能な環境構築
環境への影響共有ディレクトリ(/opt/homebrewなど)を書き換える/nix/store に隔離され、既存環境を一切汚さない
学習コスト極めて低い(一般的なコマンド操作)非常に高い(Nix言語や独自概念の理解が必要)

📦 各パッケージマネージャーの特徴

1. Homebrew (brew)

Macユーザーのデファクトスタンダード(事実上の標準)です。

  • メリット:
    • 圧倒的な情報量と手軽さ: ほとんどのMac向けツールや開発環境の構築手順が「brew install」を前提に書かれています。
    • GUIアプリ(Cask)に強い: brew install --cask slack のように、MacのGUIアプリケーション(.dmg.app)を簡単に管理できます。
    • 直感的: コマンドがシンプルで、誰でもすぐに使いこなせます。
  • デメリット:
    • 環境が汚れやすい: パッケージ同士の依存関係が衝突したり、アップデートによって以前動いていたプロジェクトが突然動かなくなったりすることがあります。
    • 再現性が低い: 「別のMacに全く同じ状態を再現する」のが意外と面倒です(brew bundle はありますが、マイナーバージョンの固定などは苦手です)。

2. Nix

Linuxやこだわり派のMacユーザーの間で急速にシェアを拡大している、先進的なパッケージマネージャーです。

  • メリット:
    • 環境の完全な隔離と再現性: すべてのパッケージは /nix/store 内のハッシュ化された固有のディレクトリにインストールされます。プロジェクトごとに異なるバージョンのツールを、環境を汚さずに共存させられます。
    • 宣言的な管理(Home Manager / nix-darwin): 「どのツールを入れ、その設定ファイルをどう書くか」までをコード(Nix言語)で記述し、Gitで一元管理できます。PCを移行しても、1コマンドで元の環境が寸分違わず狂いなく再現されます。
    • 一時的な実行が可能: nix run nixpkgs#cowsay のように、PCにインストールすることなく、その場限りのコマンド実行が可能です。
  • デメリット:
    • 学習コストが「絶壁」: 独自言語(Nix言語)の習得が必要で、エラーメッセージも難解です。
    • MacのGUIアプリへの対応が発展途上: nix-darwinbrew-nix などのエコシステムを使って工夫すれば管理できますが、Homebrew Caskの手軽さには及びません。

🛠️ 機能別の比較

依存関係の解決

  • Homebrew: 共有の場所にあるライブラリをみんなで使います。Aというツールをアプデしたら、Bというツールが動かなくなる(破壊的変更)リスクがあります。
  • Nix: A専用のライブラリ、B専用のライブラリを完全に分けて保持します。そのため、環境が壊れることが構造上ありません

パッケージ数

  • Homebrew: 非常に多いですが、主にMac/Linuxでよく使われるものに特化しています。
  • Nix: nixpkgs は世界最大級のパッケージ数を誇り、Homebrewよりも多くのソフトウェア(特にマイナーなライブラリや古いバージョン)が登録されています。

💡 どちらを選ぶべき?

Homebrewが向いている人

  • 「とにかく普通に動けばいい、環境構築に時間をかけたくない」
  • Slack、Google Chrome、VS CodeなどのGUIアプリもまとめてコマンドで管理したい
  • 困ったときにすぐググって解決策を見つけたい

Nixが向いている人

  • ドットファイル(設定ファイル)や開発環境をGitで完璧に管理・共有したい
  • プロジェクトごとにツールのバージョンがバラバラで、環境の衝突に悩まされている
  • 「インフラのコード化(IaC)」のような概念が好き、または関数型言語に抵抗がない

💡 結論:ハイブリッド(共存)という選択肢も

実は、「CLIツールや開発環境はNixで汚さずに管理し、MacのGUIアプリだけはHomebrew Caskで手軽に入れる」 という併用スタイルをとっているMacユーザーも非常に多いです。

まずは慣れ親しんだHomebrewを使いつつ、プロジェクトごとの環境分離に限界を感じたらNix(特に devshelldevenv といった開発環境構築機能)を部分的に導入してみるのがおすすめです。

コメント

タイトルとURLをコピーしました