Homebrew総集編

# Homebrew

* [macOS用パッケージマネージャー](https://brew.sh/index_ja)

## インストール

```sh:Terminal
webmaster-patche-no-MacBook-Pro:~ webmaster-patche$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew

Press RETURN to continue or any other key to abort
==> Downloading and installing Homebrew...
remote: Enumerating objects: 181, done.
remote: Counting objects: 100% (181/181), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 282 (delta 178), reused 179 (delta 178), pack-reused 101
Receiving objects: 100% (282/282), 77.69 KiB | 137.00 KiB/s, done.
Resolving deltas: 100% (202/202), completed with 55 local objects.
From https://github.com/Homebrew/brew
   c0b916764..8398d0b2d  master     -> origin/master
HEAD is now at 8398d0b2d Merge pull request #6937 from MikeMcQuaid/bottle_sudo_non_interactive
Updated 1 tap (homebrew/core).
==> New Formulae
ansible@2.8       bandwhich         cobalt            findomain         glow              libb64            poetry
awscurl           cgns              dsvpn             git-filter-repo   komposition       nauty             yaegi
==> Updated Formulae
abcmidi                         fonttools                       mailutils                       prometheus
ack                             fpp                             makedepend                      proteinortho
acpica                          freetds                         man-db                          pstoedit
algernon                        frpc                            mariadb                         puzzles
aliyun-cli                      frps                            mariadb@10.2                    pwntools
alpine                          fselect                         mariadb@10.3                    pyenv
ammonite-repl                   fuse-zip                        mat2                            pyinstaller
angular-cli                     fx                              mawk                            pypy
ansible                         gatsby-cli                      maxwell                         pypy3
ansible-lint                    gcsfuse                         mbedtls                         python-yq
apache-opennlp                  gdb                             mda-lv2                         quickjs
apachetop                       ghq                             mdcat                           ranger
appium                          gimme-aws-creds                 mdds                            rav1e
aptly                           git                             mercurial                       rawtoaces
arangodb                        git-lfs                         mesa                            remind
arduino-cli                     git-plus                        meson                           rex
artifactory                     git-quick-stats                 metaproxy                       rhino
asciinema                       git-remote-hg                   mg                              rocksdb
ask-cli                         git-review                      micropython                     roswell
assimp                          gitbucket                       midnight-commander              rsyslog
astrometry-net                  gitleaks                        mill                            rtv
atdtool                         gitmoji                         miller                          run
atlassian-cli                   gjs                             minio                           rustup-init
aws-cdk                         glassfish                       minio-mc                        s3cmd
aws-elasticbeanstalk            glib-networking                 mitmproxy                       saxon
aws-shell                       global                          mk-configure                    scipy
awscli                          glslang                         mkl-dnn                         serverless
azure-cli                       gmsh                            mmark                           sflowtool
babel                           gnunet                          mpc                             shadowsocks-libev
balena-cli                      gnuradio                        mpd                             shfmt
basex                           go                              mpop                            signal-cli
bcftools                        go@1.12                         mrboom                          silk
bindfs                          godep                           mruby                           singular
bit                             golang-migrate                  multimarkdown                   siril
bitrise                         goreleaser                      multitail                       snapcraft
blast                           gr-osmosdr                      mupdf                           socat
botan                           grep                            mupdf-tools                     sonobuoy
broot                           grin                            mutt                            sourcekitten
caffe                           grin-wallet                     mycli                           sphinx-doc
cake                            groonga                         mydumper                        spin
ccache                          handbrake                       mypy                            starship
cdk                             helmfile                        mysql                           statik
cereal                          helmsman                        mysql@5.6                       stormssh
certbot                         help2man                        mysql@5.7                       streamlink
certigo                         hlint                           nano                            stress-ng
cfn-lint                        homebank                        neo4j                           subversion
chakra                          howdoi                          nethack                         svtplay-dl
choose                          htslib                          netlify-cli                     swagger-codegen
chronograf                      http-server                     nift                            swagger-codegen@2
codemod                         httpie                          node                            swiftformat
cointop                         hugo                            node-build                      swiftlint
collectd                        icecast                         node@10                         syncthing
conan                           ilmbase                         node@12                         synfig
conjure-up                      imagemagick                     nodeenv                         talloc
consul-template                 imagemagick@6                   now-cli                         tarantool
contentful-cli                  imgproxy                        nss                             taskell
convox                          interactive-rebase-tool         ntl                             telegraf
cpl                             internetarchive                 nuget                           teleport
cppad                           istioctl                        numpy                           terraform
cromwell                        jdupes                          nushell                         terragrunt
csvq                            jenkins                         ocrmypdf                        terrahub
ctl                             jfrog-cli-go                    offlineimap                     texmath
ctop                            juju-wait                       okteto                          tintin
curl                            k3d                             onefetch                        tmuxinator
curl-openssl                    kcov                            opa                             tmuxinator-completion
deno                            kepubify                        opencv                          tomee-jax-rs
devspace                        kind                            opencv@2                        tomee-plume
dfmt                            kubeprod                        opencv@3                        topgrade
dhall                           kustomize                       openexr                         tox
dhall-json                      kyma-cli                        openimageio                     trader
distcc                          languagetool                    opensc                          traefik
dmd                             lazygit                         openvdb                         tunnel
docfx                           ldc                             operator-sdk                    twoping
docker-compose                  lego                            osc                             twtxt
docker-credential-helper-ecr    leptonica                       pagmo                           txr
docker-squash                   lerna                           paket                           uhd
doctl                           lftp                            pandoc                          ultralist
dovecot                         libarchive                      pcb                             urh
dub                             libedit                         pcsc-lite                       verilator
duck                            libetonyek                      pdsh                            vim
dune                            libfabric                       peco                            vips
duplicity                       libimagequant                   percol                          visp
easyengine                      liblouis                        perl                            wal2json
ejdb                            libmpdclient                    perltidy                        watch
embree                          libofx                          pgcli                           wcslib
entr                            libopenmpt                      pgweb                           webp
envconsul                       librealsense                    phpmd                           weechat
erlang                          libsixel                        phpmyadmin                      whois
exploitdb                       libtensorflow                   phpstan                         wiggle
fades                           libtorrent-rasterbar            phpunit                         wireguard-tools
fail2ban                        libuv                           picard-tools                    wla-dx
fastlane                        libvirt                         picat                           wtf
faudio                          libvirt-glib                    pipenv                          wxmaxima
fdroidserver                    libvoikko                       pipx                            xdotool
feedgnuplot                     libvterm                        plank                           xmrig
ffsend                          libwebsockets                   pnpm                            xsimd
field3d                         libxkbcommon                    pony-stable                     xtensor
firebase-cli                    libxlsxwriter                   pre-commit                      yamllint
flow                            liquibase                       prestodb                        ykman
fluent-bit                      log4cplus                       primesieve                      yle-dl
fluxctl                         logtalk                         procs                           you-get
fn                              mafft                           proguard                        zsh-autosuggestions
folly                           magic-wormhole                  proj
==> Deleted Formulae
apel              diffuse           leafnode          np2               pygtksourceview   terminator        zim
auto-scaling      globus-toolkit    libagar           pygobject         qriollo           trr
aws-elasticache   hg-flow           mysql-utilities   pygtk             redo              uberftp
aws-sns-cli       ipython@5         node@8            pygtkglext        srclib            vte
==> Installation successful!

==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics

==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
  https://github.com/Homebrew/brew#donations
==> Next steps:
- Run `brew help` to get started
- Further documentation: 
    https://docs.brew.sh
```


## バージョンの確認

```sh:Terminal
webmaster-patche-no-MacBook-Pro:~ webmaster-patche$ brew -v
Homebrew 2.2.2
Homebrew/homebrew-core (git revision f246; last commit 2020-01-14)
```



## 使い方

### brew [--version | -v]

```sh:Terminal
$ brew -v
Homebrew 2.2.2
Homebrew/homebrew-core (git revision f246; last commit 2020-01-14)
Homebrew/homebrew-cask (git revision 7585; last commit 2020-01-15)

$ brew --version
Homebrew 2.2.2
Homebrew/homebrew-core (git revision f246; last commit 2020-01-14)
Homebrew/homebrew-cask (git revision 7585; last commit 2020-01-15)
```


### brew command [--verbose | -v] [options] [formula]…

#### command

- install / uninstall / list / search コマンドは必須コマンドとして他のコマンドとは異なる

##### install formula
- フォーミュラ（パッケージ名）をインストールします
- --verbose / --debug：デバッグ情報を出力

```sh:Terminal
brew install %formula%
```

##### uninstall formula
- フォーミュラ（パッケージ名）をアンインストールします

```sh:Terminal
brew uninstall %formula%
```

##### list
- インストール済みのフォーミュラ（パッケージ名）をリスト出力します

```sh:Terminal
$ brew list
```

##### search (text|/text/)
- テキストを使用してフォーミュラ（パッケージ名）を部分検索します
- スラッシュで挟まれている場合は正規表現として解釈する
- 検索する文字列はオンライン上でhomebrew / coreとhomebrew / caskによって行われる

* 参考になった技術まとめ
  * [Homebrew Servicesを使ってサービスを管理する](https://rcmdnk.com/blog/2016/04/25/computer-mac-homebrew/)


##### analytics [subcommand]

- 用途調査中
  - on / off：Homebrewの分析をオンオフにする

  - state：現在の匿名ユーザーの行動分析状態を表示、[Analytics](https://docs.brew.sh/Analytics)参照

  - regenerate-uuid：Homebrewの分析で使用されるUUIDを再生成


##### cat formula

- フォーミュラ（パッケージ名）のソースを表示


##### cleanup [options] [formula|cask]

- すべてのフォーミュラ（パッケージ名）とcaskの、古いロックファイルと古いダウンロードを削除し、インストールされたフォーミュラ（パッケージ名）の古いバージョンを削除

  - --prune：指定された日より古いすべてのキャッシュファイルを削除する。

  - -n / --dry-run：削除されるものを表示するだけで、実処理は行わない。(デバッグ実行)

  - -s：最新バージョンのダウンロードも含め、キャッシュをスクラブする。インストールのためにダウンロードされたフォーミュラ（パッケージ名）や caskは削除されない。削除したい場合： `rm -rf "$（brew --cache）"` を行う

  - --prune-prefix：プレフィックスからシンボリックリンクとディレクトリのみを削除し、他のファイルを削除しません。

  - command | cmd：brew cmdを呼び出すときに使用されているファイルへのパスを表示します。

```sh:Terminal
$ brew cleanup --dry-run
$
```


##### commands [options]

- 組み込みコマンドと外部コマンド（ `command項目を参照` ）の一覧を表示する
  - -q、-quiet：カテゴリヘッダーのない（組み込みコマンド、外部コマンドなど）コマンドの名前のみを一覧表示
  - --include-aliases：内部コマンドのエイリアスを含める（-qオプションなしでは指定不可）

```sh:Terminal
$ brew commands
==> Built-in commands
--cache          cask             desc             info             missing          search           tap-pin          update
--cellar         cat              diy              install          options          sh               tap-unpin        update-report
--env            cleanup          doctor           leaves           outdated         shellenv         uninstall        update-reset
--prefix         command          fetch            link             pin              style            unlink           upgrade
--repository     commands         gist-logs        list             postinstall      switch           unpack           uses
--version        config           help             log              readall          tap              unpin            vendor-install
analytics        deps             home             migrate          reinstall        tap-info         untap

==> Built-in developer commands
audit                  create                 install-bundler-gems   mirror                 ruby                   update-test
bottle                 edit                   irb                    prof                   tap-new                vendor-gems
bump-formula-pr        extract                linkage                pull                   test
bump-revision          formula                man                    release-notes          tests

==> External commands
aspell-dictionaries                           postgresql-upgrade-database                   services

$ brew commands --include-aliases
Error: `include_aliases` cannot be passed without `quiet`.

$ brew commands -q --include-aliases
--cache                           create                            ln                                style
--cellar                          deps                              log                               switch
--config                          desc                              ls                                tap
--env                             diy                               man                               tap-info
--prefix                          doctor                            migrate                           tap-new
--repo                            dr                                mirror                            tap-pin
--repository                      edit                              missing                           tap-unpin
--version                         environment                       options                           test
-S                                extract                           outdated                          tests
-v                                fetch                             pin                               uninstal
abv                               formula                           postgresql-upgrade-database       uninstall
analytics                         gist-logs                         postinstall                       unlink
aspell-dictionaries               help                              prof                              unpack
audit                             home                              pull                              unpin
bottle                            homepage                          readall                           untap
bump-formula-pr                   info                              reinstall                         up
bump-revision                     instal                            release-notes                     update
cask                              install                           remove                            update-report
cat                               install-bundler-gems              rm                                update-reset
cleanup                           irb                               ruby                              update-test
command                           leaves                            search                            upgrade
commands                          link                              services                          uses
config                            linkage                           sh                                vendor-gems
configure                         list                              shellenv                          vendor-install
```

##### config

- Homebrewとシステム構成情報を表示してくれる
- バグレポートを提出する場合、この情報を提供する必要がある（Homebrewへの情報提供の場合）

```sh:Terminal
$ brew --config
HOMEBREW_VERSION: 2.2.2
ORIGIN: https://github.com/Homebrew/brew
HEAD: 13f508d0dc8ada1726ee09a750285d7447ac3df4
Last commit: 3 weeks ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: f2463cbba086689c872cddd3a8bc242976a603ff
Core tap last commit: 20 hours ago
HOMEBREW_PREFIX: /usr/local
CPU: octa-core 64-bit ivybridge
Homebrew Ruby: 2.6.3 => /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3/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.6-x86_64
CLT: 10.3.0.0.1.1562985497
Xcode: N/A

$ brew config
HOMEBREW_VERSION: 2.2.2
ORIGIN: https://github.com/Homebrew/brew
HEAD: 13f508d0dc8ada1726ee09a750285d7447ac3df4
Last commit: 3 weeks ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: f2463cbba086689c872cddd3a8bc242976a603ff
Core tap last commit: 20 hours ago
HOMEBREW_PREFIX: /usr/local
CPU: octa-core 64-bit ivybridge
Homebrew Ruby: 2.6.3 => /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3/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.6-x86_64
CLT: 10.3.0.0.1.1562985497
Xcode: N/A
```

##### deps [options] [formula]

- フォーミュラ（パッケージ名）の依存関係を表示

  - -n：依存関係をトポロジー順にソートします。
  - --1：再帰ではなく、1レベル下の依存関係のみを表示します。
  - --union：交点ではなく、複数のフォーミュラ（パッケージ名）の依存関係の和集合を表示します。
  - --full-name：依存関係をフルネームでリストします。
  - --include-build：インクルード：フォーミュラ（パッケージ名）のビルド依存関係。
  - --include-optional：Include：フォーミュラ（パッケージ名）のオプションの依存関係。
  - --include-test：フォーミュラ（パッケージ名）の：test依存関係を含めます（非再帰的）。
  - --skip-recommended：フォーミュラ（パッケージ名）の推奨依存関係をスキップします。
  - --include-requirements：フォーミュラ（パッケージ名）の依存関係に加えて要件を含めます。
  - --tree：依存関係をツリーとして表示します。複数のフォーミュラ（パッケージ名）引数を指定した場合、各フォーミュラ（パッケージ名）の個別のツリーを表示します。
  - --annotate：ビルド、テスト、オプション、または推奨される依存関係を出力でマークします。
  - --installed：現在インストールされているフォーミュラ（パッケージ名）の依存関係を一覧表示します。フォーミュラ（パッケージ名）が指定されている場合、現在インストールされている依存関係のみをリストします。
  - --all：使用可能なすべての式の依存関係を一覧表示します。
  - --for-each：--allオプションで使用されるモードに切り替えますが、指定された各式の依存関係のみをリストします（1行に1つの式）。これは、-installed / -all表示モードのデバッグに使用されます。

```sh:Terminal
$ brew deps vim
gdbm
libyaml
openssl
perl
python
readline
ruby
sqlite
xz
```

* 参考になった技術まとめ
  * [Homebrew の依存関係を表示する方法](https://yu8mada.com/2018/06/08/how-to-list-homebrew-dependencies/)

##### desc [options] (text|/text/|formula)

- フォーミュラ（パッケージ名）の名称と説明を表示する
- なお表示する説明はキャッシュされ、後から表示したものに比べて検索速度が遅くなる（キャッシュが古くなる為）

  - -s、-search：テキストの名前と説明の両方を検索します。テキストがスラッシュで挟まれている場合、それは正規表現として解釈されます。
  - -n、--name：テキストの名前だけを検索します。テキストがスラッシュで挟まれている場合、それは正規表現として解釈されます。
  - -d、-description：テキストの説明だけを検索します。テキストがスラッシュで挟まれている場合、それは正規表現として解釈されます。
  - diy [オプション]：非Homebrewソフトウェアのインストールプレフィックスを自動的に決定します。このコマンドの出力を使用して、独自のソフトウェアをセラーにインストールしてから、brewリンクを使用してHomebrewのプレフィックスにリンクできます。
  - --name：インストールするパッケージの名前を明示的に設定します。
  - --version：インストールするパッケージのバージョンを明示的に設定します。


##### doctor [options]

- システムに潜在的な問題がないか確認する
- 潜在的な問題が見つかった場合、ゼロ以外のステータスで終了

```sh:Terminal
$ brew doctor
Your system is ready to brew.

$ echo $?
0
# -> エラーがある場合、異常終了すると思われる
```


##### upgrade [options]

- Homebrew のパッケージの更新（[サブコマンド](https://docs.brew.sh/FAQ)）
- 30日以上古いものが自動削除される
- 自動削除を止めたければ、環境変数 `env HOMEBREW_INSTALL_CLEANUP=1` で止める

```sh:Terminal
# デフォルト（30日以上古いものを自動削除）
$ brew upgrade

# 自動削除しない場合
$ env HOMEBREW_INSTALL_CLEANUP=1 brew upgrade
```

* 参考になった技術まとめ
  * [homebrewの更新はbrew upgrade --cleanupだけでよくなっている (その後 --cleanup は不要に)](https://blog.n-z.jp/blog/2017-04-27-homebrew-upgrade-cleanup.html)


##### update

- deplicated




## 拡張機能


### [Homebrew cask](https://github.com/Homebrew/homebrew-cask)

#### インストール

```sh:Terminal
$ brew cask
==> Tapping homebrew/cask
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'...
remote: Enumerating objects: 3624, done.
remote: Counting objects: 100% (3624/3624), done.
remote: Compressing objects: 100% (3616/3616), done.
remote: Total 3624 (delta 25), reused 545 (delta 6), pack-reused 0
Receiving objects: 100% (3624/3624), 1.22 MiB | 1.49 MiB/s, done.
Resolving deltas: 100% (25/25), done.
Checking out files: 100% (3604/3604), done.
Tapped 1 command and 3512 casks (3,629 files, 3.9MB).
Homebrew Cask provides a friendly CLI workflow for the administration
of macOS applications distributed as binaries.

Commands:

    --cache    display the file used to cache the Cask
    audit      verifies installability of Casks
    cat        dump raw source of the given Cask to the standard output
    create     creates the given Cask and opens it in an editor
    doctor     checks for configuration issues
    edit       edits the given Cask
    fetch      downloads remote application files to local cache
    home       opens the homepage of the given Cask
    info       displays information about the given Cask
    install    installs the given Cask
    list       with no args, lists installed Casks; given installed Casks, lists staged files
    outdated   list the outdated installed Casks
    reinstall  reinstalls the given Cask
    style      checks Cask style using RuboCop
    uninstall  uninstalls the given Cask
    upgrade    upgrades all outdated casks
    zap        zaps all files associated with the given Cask

See also "man brew-cask"
```

#### 使い方

- インストール時に表示されるCommandsを参照

##### cask [subcommand]

  - install [cask]
    - cask をインストールします

```sh:Terminal
$ brew cask install google-chrome
```


### [Homebrew services](https://github.com/Homebrew/homebrew-services)

#### インストール

```sh:Terminal
$ brew services list
==> Tapping homebrew/services
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-services'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 14 (delta 0), reused 7 (delta 0), pack-reused 0
Unpacking objects: 100% (14/14), done.
Tapped 1 command (43 files, 59.4KB).
Warning: No services available to control with `brew services`
```

これで自動で `tap` されて `brew services` が使用可能な状態になります

```sh:Terminal
$ brew services list
Name      Status  User Plist
mysql@5.7 stopped      
```

#### 使い方

- services list
  - serviceの一覧を表示

- services start formula
  - フォーミュラ（パッケージ名） を開始、かつ、ログイン時に起動する設定をする

- services stop formula
  - フォーミュラ（パッケージ名） を停止、かつ、ログイン時に起動する設定を消す

- services restart formula
  - フォーミュラ（パッケージ名） でstop; startを実行

```sh:Terminal
$ brew services start mysql@5.7
==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
```

* 参考になった技術まとめ
  * [Homebrew Documentation](https://docs.brew.sh/Manpage)
  * [HomeBrew services 便利](https://qiita.com/tttreal/items/2c154b62186c038cd909)
  * [homebrewの実は知ってそうで、やっぱり知ってたことまとめ](https://qiita.com/muran001/items/409b8cb42cca02b147a0)
  * [今さらだけどHomebrewのコマンドをちゃんと理解して使おう](https://qiita.com/fuqda/items/db8aff0ba4068aea2cc6)

## 最後に

* brewのバージョンアップデートや拡張機能で変化が激しい為、このまとめは随時編集されます