homebrew-caskでMacOSのパッケージ管理をする

複数台のMacを管理するのにあたって、GUIのアプリのインストールとその後のアップデートを一気に行うツールがないかを探していたところ、homebrew-caskというhomebrewの拡張を見つけました。そこでこれらを自分のMacに導入した時のメモをまとめます。

# 準備
## Xcode Command Line Toolのインストール
homebrewやhomebrew-caskを動かすためにはXcode Command Line Toolが必要なので導入しました。以下からダウンロードできます。
https://developer.apple.com/downloads/index.action

OS毎に異なるのでOSに合わせたものを導入します。
これはGUIでないとインストールできないようですが、もしコマンドラインからダウンロード＆インストールの仕方をご存知の方は教えていただけると幸いです。

## homebrewとhomebrew-caskをインストール

Xcode Command Line Toolが入ったので、次にhomebrewとhomebrew-caskを導入します。

なおこのページでは特に断りがない場合、行頭の`%`はプロンプトを示します。実際にコマンドを入力する時はプロンプト以降を入力してください。

```
% ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
% brew install caskroom/cask/brew-cask
```

## homebrew-fileをインストール
homebrewやhomebrew-caskでインストールしたパッケージを管理できるように、homebrew-fileをインストールします。これを使うことでgithubに置いたBrewfile(brew用のMakefileのようなもの)との連携も可能となります。

```
% brew tap rcmdnk/file
% brew install brew-file
```

## homebrew-versionsをインストール
homebrew-caskを入れただけでは、Adobe ReaderやFirefoxなどは英語版が入ってしまいます。しかしこのhomebrew-versionをインストールしておけば、日本語版を入れることができるようになります。

```
% brew tap caskroom/homebrew-versions
```
上記作業後にインストール可能パッケージを調べると、例えばAdobe Readerの場合だと以下のように日本語版Adobe Reader(adobe-reader-ja)がインストールできます。

```
% brew cask search adobe-reader
==> Exact match
adobe-reader
==> Partial matches
adobe-reader-de	  adobe-reader-fr   adobe-reader-ja   adobe-reader-pt
```

# 環境設定
アカウントを追加してもインストールしたパッケージが利用できるように、パッケージを~/Applicationではなく/Applicationからのシンボリックリンクにするため、以下の設定を行いました。

```
% export HOMEBREW_CASK_OPTS=--appdir=/Applications
```

# パッケージの導入
brew caskコマンドでパッケージを導入していきます。なおインストール済のパッケージをbrew caskで導入しなおす場合は、アプリケーションフォルダ内のファイルを削除してアンインストールしておくのがよさそうです。

```lang:実行方法
% brew cask install [パッケージ名]
```

```lang:実行例
% brew cask install adobe-reader-ja
```
このように必要なパッケージをインストールします。
インストール後、以下の作業を行います。

# github側の準備
## githubのアカウントを作る

githubのアカウントを持っていなかったので、この作業にあたって作ることにしました。すでに持っている人はスキップしてください。
 
## githubに公開鍵を登録する
githubにsshでアクセスする場合、github上に自分の公開鍵を登録する必要があります。`ssh-keygen`コマンドで作成します。これもすでに実施済の方はスキップしてください。

```
% cd
% ssh-keygen
% cat .ssh/id_rsa.pub
```
githubの管理画面から、Settings→SSH keys→Add SSH keyとクリックします。
![github_ssh.png](https://qiita-image-store.s3.amazonaws.com/0/77532/3f0e4bf1-fb78-af7f-7309-0732a8e6410e.png)

`Title`欄は任意の名前、`Key`欄に`cat .ssh/id_rsa.pub`の内容をコピー＆ペーストします。
![github_ssh_02.png](https://qiita-image-store.s3.amazonaws.com/0/77532/51fd9cad-300a-0df9-8c46-50096f0402c7.png)

## Brewfileを入れるためのレポジトリを作る
githubのWeb画面にログインして、Brewfileを保管するためのレポジトリを作成します。今回は"hBrewfile"というレポジトリを作りました。
 
## レポジトリの初期化を行う
レポジトリの初期化をするために以下のコマンドを実行します。
レポジトリ名は`hBrewfile`としました。

```
% echo "# Brewfile" >> README.md
% git init
% git add README.md
% git commit -m "first commit"
% git remote add origin https://github.com/s5601026/hBrewfile.git
% git push -u origin master
```

## 空のBrewfileをgithubのBrewfileレポジトリに登録する。
下記のようにコマンドを実行します。

```
% brew file set_repo -r [githubのユーザ名]/[レポジトリ名]
```
私のgithubのユーザ名は`s5601026`、レポジトリ名は`hBrewfile`なので以下のようになります。

```
% brew file set_repo -r s5601026/hBrewfile
```
## Brewfile編集
以下のコマンドでBrewfileを編集します。初めて実行した場合は内容が空かと思いますが、その時はそのまま終了させてください。

```
% brew file edit
```

そして内容が空の場合は、以下のコマンドを実行して現在の状態を反映させます。

```
% brew file init
```

これで準備完了です。

# 運用
普段の運用では以下のような作業を行います。

## パッケージのアップデート
homebrewとhomebrew-caskで入れたパッケージのアップデートは以下のように行います。

```
% brew file update && brew file cask_upgrade -C
```
最新版のみ残す場合は`cask_upgrade`の後に`-C`をつけます。

なお、古いバージョンも残す場合は以下のコマンドを利用します。

```
% brew cask update
```
## パッケージのアンインストール方法
以下のコマンドでパッケージのアンインストールができます。また、`brew file edit`を実行して、アンインストールしたパッケージの記載を削除します。

```
% brew cask uninstall [パッケージ名]
% brew file edit
```
## homebrew-caskでインストールできる導入済パッケージの一覧作成
以下のコマンドで、すでにGUIでインストールして導入済だがhomebrew-caskでインストール可能なパッケージの一覧がわかります。

```
% brew file casklist
```
結果は~/Caskfileに記載されるので、lessコマンドなどを使って中身を見ましょう。

```
% less ~/Caskfile
```
# 感想
homebrew-caskもhomebrew-fileも、とても使いやすくてイイですね！私は元々FreeBSDやCentOS等のUNIX系OSを触っていたので、MacOSも(ある程度)それと同じような感覚で管理できるのはすばらしいと思いました。

# 謝辞
実施にあたってはhomebrew-caskだけでは実現が結構面倒だったと思われますが、homebrew-fileのおかげで少ない労力で実現しました。homebrew-fileを作成されたrcmdnkさんに感謝いたします。

# 参考資料
http://joker.hatenablog.com/entry/2014/11/09/014607
http://joker.hatenablog.com/entry/2015/01/28/123159
http://rcmdnk.github.io/blog/2014/08/26/computer-mac-homebrew/
http://rcmdnk.github.io/blog/2014/09/01/computer-mac-homebrew/
http://brew.sh/index_ja.html
http://www.task-notes.com/entry/20150316/1426474800
http://qiita.com/yaotti/items/a8e9f5de8dcca81d3214