macOS Sierra の package manager に nixpkgs を使ってる話

読了まで:約3分



僕は以前、 [[Homebrew]] が [[Google Analytics]] のトラッキングがどうのと言う問題で揉めてた時に、 [[Homebrew]] を使うのを止め、 [[Homebrew]] から [[ NetBSD]] のパッケージマネージャである、

pkgsrc + pkgin

乗り換えていました。

しかしながらその後、

pkgsrc + pkgin もなにかイケてないなー

いう感が強まったため、今度は、

  • [[Gentoo Prefix]]

乗り換えようと決心、そしてその後、環境構築とかもして、

さあて、使い始めるとするか

ってなった次の日に macOS Sierra がダウンロード可能になってインストールとかしたため、

なんか色々と ( [[Gentoo Prefix]] が) 動かないし、そもそもこれメンテされてるの?

言う、ちょっとしたつらみを感じる状態になっていました。

そして、

今さら [[Homebrew]] 使うのもアレだし、 pkgsrc + pkgin もなんかなーだし、 [[Gentoo Prefix]] も動く気配も無いし、どうしたもんかなー、 macOS でのパッケージマネージャ

思ってた時に、

そう言えば、昔 NixOS っていう変わった Linux とか有ったよな

思い出したりして、

あれ、これ (NixOS のパッケージマネージャ)ってもしかして OSX (macOS) でも使える?

気がつき、かつ実際に使ってみたら、結構使えるモノだったので、今現在、僕は macOS Sierra でのパッケージマネージャとして、

使っています。


それで、この nixpkgsいう パッケージマネージャ色々と独特かつマイナーで、僕が気がついた特長としては、

  1. パッケージの定義に関数型言語な独自 DSL を使っている
  2. パッケージ間依存地獄が _ 基本的に無い_ (ただし競合とかは流石に有る)
  3. _ 不要となったパッケージ郡をコマンド一発で一掃できる_

言う感じのパッケージマネージャです。 それでいてさらにnixpkgs凄い、と個人的に感じるのは、 パッケージマネージャいうレイヤーで、

通常では システムに両立出来ないパッケージ を、 分離しつつ共存させられる

いう点です。

これ、どういう事が出来るかっていうと、すごく雑な説明になるんだけど、

開発環境を docker 化して、パッケージ依存関係をシステムから分離する

言うような事を、 パッケージマネージャレイヤーで出来る、という感じです。

つまり、例えば Java を使ったソフトウェア開発していたとして、 或るプロダクトでは最新の Java のバージョン を、 別のプロダクトでは一つ前のバージョンを それぞれに依存関係として要求される 、という様な状態な時、通常であれば、 VM や Docker でシステム丸ごとコンテナ化して云々かんぬんってするところを、nixpkgs では、環境の定義ファイルを用意して、それをコマンドに読み込ませて使えば、VM とか docker とかを独自に用意せずに、効率よくシステムに併存させることが出来る、というのが nixpkgs出来る事です。

またこういった機能を実現している故か、

  • コマンド一発で、不要になったパッケージを一掃出来る

と、これまた凄く良い機能も実装されているので、その点でも結構便利です。

ただし、このパッケージ一掃コマンド、時と場合によっては、と言うか、システムに、

このパッケージは恒久的に必要です

いうフラグが立ってない場合、

微妙に吹っ飛ばされたくないパッケージを吹っ飛ばされる

いう事も時々有るので、それはそれは要注意だったりしますが。


ちなみに、ここまで書いたこのエントリで、 nixpkgs や、あるいは NixOS (nixpkgs使った Linux Distro) に興味を持たれれば良いな、とは思うのですが、いかんせん nixpkgs NixOS独特に過ぎるので、ぶっちゃけ、 取っ付きにくさは結構あります

また、nixpkgs NixOS日本語情報、ってほぼ無いに等しいので、何か判らない事などが有る場合、基本的には英文の情報に当たらざるを得ません。

さらには、2016 年 11 月中旬現在 、nixpkgs とか NixOS公式ドキュメントの類いは、ただ絶賛整理中で、部分的に Wiki とか 公式ドキュメントとかでバラバラしている状態なので、その点でも情報が探しにくいです。

ただ、そうは言っても、 nixpkgsいう NixOS採用されたパッケージマネージャは強力だし、また、NixOS DevOps とか Infrastructure as Code と言う文脈においても結構、相性が良いので、ま、興味を持たれた方は、

覗いて見ると良いんではないかな、と思います。


言う事で以上。本日の雑文はこれで終わります。


アバターアイコン兼ロゴ

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。うつ病を抱えつつアルバイト中。

今は業務や趣味でプログラミングをして生活しています。