pyてよn日記

一寸先は闇が人生

Homebrew チートシート

 macOS 用パッケージ管理マネージャ Homebrew の使い方(コマンド)をネットでかき集めてまとめ,よく使うコマンドのチートシートを書いてみた.「このコマンドは追加した方が良い」や間違い等あれば気軽にご指摘を.

 とりあえず Homebrew のパッケージ群をアップデートしたい方はこちらへ.Homebrew の仕組みについて興味のある方はこちらへ(ほんの少しだけだけど...).

※ 筆者の開発環境

  • macOS Mojave 10.14.4
  • Homebrew 2.1.3

公式ドキュメント

Homebrew 公式ドキュメント

docs.brew.sh

アップデートしたいときにこれだけやれば良いコマンド

  • Homebrew 自身
  • Homebrew でインストールしたパッケージ全部

を一遍にアップデートしたいときは以下のコマンドをターミナルで実行すれば良い.

brew upgrade
brew cleanup

brew cleanup が自動で一定期間ごとに実行されるという記述を見たのだけどどうなんだろう.とりあえずその都度 brew cleanup を実行しておけば間違いない?

 


 

brew コマンド

formula は,ここではパッケージ名だと考えれば良い.formula の意味については補足で解説している.

パッケージのインストール関連

パッケージのインストール

brew install [formula]

パッケージの検索

/ で囲むと正規表現でパッケージ名を検索できる.

brew search [formula]  # brew -S [search-word] と同じ
brew search /[formula]/

インストールしたパッケージの管理

インストールしたパッケージ一覧を表示

--versions オプションを付けるとパッケージのバージョンも出力される

brew list
brew list --versions

パッケージのアンインストール

brew uninstall [formula]

更新のあるパッケージを見る

brew outdated

古いバージョン(outdated)のパッケージを消去

--dry-run or -n オプションをつけると brew cleanup のリハーサルのようなことができる(何が消えるかを明示してくれる).

brew cleanup
brew cleanup -n  # 何が消されるのか一覧を表示.--dry-run オプションでも同じ.

Homebrew では,古いバージョンのパッケージは明示的に削除しない限り残り続けることに注意(もしかしたら昔の話かもしれない).

パッケージの情報を表示

brew info [formula]

パッケージの依存関係を表示

brew deps --tree [formula] でパッケージの依存関係をツリー表示できる.

brew deps [formula]
brew deps --tree [formula]

ツリー表示のコマンドは,以前は brew depstree [formula] だったので注意(depstree コマンドは無くなった).

アップデート関連

アップデート関連では,

  • brew update
  • brew upgrade

の 2 つがあることに注意.

パッケージのバージョンによる依存関係とか気にしなければいけない場合を除いて brew upgrade 使っとけば OK な気はする.

Homebrew 自身のアップデート:brew update

brew update

Homebrew の自身のアップデート + Homebrew でインストールしたパッケージをアップデート:brew upgrade

  • brew upgrade:全てのパッケージをアップデート
  • brew upgrade [formula]:指定したパッケージのアップデート
brew upgrade
brew upgrade [formula]

brew upgrade に関して,公式ドキュメントには下記のような記述があった(2019/5 現在).

If formula are given, upgrade only the specified brews (unless they are pinned; see pin, unpin).

Unless HOMEBREW_NO_INSTALL_CLEANUP is set, brew cleanup will be run for the upgraded formulae or, every 30 days, for all formulae.

環境変数 HOMEBREW_NO_INSTALL_CLEANUP を設定していない場合,brew cleanup が 30 日ごとに実行される」で合ってる?もし解釈が合ってれば自動で brew cleanup を実行されて古いパッケージは消去されることになってるということでいいのだろうか(ユーザが定期的に実行しなくても良くて,パッケージ管理は brew upgrade だけで十分になる?).

Homebrew の情報を表示するコマンド

Homebrew のバージョン

brew --version

Homebrew 本体の詳細情報

brew --config

出力例

