Macの開発環境構築を自動化する(2019年6月編)

 ツイート 1  シェア 0  Hatena 0

macOS Mojave

先日、Mac の OS をようやく Mojave にアップデートしました。私は年に 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 パッケージが並んでいます。ここに書けるパッケージの探し方は後述。


cask_args appdir: "/Applications"
brew "git"
brew "goenv"
brew "jq"
brew "openssl"
brew "pyenv"
brew "rbenv"
brew "terminal-notifier"
brew "tfenv"
brew "tmux"
brew "wget"
brew "zplug"
brew "zsh"
cask "alfred"
cask "amazon-music"
cask "appcleaner"
cask "docker"
cask "google-chrome"
cask "google-japanese-ime"
cask "intellij-idea"
cask "iterm2"
cask "karabiner-elements"
cask "keyboardcleantool"
cask "shiftit"
cask "skype"
cask "the-unarchiver"
cask "visual-studio-code"
mas "Be Focused Pro", id: 961632517
mas "Keynote", id: 409183694
mas "MindNode 6", id: 1289197285
mas "Slack", id: 803453959

AppStore にログインしておく

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

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

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


$ brew bundle

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

再起動

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

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

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

bootstrap.sh


# homebrew-bundle 
brew bundle

# 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 から探す例です。id 409183694 を Brewfile に記述します。


$ 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 にはこう書きます。


mas "Keynote", id: 409183694

おわりに

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

 ツイート 1  シェア 0  Hatena 0