macのクリーンインストール @ansibleで自動インスコ付き【2019/09版】

雑なメモ書きですが約1.5年ぶりにクリーンインストールしたので作業メモです。

クリーンインストールメモ

参考サイト

qiita.com

前回記事【2018/01版】

yasuhallabo.hatenadiary.org
※ちょっとバグがあったので今回直しています

OSのクリーンアップ

  • 必要なファイル等は外付けHDDなどに退避する。

今回は新規のMBPにインストールしたのでディスク消去はしていない

  • 電源起動時に、command + Rを押しっぱなしにする
  • OS X ユーティリティからディスクユーティリティを選択
  • ディスクを消去する
  • OS X ユーティリティからOS Xを再インストールするを選択
  • ソフトウェア使用許諾契約に同意する
  • インストール先のディスクを選択してインストール
  • AppleIDとパスワードを入力
  • OSダウンロードが始まり、その後インストールが開始されるので放置

  • 今は情報の転送はしないを選択
  • Macを探すは許可する
  • コンピュータアカウントを作成(iCloudアカウントは使わなかった)
  • FileVaultディスク暗号化を有効にする
  • 診断と使用状況はチェックした
  • クリーンインストールが終わったらApp storeからシステムアップデートをかける。

最新のOSをインストール

  • 新規で購入したMBPなのにHighSierraが入っていなかったのでインストール

Xcodeをインストール

  • 時間がかかるので最初にやる。App storeからXcodeをインストール。
  • インストールが終わったらXcodeを起動して規約に同意する
  • Xcodeのライセンス認証。
  • sudo xcodebuild -license

Dock

  • サイズを小さくする
  • 拡大にチェック。1/4ぐらい
  • 画面上の位置を左に変える
  • 以下をDockから消去
    Siri、Safari、連作先、カレンダー、メモ、リマインダー、マップ、写真、メッセージ、FaceTime
    Pages、Numbers

セキュリティとプライバシー

  • スリープとスクリーンセーバの解除を15分後に
  • Apple WatchでこのMacのロックを解除できるようにする → チェック入れても動かなかったので未設定

キーボード

  • キーのリピートを速く(最速)
  • リピート入力時間を短く(最短)

トラックパッド

  • タップでクリックにチェック
  • 軌跡の速さを速くする(最速)

サウンド

  • メニューバーに音量を表示にチェック

iCloud

  • iCloud、キーチェーン、Macを探すにチェックのみ

共有

  • コンピュータ名をかわいいのに変える

日付のオプション

  • 曜日を表示
  • 日付を表示

表示オプション

  • デスクトップを右クリック → 表示オプションを表示
  • アイコンサイズ 16x16
  • ラベルの位置 右側
  • 表示順序 名前

Homebrewをインストールする

Homebrewのインストール

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

anacondaをインストールする
brew install python  3系のanaconda入れたいので却下
brew install ansible pythonのフォルダにインストールしようとするので却下

anacondaは以下からダウンロード
https://www.anaconda.com/download/#macos

chmod 755 ./Anaconda3-2019.07-MacOSX-x86_64.sh
./Anaconda3-2019.07-MacOSX-x86_64.sh

確認

Python -V
Python 3.7.3

ansibleインストール

brew install ansible

Ansibleの実行

プロビジョニング用のディレクトリ作成。

mkdir .macbook-provisioning
cd .macbook-provisioning/

ansible用のinventoryファイル作成

echo 'localhost' > hosts

テキストを開き、以下をlocalhost.ymlとして保存

