rcmdnk's blog
Last update

20230217_homebrew4_200_200

Homebrewがメジャーアップデートして4.0.0になりました。

これまでのアップデート

Homebrew 3.0.0がリリースされたのは2021年の2月で主な変更はM1 Macへの対応でした。

その後、2~3ヶ月おきにマイナーアップデートして3.6.21までリリースされていました。

4.0.0における主な変更

4.0.0 — Homebrew

API経由のインストールがデフォルトに

最大の変更点は 公式のFormula、Caskのレポジトリである Homebrew/homebrew-coreHomebrew/homebrew-cask に関しては、デフォルトの動作として、brew install時に それらのレポジトリをタップせずに Homebrew Formulae からAPIを通じてJSONファイルをダウンロードしてパッケージの情報を取得してインストールするようになった、という点。

これらのレポジトリは大量のファイルを含んでいますが、 Gitレポジトリとしてローカルで管理しているため アップデートがあった際結構アップデートが大変だしローカルディスクの無駄遣いにもつながってしまうことから APIベースの情報管理への移行が進められていました。

この機能自体は3.3.0のときに導入されていて、これまでは HOMEBREW_INSTALL_FROM_API=1とするとローカルの情報を使わずにインストールするようになっていました。

4.0.0からはこの設定はなくなり、通常はAPIベースの管理になります。

もしローカルレポジトリでFormulaを管理したい場合には HOMEBREW_NO_INSTALL_FROM_API=1を設定しておく必要がありますが、 基本的にはこれは開発者向けで通常はAPIベースが推奨されているようです。

これによって現在タップしてあるhomebrew/corehomebrew/caskは不要になるので、 もしディスクスペースを空けたい場合には

$ brew untap homebrew/core
$ brew untap homebrew/cask

などで削除してしまっても大丈夫です。 手元のmacOSだとcoreが630MBでcaskが382MB程度なので両方消すと1GB程度空けることができるような状態でした。

AUTO UPDATEの間隔の延長

brew installなどのコマンドを打つ際、Homebrewでは定期的に brew updateが自動で実行されるようになっていて これまではデフォルトでは5分以内以前のupdateコマンドが行われてから経った状態だと 再び実行されるようになっていました1

今後はHOMEBREW_INSTALL_FROM_API=1の設定がされていなければ 24時間経つまで実行されないようになりました。

これに関しては HOMEBREW_NO_AUTO_UPDATE=1を設定しておくと アップデートしないようになります。

また、HOMEBREW_AUTO_UPDATE_SECSという値(デフォルト86400)ですきな時間間隔に設定することもできます。

現在もこれらの値は有効ですが、core/Caskのレポジトリのアップデートを含まない場合はそれほど負荷が大きくないのと 24時間間隔がデフォルトになったのでこのあたりは有効にしておいても苦になることはほとんどないようになったようです。

core/caskのFormula/Caskのアップデートに確認は別途行われるようで こちらの間隔は7.5分になっています。

この間隔はHOMEBREW_API_AUTO_UPDATE_SECSの値(デフォルト450)で変更できます。

Analyticsの移行

HomebrewではGoogle Analyticsを使って どのパッケージがどれだけダウンロードされたか、などの情報を集めています。

特にコマーシャル的に使うとかいうことはこれまでもなかったかと思いますが、 導入された当初は結構いろいろな反応もありました。

これはHOMEBREW_NO_ANALYTICS=1を設定しておけばオプトアウトできるようにはなっていました。

4.0.0からはセルフホストなヨーロッパにおかれたサーバーにも情報を取得するようになりました。 しばらくはGoogle Analyticsも並行して使いますが、数ヶ月以内に完全に移行するとのことです。

HOMEBREW_NO_ANALYTICS=1を設定すると両方とも無効にしますが、 HOMEBREW_NO_GOOGLE_ANALYTICS=1とすればGoogle Analyticsだけを無効にできます。

Google Analyticsだとアメリカにデータを送ることになるのでそれを避けたいというだけならGoogle Analyticsだけを無効にしてくれ、と。

この辺は色々と法律も出来たり難しい状態になっていますが、 Homebrew的には余計な情報を取るのはリスクにしかならないのでよりミニマムな情報だけを 取得するように、かつサーバーもセルフホストで管理できるように、という方向に向かったようです。

Homebrew 4.0.0 Hacker News

その他の気になる変更

  • brew install --dry-runでドライランができるようになった
  • brew docsHomebrew Documentationが開かれるようになった
  • brew doctor --quietで何も問題がない場合には何も表示しないようになった
  • WindowsのWSL1のサポート終了

他にも気になることがあれば以下から。

4.0.0 — Homebrew

Homebrew-fileの対応

Homebrew-fileはHomebrewのパッケージをBrewfileで管理し、それをGitHubなどでバージョン管理も行うためのツール。

このなかで、各パッケージのFormulaがどのTapに属しているか、をローカルにあるファイルを用いて確認したりしています。 なのでそれらのTapがなくなると確認が出来ずに無所属のTapになってしまいます。

今後もcore/cask以外の非公式Tapはローカルにcloneされるので、 それらの中に見つからなかったらcore/caskのもの、としてしまってもとりあえずは大きな問題はないかとは思ってます。

一方で、brew file casklistというコマンドでCaskに関するリストを作れるようになってるんですが、 この中で、Homebrew以外でインストールされたけどHomebrewにCaskがあるもの、を見つけられるようになっています。 ただこれもローカルファイル依存があるのでTapがない状態だとちゃんと見つけられません。

この辺、HOMEBREW_API_AUTO_UPDATE_SECSとかの設定がある以上、なんらかの情報はローカルにもあるはずでその辺使うか、もしくはAPI経由でリスト取得とか情報取得とかできればそっちに切り替えれば良いんですが、まだその辺ちゃんと見れてないので対応できてない状態です。

追記: 2023/02/18

$(brew --cache)/apiにあたるディレクトリにformula.jsoncask.jsonというファイルがダウンロードされるようになっています (macOSだと**/Users/Library/Caches/Homebrew/api/**)。 この中にFormula/Cask一覧があるのでそこから取得できます。

また、brewにはformulaecasksというコマンドが(結構前から)追加されていて、これで現在使えるFormula/Caskのリストを取得できますが、 これらはTapのディレクトリを見に行って、もしAPIが有効な場合は上記のjsonファイルも確認するような仕組みになっています。

brew/formulae.sh at master · Homebrew/brew

追記ここまで

今のままでもすぐに大きな問題なく使い続けられると思ってますが、 もし何か問題があったらGitHubのIssueでもTwitterでもこのコメント欄でもいいので教えていただければ、と。

Homebrew-fileの方はちょっとした改変を行ってる途中でその辺一段落したらこのあたりもちゃんと対処していくつもりです。

Sponsored Links
  1. その昔は1分おきでほぼ毎回行うような状態でした。

    これが導入された当初は無効化していた人も多かったのではないかと。

Sponsored Links

« ダイソーの低反発リストレストがHHKBにピッタリ エルゴヒューマンの肘掛けにクッションを付ける »

}