数年前にHomebrewが流行りだした頃、僕も一度は試したものの、結局、MacPortsを使い続けてきました。 MacPortsのほうがパッケージ数が圧倒的に多いので、あえて移行する理由を見出せなかったからです。

しかし、半年ほど前に、ふと思いたって全面的にHomebrewへ移行しました。

別にMacPortsがダメだったわけではありません。

今さらなんですが、再びHomebrewに興味が出てきたので、今度はまじめにドキュメントを読んで使ってみたところ、そのシンプルで美しい仕組みに感動してしまったのです。

なんだ、そういうことだったのか。俺が間違っていた。ぜひHomebrewが使いたい。気付けば、Homebrewを使うことが目的になっていました。

というわけで、いまさらながら何に感動してしまったかについて説明させてください。

Homebrewは仕組みだけ

まず、Homebrewはパッケージ管理の仕組みだけを提供している点です。

もちろんHomebrewにも公式リポジトリはあります。でも、それはGitHubの1リポジトリにすぎません。

そのGitリポジトリで、各パッケージの定義ファイルが管理されています。ソースやバイナリーのダウンロード先のURLも書かれていますが、そのURLは、1次配布元やそのミラーサイトだったり、任意のURLだったりします。

バージョン管理はGitに委譲しているし、ソースやバイナリーのファイル管理は1次配布元からアーカイブをダウンロードするだけです。Homebrew自体のサーバーがあるわけじゃない。

要するに、Homebrewの実体は、brewコマンドだけです。

MacPortsが自前のサーバーとコマンドを含めたシステムになっているのとは対照的です。

このことに、いまさらながら気付いて、ちょっと感動してしまったわけです。

パッケージ数を比較することは無意味

また、MacPortsのほうが利用できるパッケージ数は圧倒的に多い点がメリットだと考えていたのですが、それはHomebrewの公式リポジトリと比較した場合の話です。

そもそも、Homebrewのリポジトリは、公式リポジトリ以外にも、ユーザーが自分のGitHubリポジトリをシェアする前提になっています。公式になくても、誰かがパッケージをつくっているかもしれません。

さらに、macOSネイティブなアプリまで管理できるhomebrew-caskなどの拡張機能もあります。商用や再配布できないものまで対象なので、そもそもMacPortsとは管理できる範囲が違います。

Gitコマンドがアクセスできるところなら、どこでもリポジトリになる自由度の高さも魅力です。

こういう柔軟な仕様を考えると、そもそも、MacPortsとパッケージ数を比較することは無意味でした。

パッケージをつくるのが簡単

もうひとつ感動したのは、パッケージを自分で簡単につくれてしまう点です。

リポジトリをシェアする前提だからでしょうか。パッケージの定義ファイルが簡単につくれるようになっています。パッケージが用意されていなくても、自分で定義ファイルを書けばいいやって気にさせてくれます(とはいえ、たいていのパッケージはありますので、そんな状況は少ないのですが)。

例えば、fooというコマンドをインストールしたい、ってとき。

既に公式リポジトリに登録されていれば、installを実行するだけです。

$ brew install foo

残念ながらパッケージがないってとき、homebrewを使わず自力でやるなら、自分でアーカイブをダウンロードして、

$ wget https://example.com/foo/foo-1.0.0.tar.gz

こんな感じの古典的なビルドをするかもしれません。

$ tar xvfz foo-1.0.0.tar.gz
$ cd foo-1.0.0
$ ./configure
$ ./make install

しかし、この方法は避けたいところですね。

そこでHomebrewのパッケージの自作です。

まずはアーカイブのURLを引数にして、brew createを実行します。

$ brew create https://example.com/foo/foo-1.0.0.tar.gz 

アーカイブがダウンロードされて、定義ファイルfoo.rbがテンプレートからつくられます。エディタが開くので、空欄になっているバージョンや説明を記入したり、ビルドのオプションなどを編集します。で、インストールを実行。

$ brew install foo

定義ファイルに問題がなければ、これでインストールが完了です。

実際の手順は、自分専用のリポジトリを指定したり、ビルドが通るようにしたりと、難易度はソース次第ですが、流れはこんな具合に単純です。

だから、公式リポジトリにないとしてもパッケージを自作すればいいと思えた点も、移行した理由です。

まとめ

というわけで、3周まわって、いまさらなが、MacPortsからHomebrewへ移行してしまった話でした。

移行した理由をまとめると、

  • Homebrewの仕組み自体がシンプルで美しかった
  • MacPortsとの、パッケージ数の比較は無意味だとわかった
  • リポジトリやパッケージの管理が簡単だった

そんなわけで、いまでは快適にbrewしてします。