Macの開発環境構築を自動化する 2019年夏版

2019年6月21日

私は年に 1 回、自宅と職場の 2 台の Mac をクリーンインストールでアップデートするのですが、開発環境の構築をある程度自動化しています。来年のために手順を残しておくので、参考にどうぞ。

目次

  1. これまで
  2. 事前準備
  3. Brewfile を作成する
  4. AppStore にログインしておく
  5. パッケージをインストール
  6. 再起動
  7. パッケージのインストール後
  8. Brewfile に書けるパッケージの探し方
  9. おわりに

これまで

自動化を始めたのは多分 2013 年とかその頃。使っていたツールは Brewfile に始まり、Ansible を経て、去年は rcmdnk/homebrew-file を使っていました。Ansible 時代が一番長かったと思います。2019 年のクリーンインストールの時期になり、セットアップはどうしようかと調べたところ、Homebrew/homebrew-bundle が Homebrew と連携していてすぐ使えて、GitHub のスター数も多く、やりたいこともできそうだったので今年はこれに決めました。

事前準備

Homebrew のインストール手順に従ってインストール。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Brewfile を作成する

ここからは Homebrew/homebrew-bundle Usage の通り進めればよいのですが、簡単に解説を。

ホームティレクトリに Brewfile を作成します。

touch Brewfile

Brewfile にインストールしたいパッケージを書いていきます。私の Brewfile はこんな感じ。brew, cask, mas パッケージが並んでいます。ここに書けるパッケージの探し方は後述。

tap "homebrew/cask"
tap "aws/tap"           # aws-sam-cli
tap "hashicorp/tap"     # packer
tap "weaveworks/tap"    # eksctl
cask_args appdir: "/Applications"

brew "aws-sam-cli"
brew "velero"
brew "eksctl"
brew "grep", link: true
brew "helm"
brew "jq"
brew "kubectl", link: true
brew "kustomize"
brew "mas"
brew "mysql-client", link: true
brew "packer"
brew "tcptraceroute"
brew "tfenv"
brew "tree"

cask "1password"
cask "alfred"
cask "amazon-music"
cask "appcleaner"
cask "docker"
cask "firefox"
cask "google-chrome"
cask "google-japanese-ime"
cask "intellij-idea"
cask "iterm2"
cask "karabiner-elements"
cask "keyboardcleantool"
cask "mysqlworkbench"
cask "rectangle"
cask "visual-studio-code"

mas "Be Focused Pro", id: 961632517
mas "Keynote", id: 409183694
mas "Slack", id: 803453959
mas "The Unarchiver", id: 425424353

AppStore にログインしておく

Brewfile に mas のコマンドを書いている場合、先にAppStore にログインしておきます。ログインしておかないと、このあとの mas パッケージのインストールで失敗します。

パッケージをインストール

brew bundle コマンドで Brewfile に書いたパッケージをインストールできます。

brew bundle

コマンドを実行するとインストールが始まるので、しばらく待ちます。アプリケーションによっては、途中でパスワードを求められて止まったりするのでたまにターミナルの状況を確認しましょう。

再起動

インストールが終わったら、私は一回再起動しています。これはインストールするアプリケーションによると思います。

パッケージのインストール後

あとは、各種設定ファイルを配置したり、Brewfile でインストールできないパッケージを入れたりします。私はここを簡単なシェルスクリプトにしてます。nvm の部分を抜粋するとこんな感じ。

bootstrap.sh

# homebrew-bundle
brew bundle --file ~/Brewfile

# nvm
if [ ! -e "$HOME/.nvm" ]; then
  # install nvm
  export NVM_DIR="$HOME/.nvm" && (
  git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
  cd "$NVM_DIR"
  git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
  ) && \. "$NVM_DIR/nvm.sh"
else
  # update nvm
  (
  cd "$NVM_DIR"
  git fetch --tags origin
  git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
  ) && \. "$NVM_DIR/nvm.sh"
fi

パッケージを更新したい場合は bootstrap.sh を実行するだけで良いように、適度に冪等性をもたせます。

Brewfile に書けるパッケージの探し方

Brewfile の brew, cask, mas のパッケージの探し方を解説します。

brew コマンドでインストールするパッケージの探し方

brew のパッケージは brew search コマンドで探すことができます。wget コマンドを探す例です。brew パッケージは、以下のように Formulae という部分に出てきます。

brew search wget
==> Formulae
wget    wgetpaste

Brewfile にはこう書きます。

brew "wget"

brew cask コマンドでインストールするパッケージの探し方

cask のパッケージも brew search コマンドで探すことができます。google-chrome を探す例です。cask パッケージは、以下のように Casks という部分に出てきます。

brew search google-chrome
==> Casks
google-chrome    homebrew/cask-versions/google-chrome-beta    homebrew/cask-versions/google-chrome-canary  homebrew/cask-versions/google-chrome-dev

Brewfile にはこう書きます

cask "google-chrome"

AppStore からインストールするパッケージの探し方

AppStore からインストールするパッケージは、mas search コマンドで探すことができます。mas-cli/mas を裏で使っているとのことですので、検索したい場合は先に brew install mas して mas コマンドを使えるようにしておきます。なお、mas コマンドは、Brewfile に mas コマンドの記述があると自動でインストールされます。

AppStore にログインしていないとコマンド実行時にエラーになるので、事前にログインしておきましょう。

keynote を AppStore から探す例です。

mas search keynote
409183694  Keynote                         (9.0.2)
582635628  Toolbox for Keynote -Templates  (3.7.4)
555935825  DesiGN Templates for Keynote    (3.0.2)
692032006  Themes for Keynote              (3.1)
...

Brewfile に、検索して表示された id 409183694 を記述します。

mas "Keynote", id: 409183694

おわりに

Mac の開発環境構築を自動化すると、2 台目以降の Mac のセットアップが効率化されるだけでなく、過去にどんなアプリケーションを入れていたかのメモ代わりになります。自動化スクリプトをメンテナンスし続けるのはそれなりに大変ですが、今回紹介した Homebrew/homebrew-bundle とシェルスクリプトの組み合わせは、小回りも効き、メンテナンスもしやすくオススメです。

キーボード設定

アプリケーションを設定した後にいつもやっているキーボードの設定です。

MacBookの英語配列でHHKBを使う私のキーボード設定

MacBook Pro の英語配列で Happy Hacking Keyboard Professional の英語配列 ...

続きを見る

-技術ブログ
-