MacOS用パッケージ管理システム"Homebrew"のインストールと基本的な使い方

# Macへのパッケージ管理システム Homebrew のインストール

## なぜパッケージ管理システムを使いたいか？

MacにインストールしたStore以外のパッケージの管理を楽にしたいから。

## なんでHomebrew？

https://docs.brew.sh/Installation

* ちょっとググってたら**Homebrew**が使われてるケースが多いと感じた。
* インストールが簡単
* 対応パッケージが沢山ある
* パッケージの一括アップデートが出来る
* 通常GUIでの操作が必要なアプリもコマンドラインでインストールを完結できる。
* 環境を汚さないみたい  
個別のディレクトリにインストールして/usr/local/bin/ にリンクを貼る感じ。

## インストールの流れ

* 前提アプリ(xcode)のインストール
* Homebrewのインストール

### xcodeのインストール

* インストール実行

```bash
imac:~ kichise$ xcode-select --install
xcode-select: note: install requested for command line developer tools
```

* インストールの確認への応答
<img width="461" alt="commandlinedevelopertools_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560759/4130b6cf-5128-44ac-01a5-1ef3b9137ee0.png">

* 使用許諾契約への同意
<img width="639" alt="commandlinedevelopertools_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560759/f9113923-7c7e-5055-99be-5966f19faba1.png">

* インストール完了
<img width="498" alt="commandlinedevelopertools_3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560759/402c12b1-090c-0ee7-8923-bf5787474ec2.png">

### Homebrewのインストール

公式サイトに掲載しいてるスクリプトを実行します。

```bash
imac:~ kichise$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

Press RETURN to continue or any other key to abort
Password: ************

ダウンロードとかあるから、少し時間が掛かります。

imac:~ kichise$ 
```

### brewコマンドの補完を行いたい場合の追加作業

brew コマンドのオプション指定を補完で行いたい場合、以下の追加設定を行います。

[Configuring Completions in zsh](https://docs.brew.sh/Shell-Completion)

bashを使ってる場合は、Configuring Completions in bash を参照してください。

```zsh
kichise@imac ~ % vi .zshrc
if type brew &>/dev/null; then
  FPATH=$(brew --prefix)/share/zsh/site-functions:$FPATH

  autoload -Uz compinit
  compinit
fi
kichise@imac ~ % 

## 以下のメッセージが出た場合、ディレクトリの権限を見直しましょう。
zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

kichise@imac ~ % ls -ld /usr/local/share
drwxrwxr-x  23 kichise  admin  736  5  2 14:47 /usr/local/share
kichise@imac ~ % chmod go-w "$(brew --prefix)/share"
kichise@imac ~ % chmod go-w "$(brew --prefix)/share/zsh"
kichise@imac ~ % chmod go-w "$(brew --prefix)/share/zsh/site-functions"
kichise@imac ~ %
```

* rcファイルに書いてるから、zshを呼び直さないと(ターミナルを開き直すとか)反映されません。

## 基本的な操作

### インストールしたいパッケージを探す

アプリ名の一部などキーワードを使って検索出来ます。

```zsh
kichise@imac ~ % brew search iterm2
==> Casks
iterm2                                   homebrew/cask-versions/iterm2-legacy
homebrew/cask-versions/iterm2-beta       homebrew/cask-versions/iterm2-nightly
kichise@imac ~ %
```

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

検索した時に、Formula側で見つかったパッケージは *brew install*
Casks側で見つかったパッケージは *brew cask install* でインストールします。

```zsh
kichise@imac ~ % brew cask install iterm2
```

### インストール済みパッケージの一覧

```zsh
kichise@imac ~ % brew list

caskの場合：
kichise@imac ~ % brew cask list
```

### アップデートが必要なパッケージの一覧

更新が必要なパッケージを確認するには、まず、HomebrewのアップデートとFormulaeのアップデートを行う必要があります。

```zsh
kichise@imac ~ % brew update
kichise@imac ~ % brew outdated

caskの場合：
kichise@imac ~ % brew cask outdated
```

### インストール済みパッケージの一括アップグレード

* update ではなく upgrade です。  
  オプション update では更新されたformulaのfetchだけ行うっぽい。
* 以前は古いパッケージの削除が必要だったようですが、今は定期的に自動削除されるので  
  アップグレードだけで明示的に削除(cleanup)する必要はないようです。

```zsh
kichise@imac ~ % brew upgrade

caskの場合：
kichise@imac ~ % brew cask upgrade
```

### アンインストール

Formulaでインストールしたパッケージは *brew uninstall*
Casksでインストールしたパッケージは *brew cask uninstall* でアンインストールします。

```zsh
kichise@imac ~ %　brew cask uninstall liberica-jdk13
```

###　参考
* Homebrew自体は install,upgrade tap の前に自動的にアップグレードが実行されます。