rcmdnk's blog

Leaves

MacのHomebrewのパッケージ管理ソフトの Brew-fileに Issueにリクエストが来てたこともあって 他のパッケージから依存によってインストールされたものでない 一番上のパッケージのみを残す様なオプションを加えてみました。

Sponsored Links

HOMEBREW_BREWFILE_LEAVES, –leaves,

今回加えたオプションは、brew file initなどした時に、 他のパッケージの依存関係によってインストールされたものはリストに載せない、 というものです。

現在通常のbrew file initで作ったBrewfileには 自分でインストールした覚えの無いものも結構あるかと思いますが、 それらは大概他のパッケージが必要としてHomebrewが自動でインストールしたものです。

これらを除くことでBrewfileがすっきりし、 また、必要の無くなった依存パッケージを消せるようにしたい、というのが今回の目的。

オプションは環境変数で

export HOMEBREW_BREWFILE_LEAVES=1

.bashrcなどで環境変数を設定しておくか、

$ brew file --leaves <cmd>

コマンドに--leavesというオプションを与えることで有効になります。

最新版に入ってるのでbrew update && brew upgradeして入る brew-fileなら使えます。

試しに比べてみると良いと思いますが、試すには適当なディレクトリで、

$ brew file init -f ./all.txt
$ brew file --leaves init -f ./leaves.txt

の2つのコマンドでファイルを作って比べてみてください。 (レポジトリをセットするかどうか聞かれますがその場にテストファイルを作りたいだけなのでnで。)

まあ、やってることはbrew listbrwe leavesなんでその出力を直接比べてもいいんですが。 (ただし、brew leavesの方はtapしたレポジトリのものだとtapの部分も含めて表示されます。)

自分でやってみると、通常brew listで200個位パッケージが出てきますが、 オプションを入れると半分位に減りました。

実際に見ているもの

元々Brewfileに書き出していたのはbrew listで出てくる全パッケージでした。

leavesオプションをつけると、これに変わって brew leavesで出てくるパッケージを見ます。

brew leavesは他のパッケージが何も依存してない様なパッケージです。

例えば、bashreadlineを必要としますが、 この場合、readlineleavesには載りません。

ちょっとした問題点

主にライブラリ的なものが落とされるわけですが、 これちょっと思い通りにならない所もあって、 例えばgoなんかはまず単体で入れる人も多いと思いますが、 色々使おうとして入れるパッケージがgoに依存してることがあります。 その場合、後から入れたものによってgoleavesに載らなくなります。

これだとちょっとBrewfileとしても見た目が良くありません。

そのファイルを使ってインストールすること自体には問題ありません。 goは依存されてるので自動でインストールされるので。

ただ、後からインストールしたパッケージを削除した時に問題が起こります。

leavesを入れるにあたり、cleanの際、 リストにあるパッケージが依存しているパッケージも 残す様にはしています。

ただ、goに依存したパッケージを削除してしまうと Brewfileからその項目が消え、 そのままcleanしてしまうとgoが消えてしまいます。

cleanする前にinitすれば今度はgoが誰にも依存されてないので Brewfileに載ることになりますが、 それだとそもそもcleanで何も消えない状態なので。

また、そのBrewfileを他に持って行ってもgoがインストールされません。

この辺、一応解決策として、絶対に残したいパッケージがある場合、

export HOMEBREW_BREWFILE_TOP_PACKAGES=go,coreutils

HOMEBREW_BREWFILE_TOP_PACKAGESという値に,区切りでパッケージを書いておくと そのパッケージはleavesオプションの時でも 他のパッケージから依存されてても必ずBrewfileに書き出すようにします。

ただ、こういうパッケージを直接自分で書くようなことをしたくない、というのが そもそものコンセプトだったので余り自分的にはどうかと思う感じですが、 一応出来るようにしておいた、ということで。

まとめ

以前から、依存関係によってインストールされるパッケージによって Brewfileが膨れ上げるし、自分で何を管理しているのかわからなくなるので、 パッケージの依存関係はなんとか上手く管理できたりしないかな、と思って tree上に表示させてみようかとか色々考えてましたが、 逆にそれらをとっぱらってトップのパッケージだけを表示、と言うのが 簡単に出来るし良いかな、と思って入れてみました。

見た目的にスリムにもなるし意味のあるBrewfileになる感じはあります。

ただ、上に書いたような意図せず必要なものも削除してしまったり Brewfileに上手くパッケージが載らない場合もあります。

取り敢えずテストも兼ねて自分の環境ではしばらく

export HOMEBREW_BREWFILE_LEAVES=1

な状態でやっていこうとは思ってます。

Sponsored Links
Sponsored Links