Ansible＆Homebrew＆homesickでMac開発環境構築

##はじめに
MacBook Proを新しく購入したので、これを機に開発環境の整備と構築自動化についてまとめました。

##環境
MacOSX Yosemite 10.10.3

##とても参考にした記事
[Mac の開発環境構築を自動化する (2015 年初旬編) - t-wadaのブログ](http://t-wada.hatenablog.jp/entry/mac-provisioning-by-ansible)
[HomebrewとAnsibleでMacの開発環境構築を自動化する | mawatari.jp](http://mawatari.jp/archives/mac-provisioning-by-homebrew-and-ansible)
[GitHub - homesick を使って dotfiles を管理する！ - Qiita](http://qiita.com/ktz47/items/650ff995e6906bdecc17)
[GitHub と homesick を使って複数 Mac 間で dotfiles を同期する ｜ Developers.IO](http://dev.classmethod.jp/etc/github-homesick-dotfiles/)

##事前インストールもろもろ
+ XCodeインストール(Mac App Store)
+ XCode license同意　`sudo xcodebuild -license `
+ Xcode CommandLineToolインストール　`xcode-select --install`

+ Homebrewインストール　`ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
+ brew環境整備

```
brew doctor
brew update
```

+ Ansibleインストール 

```
brew install python
brew install ansible
```

以上で、必要なもろもろのインストール等が完了ですm(_ _)m

##自動化準備

+ 作業ディレクトリ作成

```
cd ~
mkdir .macbook-provisioning
cd .macbook-provisioning/
```

+ inventoryファイル作成　`echo 'localhost' > hosts`

+ playbookファイル作成
localhost.ymlにAnsibleで実行させるプロビジョニング内容を記述。
https://github.com/massa142/mac-provisioning

+ Homebrew Caskオプションの設定
*詳しい説明は[HomebrewとAnsibleでMacの開発環境構築を自動化する | mawatari.jp](http://mawatari.jp/archives/mac-provisioning-by-homebrew-and-ansible)でされています。

```
echo 'export HOMEBREW_CASK_OPTS="--appdir=/Applications"' >> ~/.bash_profile
source ~/.bash_profile
```

これで準備OK！(´-ω-｀)

##自動化開始
+ プロビジョニング実行！　`ansible-playbook -i hosts -vv localhost.yml`

+ ↑でインストールされたhomesickを用いて、githubで管理しているdotfilesを適用
https://github.com/massa142/dotfiles

```
sudo homesick clone massa142/dotfiles
cd ~
homesick symlink dotfiles 
```

環境構築完了です╭( ･ㅂ･)و ̑̑ ｸﾞｯ !

##ちなみに
今回作成したlocalhost.ymlはこんな感じになりました。

```YAML:localhost.yml
- hosts: localhost
  connection: local
  gather_facts: no
  sudo: no
  vars:
    homebrew_taps:
      - caskroom/cask
      - motemen/ghq
      - homebrew/php
      - sanemat/font
      
    homebrew_packages:
      - { name: readline }
      - { name: openssl }
      - { name: openssl, state: linked, install_options: force }
      - { name: python }
      - { name: python3 }
      - { name: ansible }
      - { name: heroku-toolbelt }
      - { name: git }
      - { name: hub }
      - { name: zsh, install_options: disable-etcdir }
      - { name: zsh-completions }
      - { name: wget }
      - { name: curl }
      - { name: nkf }
      - { name: peco }
      - { name: rbenv }
      - { name: ruby-build }
      - { name: mysql }
      - { name: sqlite }
      - { name: redis }
      - { name: imagemagick }
#      - { name: maven }
      - { name: macvim, options: 'override-system-vim', 'with-lua', 'with-cscope' }
      - { name: ghq }
      - { name: php56 }
      - { name: php56-xdebug }
      - { name: phpenv }
      - { name: automake }
      - { name: pkg-config }

    homebrew_cask_packages:
      - { name: adobe-reader }
      - { name: alfred }
      - { name: android-studio }
      - { name: appcleaner }
      - { name: base }
      - { name: cyberduck }
      - { name: coteditor }
      - { name: duet }
      - { name: evernote }
      - { name: dash }
      - { name: dropbox }
      - { name: firefox }
      - { name: fluid }
      - { name: flux }
      - { name: genymotion }
      - { name: github }
      - { name: google-chrome }
      - { name: google-japanese-ime }
      - { name: gyazo }
      - { name: hipchat }
#      - { name: hoster }
      - { name: intellij-idea }
      - { name: iterm2 }
      - { name: java }
      - { name: karabiner }
      - { name: kindle }
      - { name: kobito }
      - { name: licecap }
      - { name: mysqlworkbench }
      - { name: pycharm }
      - { name: seil }
      - { name: sequel-pro }
      - { name: skype }
      - { name: slack }
      - { name: sourcetree }
      - { name: sublime-text }
      - { name: seil }
      - { name: xtrafinder }
      - { name: vagrant }
      - { name: virtualbox }
      - { name: 1password }
    gem_packages:
      - { name: homesick }

  tasks:
    - name: homebrew の tap リポジトリを追加
      homebrew_tap: tap={{ item }} state=present
      with_items: homebrew_taps

    - name: homebrew をアップデート
      homebrew: update_homebrew=yes

    # brew
    - name: brew パッケージをインストール
      homebrew: >
        name={{ item.name }}
        state={{ item.state | default('latest') }}
        install_options={{
          item.install_options | default() | join(',')
          if item.install_options is not string
          else item.install_options
        }}
      with_items: homebrew_packages
      register: brew_result
    - name: brew パッケージの情報保存先ディレクトリを作成
      file: path=brew_info state=directory
    - name: brew パッケージの情報を保存
      shell: brew info {{ item }} > brew_info/{{ item }}
      with_items: brew_result.results | selectattr('changed') | map(attribute='item') | map(attribute='name') | list

    # cask
    - name: homebrew-cask のインストール
      homebrew: name=brew-cask state=latest
    - name: cask パッケージをインストール
      homebrew_cask: name={{ item.name }} state={{ item.state|default('installed') }}
      with_items: homebrew_cask_packages
      register: cask_result
    - name: cask パッケージの情報保存先ディレクトリを作成
      file: path=cask_info state=directory
    - name: cask パッケージの情報を保存
      shell: brew cask info {{ item }} > cask_info/{{ item }}
      with_items: cask_result.results | selectattr('changed') | map(attribute='item') | map(attribute='name') | list

    # gem
    - name: gem パッケージのインストール
      gem: name={{ item.name }} state={{ item.state | default('latest') }}
      with_items: gem_packages
    
    # nodebrew
    - name: nodebrew のインストール
      shell: curl -L git.io/nodebrew | perl - setup

    # oh-my-zsh
    - name: oh-my-zsh のインストール
      shell: curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
      args:
        creates: ~/.oh-my-zsh/
    
    # 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
    
    # vim-neobundle
    - name: mkdir vim-neobundle dir
      file: path=~/.vim/bundle state=directory
      notify: install neobundle
  
  handlers:
    - name: run fc-cache
      shell: fc-cache -vf
    - name: install neobundle
      command: git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
```