もう Brewfile は使わない

  • 72
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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 にこだわることもなくなったのではないでしょうか。