読者です 読者をやめる 読者になる 読者になる

カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

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

僕は以前、 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) に興味を持たれれば良いな、 とは思うのですが、いかんせん nixpkgsNixOS は独特に過ぎるので、ぶっちゃけ、 取っ付きにくさは結構あります

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

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

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

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


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