Edited at

もう Brewfile は使わない

More than 3 years have passed since last update.


Brewfile はオワコンなの?

Brewfile: a Gemfile, but for Homebrew

かつては Brewfile と呼ばれる Homebrew 用の Gemfile で、Formula(パッケージのこと)を管理するスタイルが主流でした。


Brefile

# Brewfile

brew "openssl"
# a comment
tap "homebrew/dupes"

シェルスクリプトライクな記述をしたファイルを用意して、

$ brew bundle Brewfile

とするだけで環境構築が出来るという便利なサブコマンドでした。

しかし、ある日、

$ brew bundle


Warning: brew bundle is unsupported and will be replaced with another,

incompatible version at some point.

Please feel free volunteer to support it in a tap.


という警告が出て、正式には issues にも


What? "Warning: brew bundle is unsupported ..." #30815


となり Brewfile はオワコン化しました。

代替手段を模索し始めた Homebrew ユーザは、Brewfile をシェルスクリプト化して使ったり、他のツール、例えば Ansible を使ったりして、この Brewfile オワコン化問題をしのいでいました。

しばらくして、bundle サブコマンドは復活しましたが、以前のようなデフォルトコマンドではなく、タップして有効にする必要が出ただけで、また使えるようになりました。

Brewfile はオワコンではなくなりました。


オワコンかどうかが問題ではない

オワコンではなくなったのです。しかし、本体から外された bundle に必要性を感じるか。という考えが出始めました。Brewfile オワコン問題が浮上したときに、一斉に代替手段も求め、様々な方法や知見が確立、いや乱立し、ひとそれぞれ使いたいように、やりたいような手法を打ち出した(ように感じます)。

実際に私もシェルスクリプト化して使用していました。

一旦、Brewfile を離れてみて、「別に拘っていた必要もないのでは?」という思いも出てきました。極端な話、インストールしたい formula を羅列したようなテキストファイルを用意して cat で回して brew install したっていいくらいです。

私の場合、そんなような、簡単なインストールだけをしてくれるツールが欲しかったからです。それくらいなら作れるな、ということで今流行の Go 言語で作ってみました。その名も Brionacです。

どうやら、ケルト神話の武器かなんかのようです。


ブリューナク (Brionac) は、ケルト神話に登場する武器だと言われているが、日本人が1990年ごろに創作した武器だという説もある

- ブリューナク - Wikipedia


発音が Brew(ブリュー)と似ていたからというだけで命名したというのは秘密です。


Brionac

これまた、その名も brionac attack です。武器らしいサブコマンドです。Gem っぽく brionac a でもいいです。GIF では、brew install 時の標準出力を見せずにプログレスバーと簡易的な結果の出力で隠していますが、これは formula の数が多くなると必然的に画面が埋まり、最初の方にインストールした formula の結果が見えなくなることを防ぐためです。brionac a -v とすることで verbose にすべてを表示することも出来ます。

また、Brionacformula.yaml に基づいてインストールします。今らしい、YAML を採用しています。人間が記述しやすいデータ形式です。


formula.yaml

---

tap:
- b4b4r07/brionac
- b4b4r07/gomi

brew:
install:
- { name: git }
- { name: gomi }
- { name: brionac }
- { name: reattach-to-user-namespace }
- { name: the_silver_searcher }
- { name: tig }
- { name: tmux }
- { name: vim, args: --with-lua }
- { name: zsh, args: --disable-etcdir }
- { name: peco }


Brionac は、基本的に formula.yaml と同期する形式を採っています。ここに記述されていて未インストールのものはインストールされ、記述されていなくてインストール済みのものはアンインストールされます。

また、Brionac を始めやすいように、brionac gen することで、現時点でインストールされている formula を YAML にして書き出してくれます。

これは TODO: ではありますが、brionac attack のときに gen も含めて統合しようかと考えています。


インストール

もう、この記事をここまで読んでいる時点で Homebrew ユーザであるに違いありません。

$ brew tap b4b4r07/brionac

$ brew install brionac

Brew でインストールしましょう。バイナリも用意しているので、そのほうが良い場合は GitHub Releases を見てください。

このツールに人気が出たり、今よりも使いやすくなったりしたら tap なしのインストールも考えようかなと思っています。


最後に

Brewfile はオワコンではないので、

$ brew tap Homebrew/bundle

$ touch Brewfile

タップして、Brewfile を作って

$ cat Brewfile

tap 'caskroom/cask'
brew 'emacs', args: ['cocoa', 'srgb', 'with-gnutls']
brew 'redis'
brew 'mongodb'
brew 'sphinx'
brew 'imagemagick'
brew 'mysql'
cask 'google-chrome'

$ brew bundle

bundle すればいいだけです。他の手段もたくさんあります。シェルスクリプト化したり、Ansible や有志が作った Brewfile ライクツールです。Brionac はその中でも、簡単シンプルが売りです。現時点では貧弱と言ってもいいかもしれません。

こういう問題があったおかげで、様々なアプローチが見えてきました。

bundle が本体から外された今、かつてにように Brewfile にこだわることもなくなったのではないでしょうか。