HomebrewでYarnが怒られた話
はじめに
以前、M1 MacbookにてHomebrewを使い、anyenvとnodenvを使ったNode.jsの開発環境を構築しました。
パッケージマネージャにYarnを使おうとHomebrewからインストールしたのですが、brew doctor
コマンドで見てもらったところ以下のようなWarningがでてきて焦りました。
$ 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: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause formulae that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
yarn
brew doctorコマンドを使用するとこのメッセージが表示されますが、問題なくYarnを使ったパッケージ管理はできます。
種類もWarning :
だったので致命的なエラーではないという判断で長い間放置していましたが、コマンドを実行するたびに表示されるのが少し気になり精神衛生上あまり良くないので解決策を探してみました。
環境・バージョン等
- macOS Big Sur 11.2.1
- HomeBrew 3.0.2
- anyenv 1.1.2
- nodenv 1.4.0+3.631d0b6
- Node.js 14.15.4
- yarn 1.22.10
ここまでやったこと
上記を参考にHomebrewでanyenvをインストールし、anyenv経由でnodenvをインストールしました。
nodenvで導入した環境にYarnをHomebrew経由でインストールしています。
# Homebrew経由でYarnをインストール
$ brew install yarn
# バージョン確認
$ yarn --version
1.22.10
インストールに成功し、Yarnを使ったパッケージの管理はエラーなく行えるが、brew doctor
を実行するたび毎回Warningが表示されるようになりました。
解決策
結論としては、すでにYarnが存在しており、シンボリックリンクが切れていることが原因でした。
エラーを見てみると、一番上にYou have unlinked kegs in your Cellar.
とあり、どうやらリンクが上手くできないために表示されているようです。
Cellarとは英語で「貯蔵庫」を意味し、Homebrewではコマンドの実体である「Keg」を格納するためのディレクトリを指しています。
Celllarディレクトリの場所は以下のコマンドで調べることができます。
$ brew --cellar
/opt/homebrew/Cellar
メッセージにてリンクしろと言われていたためbrew linkコマンドでリンクを試みるも。
$ brew link yarn
Linking /opt/homebrew/Cellar/yarn/1.22.10...
Error: Could not symlink bin/yarn
Target /opt/homebrew/bin/yarn
already exists. You may want to remove it:
rm '/opt/homebrew/bin/yarn'
To force the link and overwrite all conflicting files:
brew link --overwrite yarn
To list all files that would be deleted:
brew link --overwrite --dry-run yarn
どうやらすでにYarnが/opt/homebrew/bin配下に存在しておりシンボリックリンクの作成に失敗しているようです。
$ rm `/opt/homebrew/bin/yarn`
でディレクトリを削除して、競合するファイルを上書きしながらリンクを行いました。
$ brew link --overwrite yarn
Linking /opt/homebrew/Cellar/yarn/1.22.10... 2 symlinks created.
これで上手くシンボリックリンクが作成されたようです。
$ brew doctor
Your system is ready to brew.
Yarnに対するWarningがきれいさっぱりなくなりました。
おわりに
Homebrewを使ってまだ日が浅いため、わからないことが多くありましたが、無事に問題を解決できてよかったです。Homebrewはbrew doctor
で問題をわかりやすく提示してくれるのがいいですね。
結果的に今回のエラーがなぜ起こっていたのかわかりませんでしたが、ずっと放置していた警告メッセージがなくなり今後ぐっすり眠れそうです。
今回の問題はYarn以外でも起こり得るようなので、同じような問題を抱えている方の参考になれば幸いです。
最後まで読んでいただきありがとうございました。
Discussion