Homebrewって何となくこうだと思う

# Homebrewとはざっくり・・・

よくソフトウェアの`パッケージ管理システム`とか言われるし、
[公式サイト](https://brew.sh/index_ja)にも`macOS用パッケージマネージャー`と紹介されるが、パッケージ管理とかマネージャーってつまりどういうこと？
って私は初めて使う時に思いましたので、Mac初めて買って「開発やってみるぞ！」みたいな境地の人の手助けになれば幸いです。
本記事はパッケージ管理システムを使うのは`Homebrew`が初めてという方に向けています。
でもざっくりとか記載していませんので、悪しからず。

先に結論言っておくと

**Macで開発言語や開発を手助けしてくれる機能などをインストールしたり、管理するために使うもの**

です

## 役割

役割としては↓と似たようなものです。
![スクリーンショット 2020-02-20 22.18.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493132/29f2fea9-d9d3-ded4-f6ec-6dcaab167bc2.png)

iphone使っていたら`App store`からアプリをダウンロードするし、
android使っていたら`google play`からアプリをダウンロードし、
それぞれ今までにインストールした一覧も見れたりします。

`Mac`のPCで色々なアプリや言語、ライブラリをインストールしたり、一覧を確認したりするものです。

「いやMacにも`App store`あるじゃん。じゃあそれでよくない？違いは何！？」と言われそうですが、`Homebrew`は先に述べた通り、
（大体）開発に必要なプログラミング言語だったり機能をインストール・管理するために使うため、ゲームだったり、音楽プレイヤーなどをインストールすることはありません。

※厳密に言ってしまえば、例えば一般的によく使われているアマゾンのkindleを`Homebrew`でインストールできますし、「この領域」と言えるほど明確な境界線は存在しないと思います。

他には、管理しやすくするという役割もあります。
インストールする対象のライブラリなどには`依存関係`と呼ばれるものがあり、依存関係は「Aを使うにはBも必要だよ。だからAを使用するにはAとB両方インストールしないと使えないよ」という関係性のものです。
例えばExcelやWordにPDF化する機能がありますが、PDF機能使いたかったら自分でPDF専用ソフト用意してExcelやWordそれぞれに自分で設定してねみたいに言われたら中々面倒ですよね？
ExcelやWordのいいところとしてPDF文書もポチッと1クリックで済ませられ、ソフト自体がパッケージ化されているという便利さもあるので、それができないとなるとPDF文書作成できないユーザーも必ず出てきます。
そういった依存関係の管理を`Homebrew`が代理でまとめてくれるという役割もあります。

## 他のパッケージ管理システム

パッケージ管理システムは他にもあり、Linux用に`yum`、`apt`などがあり、Mac用だと`Homebrew`である。
私はあるライブラリをインストールしようとして参考サイトで`yum install ~~`と書いてあったのをそのままMacのターミナルに打ち込んでエラーが出て「？？」と打ちひしがれていました。。。

## `brew`と`brew cask`

- `brew`はコマンド（画面なしでテキストでぽちぽち操作する）だったり、開発言語や機能の方のパッケージ管理
- `brew cask`は主に画面で操作するソフトのパッケージ管理

例としてbrewコマンドで`ruby`を検索すると
※↓の例は右にスライドできます

```
$ brew search ruby
==> Formulae
chruby                                  mruby                                   ruby-build                              ruby@2.5
chruby-fish                             mruby-cli                               ruby-completion                         rubyfmt
imessage-ruby                           rbenv-bundler-ruby-version              ruby-install                            homebrew/portable-ruby/portable-ruby
jruby                                   ruby                                    ruby@2.4

==> Casks
madruby                                              rubymine                                             rubymotion
```

`==> Formulae`の欄に`ruby`言語がありますが、`==> Casks`のところには`rubymine`というGUIエディタがあります。
本サイトのQiitaも`Google Chrome`や`Fire Fox`などで見ている人が多いかと思いますが、`brew cask`でインストール可能です。
`brew`は開発用に扱うもので大抵画面で扱わないもの、`brew cask`は一般的に使われているソフトなどを扱うくらいの理解でとりあえず使うことはできるかなと思います。

繰り返しになりますが、`Homebrew`の概要をまとめると

- 何かをインストールする
- インストール済のものを確認、変更する
- 依存関係を管理する

と以上の事柄のために使用すると言えます。

## 注意点

あなたが別記事で`Homebrew`でインストールする例文があり、うまくいかなかったので、`Homebrew`を調べていたのであればここで注意点です。

`Homebrew`は上述したようにインストールや管理の側面から便利なシステムですが、`Homebrew`でなければインストールできないとか依存関係を管理できないということは基本的にありません。
どんな言語やライブラリでも`Homebrew`以外にインストールする手段はあるということは念頭においておいてください。
`Homebrew`で扱った方がインストールしやすかったり、管理しやすいというだけです。 

## よく使うコマンド

最後に基本的なコマンドです。

```:インストール
brew install 対象名
```
```:アンインストール
brew uninstall 対象名
```
```:インストール済の一覧を確認
brew list
brew list --version #バージョン含めて一覧表示
```
```:brewで扱える言語や機能やソフトなどを検索
brew search 対象名
```
```:詳細を確認(インストール済か否か、最新バージョン、依存関係など)
brew info 対象名
```
```:インストール済で更新がある対象を確認
brew outdated
```
```:Homebrew自身とパッケージの更新
brew upgrade
```
```:旧バージョンで使用しないものを削除
brew cleanup
brew cleanup -n #削除する対象を一覧表示（消去する前にやると○）
```
```:問題箇所を確認
brew doctor
```
```:依存関係を確認(どの対象に依存しているか)
brew deps 対象名
brew deps --installed --tree # インストール済の依存関係をツリー状で表示
```
```:依存関係を確認（どの対象から依存されているか）
brew uses 対象名
```
```:依存関係がない対象を表示
brew leaves
```