Homebrew パッケージインストール 詳細手順

## 本記事の目的
Homebrewのパッケージインストール手順の説明記事は多くあるのですが,各コマンドの意味を含めた詳細な手順が見つからなかったので,自分用備忘録として記事にしました.
つまり完全初心者向きです.
間違いなどありましたら,どうぞご指摘ください.

## 本記事の動作環境
* macOS Mojave v10.14
* ターミナル v2.9 (421)

## What is Homebrew?
HomebrewはMac用のパッケージマネージャーです.
通常ではパッケージのをアップデートなどする場合,対象パッケージをGithubなどからCloneなどして使用します.
しかし使用するパッケージが増えると,各パッケージを個別に管理するのが非常に手間となります.
パッケージマネージャーを導入することでこれらのパッケージ群を一括管理可能にし,パッケージ管理の手間を大幅に削減してくれます.

パッケージマネージャーには他にMacPorts, Finkなどがありますが,Homebrewはこの中では比較的新しいパッケージマネージャーです.
本記事では各パッケージマネージャーの比較はしませんが,パッケージマネージャー選びの参考までにGoogleトレンドをリンクしておきます.

> 各パッケージマネージャー トレンド比較
> [Homebrew, MacPorts, Fink - 調べる - Google トレンド](https://trends.google.co.jp/trends/explore?cat=32&q=%2Fm%2F0fq175b,%2Fm%2F05_6wm,%2Fm%2F01hpbv)

なおHomebrew下ではパッケージのことをFormulaと呼びます.
以降の手順説明では`formula`と記載されていれば,それはパッケージ名に読み替えられます.
Homebrewでインストール可能なパッケージ一覧は次のリンクで確認できます.

> Homebrewパッケージ一覧
> [Homebrew Formulae](https://formulae.brew.sh/formula/)

## How to install Homebrew

Homebrew公式サイトトップにあるスクリプトをコピーし,ターミナルへ貼付け実行するとHomebrewのインストールが開始します.

> Homebrew公式 トップ
> [Homebrew — macOS 用パッケージマネージャー](https://brew.sh/index_ja)

途中,Xcode Command Line Toolsが未インストールの場合,インストールダイアログが表示されます. そのときはインストールボタンをクリックします.
PCのログインパスワードの入力を求められた場合は入力します. なお,ターミナル上でパスワードの入力内容は表示されません.
しばらくしてプロンプトが表示され,入力可能になればインストール完了です.

## How to install Packages
パッケージインストール手順
1. Check package information before install.
2. Install Package.
3. Check Package was installed correctly.
4. Set configuration.
5. Load configuration.
6. Check Package operation.
7. Update Packages.

以降のコマンドはターミナル.app上で実行します. また`[]`で囲んだ部分は省略可能ですが,実行結果が変化します.

### 1. Check package information before install.

`brew info formula`
Homebrewでインストール可能なパッケージの情報を確認します.
目的のパッケージが依存する他ファイル群(パッケージと同時にインストールされる)や,パッケージを使用する上での警告等が表示されるので良く読みましょう.

#### コマンド実行例

実際に上記コマンドの実行例を示します.
ここではVimというエディタのパッケージ情報を表示します.
次節以降のコマンド実行例もVimを例に示しています.

```bash:ターミナル.app
$ brew info vim # Vimのパッケージ情報を表示
vim: stable 8.1.0450 (bottled), HEAD
Vi 'workalike' with many additional features
https://www.vim.org/
Conflicts with:
  ex-vi (because vim and ex-vi both install bin/ex and bin/view)
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/vim.rb
==> Dependencies
Required: perl ✘, ruby ✘
Recommended: python ✘
Optional: gettext ✔, lua ✘, luajit ✘, python@2 ✘
==> Options
--with-client-server
	Enable client/server mode
--with-gettext
	Build vim with National Language Support (translated messages, keymaps)
--with-lua
	Build vim with lua support
--with-luajit
	Build with luajit support
--with-override-system-vi
	Override system vi
--with-python@2
	Build vim with python@2 instead of python[3] support
--with-tcl
	Build vim with tcl support
--without-python
	Build vim without python support
--HEAD
	Install HEAD version
==> Analytics
install: 75,849 (30d), 242,528 (90d), 980,688 (365d)
install_on_request: 65,958 (30d), 195,844 (90d), 692,209 (365d)
build_error: 45 (30d)
```

これを上から見ていくと説明内容は以下のとおりです.

* vim: ・・・Vimのバージョンやパッケージ概略など.
* Conflicts with: ・・・このパッケージをインストールする際に競合となる他のパッケージなど,および競合理由(Vimの場合,ex-viが存在すると競合してしまう).
* ==> Dependencies ・・・このパッケージの依存ファイル群. ✘はHomebrewでは未インストール,✔はHomebrewでインストール済.
    * Required: ・・・必須依存ファイル : パッケージの動作に必須な為,必ず同時にインストールされる.
    * Recommended: ・・・推奨ファイル : パッケージの動作に必須ではないが,同時にインストールされる. オプション指定でインストールしないことも可能.
    * Optional: ・・・オプションファイル : パッケージインストール時にオプション指定すると,同時にインストールされる.
* ==> Options ・・・このパッケージのインストール時に指定可能なオプション. 必要なオプションは半角スペースで区切って指定する(次節 コマンド実行例 参照).
* ==> Analytics ・・・このパッケージの解析結果

### 2. Install Package.

`brew install formula [option]`
パッケージをインストールします.

#### コマンド実行例
Vimをオプション指定してインストールする場合,次のようにコマンドを実行します.

```bash:ターミナル.app
brew install vim --with-gettext --with-override-system-vi # Vimを複数オプション指定してインストール
```

このコマンドを実行すると発生することは次の通りです.

* Vimがインストールされる.
* Vim依存ファイルであるperlとrubyがHomebrew管理下でインストールされる.
* rubyの依存ファイル群がHomebrew管理下でインストールされる.
* Vim推奨ファイルであるpythonがHomebrew管理下でインストールされる.
* pythonの依存ファイル群がHomebrew管理下でインストールされる.
* `--with-gettext` オプション指定により,VimオプションファイルであるgettextがHomebrew管理下でインストールされる.
* `--with-override-system-vi` オプション指定により,Vimの実行ファイルのパスが上書きされる.

### 3. Check Package was installed correctly.

`which formula`
コマンド実行ファイル(インストールしたパッケージによって使用可能になるコマンド)のインストール先を確認します.
通常,Homebrewでインストールされたパッケージのコマンド実行ファイルは /usr/local/bin にシンボリックリンクとして格納されます.
パッケージそのものは /usr/local/Cellar に格納されます.

`brew list`
現在インストールされているパッケージ一覧を表示します.

`brew deps --tree formula`
目的のパッケージのファイル依存関係をツリー表示します.

`formula --version`
インストールしたパッケージのバージョンを表示します.

#### コマンド実行例
上記コマンドの実行結果をVimを例に示します.

```bash:ターミナル.app
$ which vim # vimコマンドの実行ファイル格納先ディレクトリを表示
/usr/local/bin/vim

$ brew list # Homebrew管理下のパッケージ一覧を表示(git, gettext, pcre2はvimインストール前にインストール済)
gdbm		libyaml		perl		ruby		xz
gettext		openssl		python		sqlite
git		pcre2		readline	vim

$ brew deps --tree vim # Vimのファイル依存関係をツリー表示(gettextは依存ファイルではないのでここに表示されない)
vim
├── perl
├── ruby
│   ├── libyaml
│   ├── openssl
│   └── readline
└── python
    ├── gdbm
    ├── openssl
    ├── readline
    ├── sqlite
    │   └── readline
    └── xz

$ vim --version # Vimのバージョンを表示
VIM - Vi IMproved 8.1 (2018 May 18, compiled Oct  8 2018 19:53:24)
macOS version
Included patches: 1-450
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
+acl               +extra_search      +mouse_netterm     +tag_old_static
+arabic            +farsi             +mouse_sgr         -tag_any_white
# 以下略
```

#### バージョンが最新になっていない場合の原因と対処
バージョンを確認した際に,Homebrewでの最新バージョンになっていない場合,以下の3つが原因として考えられます.
それぞれ順にコマンドを実行していくことで解決します.

##### 構成ファイル(.bash_profileなど)がまだ作成されていない.
1. `touch ~/構成ファイル`で構成ファイルを作成する.
2. `source ~/構成ファイル`で作成した構成ファイルを即時に読み込む.

##### パッケージインストール後に構成ファイルがまだ読み込まれていない.
1. `source ~/構成ファイル`もしくは`. ~/構成ファイル`で構成ファイルを即時に読み込む.

##### OSにもともとインストールされているコマンドで,新しいパスが通っていない.
1. `echo $PATH`でパスの優先順位を確認する. /usr/local/bin/ が最優位になっていない(一番左に設定されていない)場合,手順2へ. 最優位になっているなら手順3へ.
2. `vi 構成ファイル`でVimエディタを開き`export PATH=追加したいコマンド検索パス:$PATH`を書き足した後,上書き保存してエディタを終了する.
3. `source ~/構成ファイル`で構成ファイルを即時に読み込む.
4. `echo $PATH`でパスの優先順位を再度確認する.

### 4. Set configuration.
`cd`
ホームディレクトリへ移動します.

`vim configuration-file`
Vimエディタで構成ファイルを作成,編集します.

#### コマンド実行例
Vimを例に構成ファイル設定手順を示します.
これはパッケージによっていじる構成ファイルや内容が異なるので,あくまで参考までに.
この例ではgettextをVimに読み込ませVimを日本語表示できるように設定します.

```bash:ターミナル.app
$ cd # ホームディレクトリへ移動

$ vim .bash_profile # Vimエディタで.bash_profile(bashの構成ファイル)を編集もしくは作成
```
.bash_profileにgettextのパスを追記します.
Vimの操作に慣れていない方は,次のコマンドを順に入力してください.

```vim:.bash_profile
" カーソルを最下行へ移動
G
" インサートモードへ移行しカーソルを行末へ移動
A
" 改行
Enter
" gettextを読み込むようパスを設定
export PATH="/usr/local/opt/gettext/bin:$PATH"
" ノーマルモードへ移行
Esc
" ファイルを保存し,Vimを終了
:wq
```

### 5. Load configuration.

`source configuration-file`
構成ファイルを即時に読み込みます.

### 6. Check Package operation.

`info formula`
インストール済のパッケージのヘルプや操作方法等を表示します.
ヘルプは`q`で閉じます.

### 7. Update Packages.

`brew outdated`
インストール済のパッケージで更新のあるものを表示します.

`brew upgrade [formula]`
Homebrewそのものをアップデートすると共に指定パッケージもアップデートします.
パッケージを省略した場合,全てのパッケージをアップデートします.

## 参考記事
以下の記事を参考にさせて頂きました.ありがとうございます.
> Homebrewの仕組みや,他の主要コマンドなど
> [homebrewとは何者か。仕組みについて調べてみた - Qiita](https://qiita.com/omega999/items/6f65217b81ad3fffe7e6)
> パッケージや依存関係に関して
> [びぎねっと　-　はじめる人のびぎねっと。](https://begi.net/read/base/03.html)