Posted at

Homebrew + AnsibleでHappy Mac Provisioning

More than 3 years have passed since last update.

最近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

Mac の開発環境構築を自動化する (2015 年初旬編) - t-wadaのブログ

からコードをいただきました。素敵なナレッジありがとう。

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



  1. 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!