尋常でないもふもふ

a software engineer blog

Macの環境構築自動化 2016年10月版

概要

Mac の環境構築するときに大半の時間を占めるインストール作業を半自動化する系の話。

  • Homebrew - Mac用パッケージ管理ツール
  • Homebrew Cask - Homebrew を使ってソフトウェアを一括インストールするための拡張
  • Homebrew Bundle - 依存関係を Brewfile に書き出し/読み込みできるツール
  • mas-cli - App Store のアプリを一括インストール

macOS Sierra を入れるタイミングでクリーンインストールしたいので改めて整理した。

歴史的な流れ

  1. 2013年末〜2014年初夏にかけて homebrew-cask と homebrew-bundle による自動化が流行る
  2. 2014年7月に homebrew-bundle が Warning: brew bundle is unsupported と出て使えなくなる
  3. オワコンと叫んだり、シェルスクリプトに退化したり、血迷って Ansible 使う人が増える
  4. 2015年4月に homebrew-brewdler となって帰ってきた
  5. 2015年7月に mas-cli が産声をあげる
  6. 2016年初頭、brewdler は bundle という名前に戻った
  7. 世界に平和が訪れた

構成管理ツールのAnsible は仕事でつかってたけど、わざわざ Mac セットアップのために設定ファイルの書き方思い出したり、調べなおしたりして構築していくのは想像しただけで目眩がする。無駄な苦労を楽しめる人にはいいかもだけど、一般人はついていけない。

これから自動化はじめたい人

brew 自体はすでに入ってるなら tap で homebrew-bundle を使えるようにする

$ brew tap Homebrew/bundle

App Store 経由でインストールしたアプリも管理したいので mas-cli もいれる

$ brew install mas

dump で現在インストールされているパッケージを Brewfile として書き出すことができる

$ brew bundle dump 

ただし、100%全部は書き出せないようなので、/Applications フォルダとにらめっこしながら漏れがないか確認して Brewfile に手動で追記していく。

tap 'caskroom/cask'
tap 'homebrew/bundle'
tap 'homebrew/core'
brew 'go'
brew 'mas'
brew 'rbenv'
cask 'atom'
cask 'docker-toolbox'
cask 'google-chrome'
cask 'google-drive'
cask 'google-japanese-ime'
mas 'Alfred (1.2)', id: 405843582
mas 'Slack (2.0.3)', id: 803453959
mas 'Xcode (8.0)', id: 497799835

brew search chrome とか brew search sourcetree とかすれば記述すべき homebrew-cask 上の正式名称がわかる。AppStore のアプリの場合は、mas list するか、AppStore のアプリのページのリンクをコピーすれば URL に id が含まれてるのでわかる。
完成した Brewfile は自分の GitHub リポジトリの dotfiles にでも置いておけばいい。 dotfiles/Brewfile at master · jnst/dotfiles · GitHub

Mac で環境構築する手順

新品の MacBook を買ったりクリーンインストールしたら、とりあえず Homebrew をインストールする。次に Safari から自分の GitHub リポジトリにアクセスしてクローンなりコピペなりして Brewfile を持ってくる。Brewfile が存在するディレクトリに移動し brew bundle も使えるようにして実行する。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ git clone git@github.com:jnst/dotfiles.git
$ cd dotfiles
$ brew tap Homebrew/bundle
$ brew bundle

あとはインストールを待つだけ。

最近の homebrew-cask

  • デフォルトで ~/Applications ではなく /Applications にインストールされる
  • パッケージのインストール先が /opt/homebrew-cask/Caskroom から /usr/local/Caskroom に変わった

メンテナンス作業

  • TODO:
    • brew bundle dump --force
    • brew bundle cleanup
    • brew bundle check