Homebrewでformulae require at least a URLエラー

投稿日
Homebrewでformulae require at least a URLエラー

M1 MacでHomebrewを使っていたところ以下のようなエラーが出るようになりました

Error: formulae require at least a URL
/opt/homebrew/Library/Homebrew/formula.rb:253:in `determine_active_spec'
/opt/homebrew/Library/Homebrew/formula.rb:206:in `initialize'
/opt/homebrew/Library/Homebrew/formulary.rb:153:in `new'
/opt/homebrew/Library/Homebrew/formulary.rb:153:in `get_formula'
/opt/homebrew/Library/Homebrew/formulary.rb:305:in `get_formula'
/opt/homebrew/Library/Homebrew/formulary.rb:366:in `factory'
/opt/homebrew/Library/Homebrew/formulary.rb:413:in `from_keg'
/opt/homebrew/Library/Homebrew/formulary.rb:386:in `from_rack'
/opt/homebrew/Library/Homebrew/diagnostic.rb:739:in `block in check_for_unreadable_installed_formula'
/opt/homebrew/Library/Homebrew/diagnostic.rb:738:in `each'
/opt/homebrew/Library/Homebrew/diagnostic.rb:738:in `check_for_unreadable_installed_formula'
/opt/homebrew/Library/Homebrew/cmd/doctor.rb:64:in `block in doctor'
/opt/homebrew/Library/Homebrew/cmd/doctor.rb:57:in `each'
/opt/homebrew/Library/Homebrew/cmd/doctor.rb:57:in `doctor'
/opt/homebrew/Library/Homebrew/brew.rb:122:in `<main>'

起きる条件は brew install xx brew upgradeなどbrewコマンドを使うと必ず最後に表示される、という現象です。


brewコマンドの最後で表示されるだけでinstall等が失敗するわけではないので実害はありません。

とは言っても、毎回出られると困るしな、と思って調べてみました。



結論としては brew untap <リポジトリ名>で解消する事が出来ました!


レアケースな気もしますが、備忘録も兼ねて残しておきます。

検証した環境

1 M1 Mac macOS Big Sur 11.2
2 Homebrew 3.0.5

起きたこと

brewコマンドを使うと必ず最後にエラーが起きるようになりました。

$ brew install vips
==> Downloading https://homebrew.bintray.com/bottles/cfitsio-3.490.arm64_big_sur.bottle.tar.gz
・・・
Removing: /Users/yuu/Library/Caches/Homebrew/gdbm--1.18.1_1.arm64_big_sur.bottle.tar.gz... (208.4KB)
Error: formulae require at least a URL
/opt/homebrew/Library/Homebrew/formula.rb:253:in `determine_active_spec'
・・・


brew doctorを実行してもエラーが起きるので参りましたw

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!
 
Warning: "config" scripts exist outside your system or Homebrew directories.
・・・
Error: formulae require at least a URL
/opt/homebrew/Library/Homebrew/formula.rb:253:in `determine_active_spec'
・・・

Warningが出てるからまずそれ解消しようぜ!ていう話でもあります。笑

やったこと

2013年にOpenしたIssueなので参考にならないんじゃないか?と思ったらまさにこれでした ↓

Most commands fail with “Error: formulae require at least a URL” · Issue #22707 · Homebrew/legacy-homebrew


参考にしたIssue



この画像に書かれているbrew readallを実行します

$ brew readall
Error: Invalid formula: /opt/homebrew/Library/Taps/git-chglog/homebrew-git-chglog/git-chglog.rb
formulae require at least a URL


brew readallが何をしているか分からないのでhelpを見ます

$ brew readall -h
Usage: brew readall [--aliases] [--syntax] [tap ...]
 
Import all items from the specified tap, or from all installed taps if none is
provided. This can be useful for debugging issues across all items when making
significant changes to formula.rb, testing the performance of loading all
items or checking if any current formulae/casks have Ruby issues.

google先生で日本語に翻訳すると、

指定されたタップから、またはインストールされているすべてのタップからすべてのアイテムをインポートします。


これは、作成時にすべてのアイテムの問題をデバッグするのに役立ちます。

というわけでTapしたリポジトリのデバッグが出来るということ、なんですね。




思い返してみると、私git-chglogというCHAGELOGを作成するのを支援してくれるツールを利用してまして、

git-chglog/git-chglog: CHANGELOG generator implemented in Go (Golang).


このコマンドをインストールする時にtapを実行してたんですね。

$ brew tap git-chglog/git-chglog


この時は特段問題が起きていなかったと記憶しているんですが、その後に何かがぶつかってこのようにエラーが出るようになってしまったのかもしれません。

解決する(untapする)

リポジトリの登録を解除するuntapを実行します

$ brew untap git-chglog/git-chglog
Untapping git-chglog/git-chglog...
Untapped 1 formula (40 files, 45.7KB).


これで改めてbrew readallを実行すると

$ brew readall

何も表示されなくなった!



じゃあdoctorは、

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!
・・・

Warningは表示されるけど、エラーメッセージは表示されなくなりました ☺️

プロフィール画像
Yuki Takara
都内でフリーランスのエンジニアをやってます。フロントとアプリ開発メインに幅広くやってます。