Homebrewインストールとオペレーション

Macのパッケージ管理をHomebrewで行う。

## 環境

| 項目 | 内容 |
|:--|:---|
| Hardware | MacBook Air 11-inch, Mid 2011<br />-> MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports) |
| Mac OSX | Lion -> Mountain Lion -> Mavericks -> Yosemite -> El capitan -> Sierra |
| Homebrew 関連ディレクトリ | /usr/local （bin, Homebrewなど） <br /> /usr/local/Celler |

## 用語

| 項目 | 内容 |
|:--|:---|
| brew | ビルドする（本来の意味は「醸造する」） |
| Celler | パッケージインストール先（「酒蔵」） |
| Formula | パッケージとインストールスクリプト（「調理法」） |

## ドキュメント（英語）
  https://github.com/Homebrew/brew

## 1. インストール
以下、インストール手順。

### 1.1. 事前準備
1. Xcodeとコマンドラインツールをインストール（ダイアログが起動するので「Get Xcode」）

  ```
  $ xcode-select --install
  ```

### 1.2. Homebrew インストール
1. 以下のコマンドを実行してインストール

    ```
    $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    ```
    * http://brew.sh/index_ja.html

2. インストールが成功したか以下を実行してチェックする

    ```
    $ brew doctor
    Your system is ready to brew.
    ```
  * 警告が出たらメッセージに従って解消する。


### 1.3. 公開リポジトリの追加

1. Homebrew Services
  * FormulaとmacOSのlaunchctlマネージャの統合機能
  * サービスの起動制御ができる

  ```
  $ brew tap homebrew/services
  ```
2. Homebrew Cask
  * macOSアプリやバイナリ用の拡張
  * アプリ実体は/Applications/{アプリ}にインストールされる。以前は別の場所だったため、アップデートの場合には入れ直しなどの対処が必要。
  * ※ アプリのアップデートなどで上手くいかないことがあるので、個人的には使わない。

  ```
  $ brew tap caskroom/cask
  ```
3. rmtree
  * 依存関係を含めて削除する拡張

  ```
  $ brew tap beeftornado/rmtree
  ```


## 2. コマンド

### 2.1. Homebrew Core

| コマンド | 内容 |
|:--|:---|
| brew list | インストールされているformulaの一覧を表示する。 |
| brew search text<br />brew search /text/ | formulaを検索する（インストール有無に関わらず）。<br />textは任意の文字列、/text/で正規表現を使用できる。 |
| brew outdated | 更新のあるfomulaを調べる。 |
| brew update | homebrewを最新バージョンにする。 |
| brew upgrade | インストールされているfomulaを最新バージョンにする。 |
| brew info {formula名} | formulaの情報を表示する<br />（バージョン、インストール状態、インストールオプションなど）。 |
| brew install {formula名} | formulaでパッケージをインストールする。 |
| brew uninstall {formula名} | formulaでパッケージをアンインストールする。 |
| brew link formula | fomulaのリンクを作成する。<br />インストールでシンボリックリンク作成に失敗することがあるが、<br />そのときは画面のメッセージに従いリンクを作成する。 |
| brew tap | リポジトリを一覧する。 |
| brew tap {ユーザー名}/{リポジトリ名} | 公開リポジトリを追加する。<br />ユーザー名"homebrew"は公式。 |
| brew untap {ユーザー名}/{リポジトリ名} | 追加したリポジトリを削除する。 |

### 2.2. Homebrew Services

| コマンド | 内容 |
|:--|:---|
| [sudo] brew services list | ログオンユーザー（sudoをつけるとroot）の起動サービスの一覧を表示する。 |
| [sudo] brew services run {formula名}\|--all  | ログオン時（sudoの場合はboot時）の自動起動なしでの、サービス起動。 |
| [sudo] brew services start {formula名}\|--all | ログオン時（sudoの場合はboot時）の自動起動を設定し、サービス起動。 |
| [sudo] brew services stop {formula名}\|--all | サービス停止。 |
| [sudo] brew services restart {formula名}\|--all | サービス停止後、ログオン時（sudoの場合はboot時）の自動起動を設定し、サービス起動。 |
| [sudo] brew services cleanup | 未使用のサービス削除。 |



### 2.3. Homebrew Cask

| コマンド | 内容 |
|:--|:---|
| brew cask list | caskでインストールされているアプリの一覧を表示する。 |
| brew cask search<br />brew cask search text<br />brew cask search /text/ | アプリのcaskを検索する。（インストール有無に関わらず）<br />textは任意の文字列、/text/で正規表現を使用できる。<br />指定しなければ全て表示する。 |
| brew cask install {cask名} | caskを指定してアプリをインストールする。 |
| brew cask reinstall {cask名} | caskを指定してアプリを再インストールする。 |
| brew cask uninstall {cask名} | caskを指定してアプリをアンインストールする。 |
| brew cask create {new-cask名} | caskが用意されていない場合、新たにcaskを作成する。 |

### 2.4. rmtree

| コマンド | 内容 |
|:--|:---|
| brew rmtree {formula名} | 依存関係を含めて削除 |
| brew rmtree --dry-run {formula名} | 確認のみ |

## 3. メモ
### 3.1. 過去のバージョンの扱い

* 以前はHomebrew/versionsを使用してFormulaの過去バージョンを使用してきたがそちらは非推奨になり、Homebrew/coreでサポートするようになった。
* Formulaの過去バージョン表記は、{formula@versions}（例：gcc@5）となる。

### 3.2. その他
以下は過去の履歴で。

* Macのアップデートによるエラー対応
* caskの仕様変更によるエラー対応