rcmdnk's blog

Brew

Homebrew 2.7.0がリリースされました。 ちょっと前に2.6.0がリリースされてたんですが、 この2つのリリースで結構気になる大きな変更が入っています。

Homebrewの最近のアップデート

12月1日に[2.6.0](2.6.0 — Homebrewがリリースされ、Big Surへのサポートなどが追加されました。

一方で、caskコマンドがdeprecatedになって brew cask listなどはbrew list --caskを使えとWarningを出すようになりました。 (この時点では一応結果は出してくれる。)

そんな中、割と早いタイミングで12月21日に 2.7.0 がリリース。

これにより1つ大きな変更として、上のbrew cask listは結果を返さずにエラーを返すようになりました。

前の 2.5.0 が9月頃なので割と早い。 (2.3から2.4は10日くらいと瞬足でしたが。)

2.6.0をリリースした際にはそれまで開発されてたものが割と組み込まれないままで リリースされてたので、それらが上手く納まったので早速リリースされたのかな、という感じがします。

2.7.0での違い

で、2.7.0で何が変わったかというと、 ブログ を見るだけだとあまりユーザーが気にすることもないように見えます。

ただ上にも書いたcaskコマンドが完全に使えなくなった、というのは結構大きいところだと思います。

また、ブログにあるところで気にする点としては、

update.sh: refuse to update shallow homebrew-core/cask clones. by MikeMcQuaid · Pull Request #9383 · Homebrew/brew

とかで、Formula/Caskのファイルが入っているhomebrew-core/homebrew-caskのローカルレポジトリが shallow cloneだとbrwe updateで以下みたいなエラーが出るようになります。

$ brew update
Error: homebrew-core is a shallow clone. To `brew update` first run:
  git -C "/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-core" fetch --unshallow
  This restriction has been made on GitHub's request because updating shallow
  clones is an extremely expensive operation due to the tree layout and traffic of
  Homebrew/homebrew-core. We don't do this for you automatically to avoid
  repeatedly performing an expensive unshallow operation in CI systems (which
  should instead be fixed to not use shallow clones). Sorry for the inconvenience!

このエラー自体はGitHubのレポジトリ側の設定なので、Homebrewのバージョンが古くても出ます。 (つまりHomebrew 2.7.0とは直接は関係ない)

出たら指示にある通り

$ git -C "/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-core" fetch --unshallow

とかを実行すれば良いだけなんですが、いきなり出るのでちょっとだるい。

shallow cloneとかしたつもりはないんですが、これが出たのは見て分かる通りLinux環境で、 具体的にはWindowsのWSL2の環境です。

macOSの環境では出ていません。

Linux環境ではインストールスクリプトが違うので、以前のものだと shallow cloneしていたのかもしれません。

今は治ったのか、以前そういうものだったのか、などちゃんとチェックはしてませんが、 特にLinux環境でLinuxbrewの頃からHomebrewを使ってる人はチェックしておいた方が良いかと思います。

その他はBREW_CLEANUP_PERIODIC_FULL_DAYSという環境変数が導入され、 これに対して

export BREW_CLEANUP_PERIODIC_FULL_DAYS=10

とかしておくと10日毎以上経ったあとにbrew install/upgrade/reinstallすると brew cleanupも同時に実行する、というもの。 デフォルトの値は30です。 これまでもこのbleanupを一緒に実行する機能自体はありましたが、 実行までの日数が変更できなかったのが今回から変えられるようになりましたよ、というもの。

この機能自体を無効にする BREW_CLEANUP_PERIODIC_FULL_DAYSという変数は以前からあって、 これに1とか設定しておけば勝手にcleanupすることは無いようになってました。

で、それだけだと思いきや、結構大きな別の変更もあります。

brew list

特にブログで触れられてない部分ですが、 いろいろなdeprecationsがアップデートに含まれています。

More deprecations · Homebrew/brew@74fb058

上にも書いているcaskが完全に使えなくなった、というのも1つ。

この中で、brew listというコマンドを標準出力以外に渡すとエラーを出すようになった変更があります。

brew cask listの代わりにbrew list --caskを強制される様になったわけですが、 Caskもbrew listを使うため、 単にbrew listを使うと何を表示するのか不鮮明な状態になってしまいました。

2.6.0からはbrew listはFormulaとCask両方を表示する様になっていました。 ただし、ファイルへの書き出しなど、標準出力以外へリダイレクションなどを行うと 以前のbrew listの同様にFormulaだけを出力するようになっていました。

書き出し方によらずFormulaだけを出力するにはbrew list --formulaとします。

これが警告機関であったわけですが、cask同様、 2.7.0ではbrew listをオプションなしで使ってファイルへ書き出そうとすると エラーを返す様になりました。

$  brew list > brewlist.txt
Error: Calling `brew list` to only list formulae is disabled! Use `brew list --formula` instead.

これが特に影響すると思うのは、Brewfileなどを使って 独自にパッケージを管理している人。 以前までbrew listを使っていたはずなので、 何らかの変更が必要です。

Homebrew-fileの対応

homebrew-filebrew listを使っていたのでHomebrew 2.7.0でエラーを出すようになっていました。

ので、治しました。

brew-file fails on ‘brew list’ · Issue #103 · rcmdnk/homebrew-file

同じくbrew cask installとかも出来なくなっているので上に加えてv8.3.1で治してあります。

2.6.0がリリースされる前に、こういった変更が開発版には入っていて、今後入ってきそうだ、ということは気づいてたんですが 1、 2.6.0の時点で変更が入らなかったので やはり影響が大きいので入れないのかな、と思ってました。

が、このリリースの感じからすると、 2.6.0でいきなり入れるのは影響大きすぎるからWarning出して周知して、 次のタイミングで完全に外すようにしよう、といった感じだったのかもしれません。

それもあっての早いタイミングでのリリースか、たまたま他の機能がまとまったから リリースなのかはわかりませんが。

ただ、caskはちゃんとWarningしてくれてたけど、 brew listはWarningが入ってなかったので見逃されるのかな、とか思ってたんですが。

標準出力とリダイレクションで結果が違うという状態だったので気持ち悪いな、とは思ってましたが。。。

それ以外にもHomebrew-fileに影響が出てる可能性もあるので GitHubのIssues とかで教えて下さい。

現状でもbrew-wrapを使った場合にbrew install <cask>するとFormulaかCaskかわからずに 一旦Formula(brew)として追加されてしまう、という問題がありますが、 いっそBrewfile内で分けなくても良いかな、とも。 ご意見あればなんでもください。

Sponsored Links
Sponsored Links

« HomebrewでミーティングアプリZoomのCaskがzoomusからzoomにrename Oura Ring(スマートリング、ウェアラブルデバイス)を購入した »

}