技術ブログ

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

2019年6月21日

macOS Mojave

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

この記事の初版を書いたのは 2019 年 6 月ですが、2020 年 6 月にクリーンインストールをしたときにも全く同じ方法で自動化ができましたので、記事のタイトルを 2020 年版に変更しました。

目次

  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 のスター数も多く、やりたいこともできそうだったのでこれに決めました。翌年の 2020 年も同じ方法で自動化を続けています。

事前準備

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 パッケージが並んでいます。ここに書けるパッケージの探し方は後述。

Brewfile

cask_args appdir: "/Applications"

tap "heroku/brew"

brew "heroku"
brew "jq"
brew "mas"
brew "mysql-client"
brew "tcptraceroute"
brew "terminal-notifier"
brew "tfenv"
brew "tmux"
brew "tree"
brew "zplug"

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

mas "Be Focused Pro", id: 961632517
mas "Keynote", id: 409183694
mas "Skitch", id: 425955336
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 から探す例です。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 とシェルスクリプトの組み合わせは、小回りも効き、メンテナンスもしやすくオススメです。

キーボード設定

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

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

MacBook Pro の英語配列で Happy Hacking Keyboard Professional の英語配列を使う私のキーボード周りの設定を紹介します。HHKB 英語配列を使う方は参考にど ...

-技術ブログ
-

© 2020 karakaram-blog