この投稿では、MacのパッケージマネージャーであるHomebrewの使い方や注意点、困ったときにやることをまとめます。
MACでOSがCatalina以降の方を対象としています。WindonsPCの方や、OSのバージョンがMojava以前の方はご注意ください。
Homebrewとは
Homebrewとは、Macのパッケージマネージャーです。
世界中で開発されている便利なライブラリをうまいこと全部使えるようにしてくれる調整役をイメージしていただけると良いかと思います。
身近なゲームの開発で例えてみます。
ゲームソフトの開発者がある追加機能A、追加機能Bを作って世界に公開したとします。
世界中の人は、追加機能をダウンロードして楽しんでいました。
しかし、機能Aがバージョンアップされたので、ダウンロードしたところ、機能Bがうまく動かなくなってしまいました。
このようなアップデートの影響で、正しく機能しなくなる状況を回避してくれるのが、パッケージマネージャーです。
パッケージマネージャーはバージョンの依存関係(お互いに正しく動くか)を考えて、ダウンロードしたほうがいい、しないほうがいいを判断して、うまいことバージョンやライブラリを管理できます。
詳しくは公式ページをご覧ください。
Homebrewのインストール方法、使い方
Homebrew自体のインストール、Homebrewでのフォーミュラ(ライブラリ)のインストールに分けてまとめます。
Homebrewのインストール
以下のコマンド一つでできるので、とってもお手軽です。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
インストール先は、コマンドで変更しない限り「/usr/local/bin」となっているので、
コマンドの実行場所はどこでも大丈夫です。
もし、アンインストールしたくなったら以下の手順でアンインストールできます。
アンインストールはコマンド一つで完了しないので、ご注意ください。
https://weblabo.oscasierra.net/homebrew-uninstall/
Homebrewでのフォーミュラ(ライブラリ)のインストール
こちらもHomebrewのインストール同様、コマンド一つでできるので、お手軽です。
brew install フォーミュラ名
実際にフォーミュラをインストールして環境構築の流れを確認したい場合は、以下記事をご覧ください。
Homebrewの便利コマンド
冒頭でも紹介したように依存関係を考慮してパッケージ管理してくれる反面、依存関係周りでトラブルが起きがちです。
そのため、困ったときに使える便利コマンドを2つ紹介します。
brew doctorコマンド
Homebrewで管理しているライブラリ(フォーミュラ)に何か問題ないかを確認してくれる便利なコマンドです。問題が何もない場合は、以下のように表示されます。
実行コマンド:
brew doctor
実行結果:
Your system is ready to brew.
しかし、ライブラリの依存関係で何かおかしかったりすると、エラーや警告が表示されます。
以下の例は、誤ってruby-buildをアンインストールしてしまった例です。
Warning: Some installed formulae are missing dependencies.
You should `brew install` the missing dependencies:
brew install ruby-build
Run `brew missing` for more details.
今回の場合、警告文ですが、ruby-buildがないとrbenvにrubyをインストールできないので、
警告通りインストールすることで状況を改善できます。
実行コマンド:
①brew install ruby-build
②brew doctor
実行結果:
Your system is ready to brew.
brew deps、brew usesコマンド
ライブラリ(フォーミュラ)の依存する側、依存される側を確認することができるコマンドです。
依存する側、される側の関係性がイメージしにくいと思うので、コマンド結果をもとにお伝えします。
実行コマンド:
brew deps --tree rbenv --installed
実行結果:
rbenv
└── ruby-build
├── autoconf
| └── m4
├── pkg-config
└── readline
上記の例では、rbenvが依存される側、ruby-buildが依存する側です。
ぶら下げて支えているのが依存される側、ぶら下がっているのが依存する側ですね。
rbenvをコマンドに含めたときに依存する側の一覧が表示されていることから分かるように、
「brew deps」は、自分に対して何が依存しているか確認できるコマンドです。
反対に「brew users」コマンドは、自分が依存している先を確認することができるコマンドです。
先の例に基づくと、ruby-buildがrbenvに依存していることを確認できます。
実行コマンド:
brew uses ruby-build --installed
実行結果:
rbenv
使い方は分かったけど、どんなときに使うの?って気になった方に向けて補足です。
brew deps、brew usesコマンド
フォーミュラ(ライブラリ)のアンインストール時に、依存関係を確認するために使います。
実は、Homebrewさん親切で、依存先がいるフォーミュラを削除しようとするとエラーを吐いて、止めてくれるんですね。
rbenvに依存しているruby-buildを削除しようとしたときの実行結果をお見せします。
実行コマンド:
brew uninstall ruby-build
実行結果:
Error: Refusing to uninstall /usr/local/Cellar/ruby-build/20210707
because it is required by rbenv, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies ruby-build
親切に、依存関係を無視して削除する方法(brew uninstall --ignore-dependencies ruby-build)まで教えてくれちゃっています。
しかし、実際に実行してしまうと、冒頭の方でもお伝えした通り、brew doctorで傾向でるわ、rbenvにrubyをインストールできなくなるわになってしまいます。
brew doctorの結果再掲
Warning: Some installed formulae are missing dependencies.
You should `brew install` the missing dependencies:
brew install ruby-build
Run `brew missing` for more details.
なので、brew depsコマンドなどは、どのフォーミュラを消したら、どのフォーミュラが動かなくなりそうかのあたりをつけることに役立ちます。