Homebrew + AnsibleでHappy Mac Provisioning


最近OSクリーンインストールしたんですよ。Yosemite。

まぁクリーンインストールしたにも関わらず起動速度が落ちるわGPU周りのバグか何かで表示もちょっとおかしかったりして、「やっちまったなこれ」感がある訳です。

クリーンインストールはゴミが消えて気持ちイイ感じにはなるんですが、開発環境の復元が面倒です。
「やっちまったな」を元に戻すにしても環境を既に構築した後だと死ぬほどめんどいわけです。

というわけで

## Ansibleを使ってMacの開発環境を手間なく整える

まぁ流石にコマンド一発にはならないんですが、結果として

```
sudo xcodebuild -license
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew doctor
brew update
brew install python
brew install ansible
# after clone dotfiles
cd ~/dotfiles
sh dotfilesLink.sh
cd ~/.provisioning
sh install.sh
```

を叩けばその後は開発に必要な諸々が次々とインストールされるようになりました。（xcodeはAppStore経由でいれちゃったので試してません）
しかも管理が簡単なので、オススメです。

今回の設定を行うに当たり
[HomebrewとAnsibleでMacの開発環境構築を自動化する | mawatari.jp](http://mawatari.jp/archives/mac-provisioning-by-homebrew-and-ansible)
[Mac の開発環境構築を自動化する (2015 年初旬編) - t-wadaのブログ](http://t-wada.hatenablog.jp/entry/mac-provisioning-by-ansible)
からコードをいただきました。素敵なナレッジありがとう。

以下自分の設定を晒すと同時に、手順を記しておきますのでお試し下さい。

1. [mawatari/mac-provisioning](https://github.com/mawatari/mac-provisioning)を`~/dotfiles/provisioning/`とかにclone
2. `web-development.yml`を好きに弄る
3. 同じディレクトリに`install.sh`を作る
4. `sh install.sh`する

### install.sh

3と4は別になくてもいいんですが、毎回`ansible-playbook -i hosts -vv web-development.yml`って打つのが面倒だったので…

```install.sh
ansible-playbook -i hosts -vv web-development.yml
```

### web-development.yml

基本的に開発はvagrantの中で行っているので、Macには余り多く入れていません。
MacVim + iTerm2(tmux)が設定通りに動けば良し！な感じです。

```web-development.yml
- hosts: localhost
  connection: local
  gather_facts: no
  sudo: no
  roles:
    - homebrew
    - homebrew-cask
  vars:
    # Tap external Homebrew repositories.
    #
    # e.g.
    # - homebrew/binary
    homebrew_repositories:
      - sanemat/font

    # Managed Homebrew packages.
    #
    # e.g.
    # - package_name
    # or
    # { name: package_name, state: package_state, install_options: [with-baz, enable-debug] }
    #
    # state choices: [head, latest, present, absent, linked, unlinked] (default: latest)
    # install_options: string or sequence (default: none)
    homebrew_packages:
      - readline
      - openssl
      - { name: openssl, state: linked, install_options: force }
      - wget
      - ansible
      - git
      - tig
      - hub
      - tmux
      - reattach-to-user-namespace
      - heroku-toolbelt
      - rbenv
      - ruby-build
      - the_silver_searcher
      - macvim
      - { name: macvim, install_options: [with-cscope, with-lua, override-system-vim]  }
      - zsh
      - zsh-completions
      - zsh-syntax-highlighting
      - ricty
      - { name: ricty, install_options: [powerline, vim-powerline] }

    # Tap external Homebrew Cask repositories.
    homebrew_cask_repositories:
      - caskroom/versions

    # Managed Homebrew Cask packages.
    #
    # e.g.
    # - package_name
    # or
    # { name: package_name, state: package_state }
    #
    # state choices: [present, absent, installed, uninstalled] (default: present)
    homebrew_cask_packages:
      - google-chrome
      - google-japanese-ime
      - iterm2
      - slack
      - vagrant
      - virtualbox
      - dash
      - skitch
      - menumeters
      - java
      - android-studio
      - pg-commander
      - sourcetree

  tasks:
    # Ricty
    - name: xquartz のインストール (for Ricty)
      homebrew_cask: name=xquartz
    - name: fontforge のインストール (for Ricty)
      homebrew: name=fontforge
    - name: Ricty のインストール
      homebrew: name=ricty
    - name: 生成されたフォントファイルをコピー
      shell: cp -f $(brew --cellar ricty)/*/share/fonts/Ricty*.ttf ~/Library/Fonts/
      args:
        creates: ~/Library/Fonts/Ricty-Bold.ttf
      notify: run fc-cache

  handlers:
    - name: run fc-cache
      shell: fc-cache -vf

```

### caskインストール先の設定

`cask`でインストールする際、ディレクトリがまちまちらしいので、以下の一行を`zshrc`とか`bash_profile`とかに入れておくと良いとのことです。

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

### 運用

最近はなにか新しいツールを入れるタイミングでymlファイルを弄って追加していってます。
定期的に`sh install.sh`を叩いてやればアップデートもされて安心です。

各種Pathの設定やvimrc, zshrc（zprezto）などはdotfileで管理していれば、ターミナルを立ち上げればもう以前の環境と同じです。dotfilesもクソ便利なので、みんなやろう。

これで心置きなくクリーンインストールを繰り返せますね！ビルドアンドスクラップ！

### 蛇足

と、言いたい所ですが、実際にはiTerm2の設定だったりキーボードの設定（CapsLockをCtrlに変えたりCmd+`でアプリケーション内での切り替えをしたり）がリセットされるので、個別のアプリケーション設定を予めdotfiles内に格納しておくなど、まだまだ手間ゼロとは言えません。

が、かなり手間は省けましたし、恐らくですがlinuxbrewを使ったりすればOSを変えても適応可能なProvisioningが構築できると思いますので、近いうちにトライしたいと思います。

Happy Mac Provisioning!