- hosts: localhost
  connection: local
  gather_facts: no
  sudo: no
  vars:
    homebrew_taps:
      - caskroom/cask
      - homebrew/services
    homebrew_packages:
      - { name: readline }
      - { name: openssl }
      - { name: openssl, state: linked, install_options: force }
      - { name: git }
      - { name: wget }
      - { name: curl }
      - { name: go }
      - { name: rbenv }
      - { name: ruby-build }
      - { name: vim }
      - { name: mysql }
      - { name: redis }
      - { name: p7zip}
      - { name: cmake}
      - { name: swig}
    homebrew_enabled_services:
      - mysql
      # - redis # redisは今後自動起動に入れない
    homebrew_cask_packages:
      - { name: iterm2 }
      - { name: firefox }
      - { name: google-chrome }
      - { name: google-japanese-ime }
      - { name: atom }
      - { name: skype }
      - { name: slack }
      - { name: vagrant }
      - { name: virtualbox }
      - { name: phpstorm }
      - { name: pycharm }
      - { name: datagrip }
      - { name: sequel-pro }
      - { name: postman }
      - { name: cyberduck }
      - { name: gimp }
      - { name: marp }
      - { name: vmware-fusion }
      - { name: sourcetree }
      - { name: docker }
      - { name: bettertouchtool }
      - { name: firefox }

  tasks:
    - name: homebrew の tap リポジトリを追加
      homebrew_tap: tap={{ item }} state=present
      with_items: "{{ homebrew_taps }}"

    - name: homebrew update確認
      homebrew: update_homebrew=yes

    # brew
    - name: brew packageのインストール
      homebrew: >
        name={{ item.name }}
        state={{ item.state | default('latest') }}
        install_options={{
          item.install_options | default() | join(',')
          if item.install_options is not string
          else item.install_options
        }}
      with_items: "{{ homebrew_packages }}"
      register: brew_result
    - name: brew パッケージの情報保存先ディレクトリを作成
      file: path=brew_info state=directory
    - name: brew パッケージの情報を保存
      shell: brew info {{ item }} > brew_info/{{ item }}
      with_items: "{{ brew_result.results | selectattr('changed') | map(attribute='item') | map(attribute='name') | list }}"

    # brew services
    - name: Get currently available brew services.
      shell: "brew services list | sed '1 d' | cut -d ' ' -f 1"
      register: brew_services

    - name: Enable brew services.
      command: "brew services start {{ item }}"
      with_items: "{{ homebrew_enabled_services }}"
      when: "'{{ item }}' in brew_services.stdout_lines"

    # cask
    - name: cask パッケージをインストール
      homebrew_cask: >
        name={{ item.name }}
        state={{ item.state | default('installed') }}
      with_items: "{{ homebrew_cask_packages }}"
      register: cask_result
    - name: cask パッケージの情報保存先ディレクトリを作成
      file: path=cask_info state=directory
    - name: cask パッケージの情報を保存
      shell: brew cask info {{ item }} > cask_info/{{ item }}
      with_items: "{{ cask_result.results | selectattr('changed') | map(attribute='item') | map(attribute='name') | list }}"

  handlers:
    - name: run fc-cache
      shell: fc-cache -vf

Homebrew Caskオプションを設定

echo 'export HOMEBREW_CASK_OPTS="--appdir=/Applications"' >> ~/.bash_profile
source ~/.bash_profile

作成したPlaybookを実行する

ansible-playbook -i hosts -vv localhost.yml -e 'ansible_python_interpreter=/Users/<ユーザー名>/anaconda3/bin/python'

以上で概ねアプリはインストールできる。

インストール中の注意

インストール後

  • Dockerは起動しないとパスが通らないので一度起動してください。
    一度起動すればdocker-composeもパスが通ります。
    起動後はコンテナに割り当てるメモリ容量を上げてください。Defaultの設定は2GBなのでメモリ食うコンテナは起動失敗します。
  • slackはアプリ起動してログインし直す。
  • Mac Mailは各Gmailアカウントでログインし直せば振り分けも自動で設定されます。
    (私はメールの振り分けをGmail上で設定しているため)
  • FirefoxFirefox syncを使って同期しました。

動作確認環境

MacBookPro 2019 Mid 15インチ (Mojave)で動作確認済み
(CPU : 8core x 2.3GHz Intel Core i9、Mem : 16GB、SSD : 512GB)

感想

バックアップが一番めんどくさいですね。
不要なものを削除しつつ、7z で固めて保存しているので手間が掛かります。
タイムマシンとかで自動化すると便利なのでしょうけど、仕事のファイルは消さなければいけないものも結構あるので、この機会に手動でお掃除しています。