HOMEBREW_VERSION: 2.1.3
ORIGIN: https://github.com/Homebrew/brew
HEAD: 099b047349d4ec67519206f15401d0e1cf90e953
Last commit: 18 hours ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 86b551915fb928f689813278cf670c181c7442df
Core tap last commit: 3 hours ago
HOMEBREW_PREFIX: /usr/local
CPU: quad-core 64-bit broadwell
Homebrew Ruby: 2.3.7 => /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby
Clang: 10.0 build 1001
Git: 2.20.1 => /Library/Developer/CommandLineTools/usr/bin/git
Curl: 7.54.0 => /usr/bin/curl
macOS: 10.14.4-x86_64
CLT: 10.2.1.0.1.1554506761
Xcode: N/A
CLT headers: 10.2.1.0.1.1554506761
XQuartz: 2.7.11 => /opt/X11

Homebrew の環境情報

ビルドに使われるコンパイラなどの情報が出力される.

brew --env

出力例

HOMEBREW_CC: clang
HOMEBREW_CXX: clang++
MAKEFLAGS: -j4
CMAKE_PREFIX_PATH: /usr/local
CMAKE_INCLUDE_PATH: /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/libxml2:/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/OpenGL.framework/Versions/Current/Headers
CMAKE_LIBRARY_PATH: /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/OpenGL.framework/Versions/Current/Libraries
PKG_CONFIG_LIBDIR: /usr/lib/pkgconfig:/usr/local/Homebrew/Library/Homebrew/os/mac/pkgconfig/10.14
HOMEBREW_GIT: git
HOMEBREW_SDKROOT: /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk
ACLOCAL_PATH: /usr/local/share/aclocal
PATH: /usr/local/Homebrew/Library/Homebrew/shims/mac/super:/usr/bin:/bin:/usr/sbin:/sbin

Homebrew の環境診断

brew doctor
# Your system is ready to brew.

その他(使用頻度低め)

リポジトリのタップ,アンタップ

qiita.com

brew tapとは公式以外のリポジトリをフォーミュラとしてHomebrewに追加するもので、brewのもとでinstall,uninstall,updateなどが行えます。もちろん自分が公開しているものも簡単に追加できます。

Homebrew 上で使えるようになっていないパッケージをレポジトリから直接インストールして brew で管理できるようにするためのコマンド.

brew tap user/repository
brew untap user/repository

シンボリックリンクの作成と消去

パッケージがインストールされたときにシンボリックリンクが作成されないものもある.その対処法としてbrew link がある.--force オプションを付けて実行すると,シンボリックリンクを上書きすることができる.

brew link [formula]
brew unlink [formula]

www.task-notes.com

補足1:Homebrew の仕組み,Homebrew で使われる用語

 Homebrew の仕組み,公式ドキュメントで使われる用語に関して少しだけまとめた.

 「Homebrew」という語は「ビールを自家醸造して保存,飲む」を意味し,「ユーザが自らパッケージをビルドして使用する」のメタファーとなっている.

  • Fomula
    パッケージの定義(ビルド方法,手順が書かれた Ruby スクリプト)のこと.パッケージは Formula に従ってインストールされる(Formula は /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula に置かれる).拡張子 .rb を除いた部分がパッケージ名として利用される
    ex) /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/foo.rb (パッケージ名は foo となる)

  • Keg
    Formula によってインストールされるさまざまなファイル(パッケージのバイナリファイル,ライセンスファイル,README など)の保存先を示すパス.Cellar 以下は /formula名/version という構成になっている.
    ex) /usr/local/Cellar/foo/0.1

  • Cellar
    Keg がインストールされるパス名,つまり,インストールしたパッケージが /usr/local/Cellar/ に入れられる.インストールと同時に /usr/local/bin//usr/local/lib/シンボリックリンクが作られ,ターミナルからそれぞれのパッケージのコマンドが実行できるようになるワインセラーとかの「セラー cellar」が由来.

 その他の用語を知りたい方は公式ドキュメントへ.

docs.brew.sh

 Homebrew の仕組みに関しては以下の記事が参考になった.

qiita.com

tweeeety.hateblo.jp

補足2:Homebrew をインストール後にパスを通す

  • Homebrew でインストールしたパッケージ
  • Mac に最初から入っていたパッケージ

の二つのパッケージが存在する場合,Homebrew でインストールした方を使うようにするために ~/.bash_profile に以下を追記する必要がある.ここでは,コマンド検索パスの優先順位を,Homebrew によって作られたシンボリックリンク(コマンド)を優先するように設定している.ここらへんいつかちゃんと勉強したい...

export PATH="/usr/local/bin":$PATH

qiita.com

参考

更新情報

  • 2019/05/23 記事投稿