will and way

ただの自分用メモを人に伝える形式で書くことでわかりやすくまとめてるはずのブログ

続・Mac OSXの設定をAnsibleで9割以上自動化する

blog.matsuokah.jp

今年の1月に書いた記事では

  • Ansibleをインストールの自動化
  • Ansibleによるアプリのインストールや設定の自動化

の2つを行いました。

今回の記事では

  1. masによるアプリのインストール
  2. Ansibleのアップデート
    1. それに伴い、defaultsコマンドのv1系の実装を削除
  3. 終了後の通知
  4. その他あるべきディレクトリ構成にリファクタ

を、行いました。

1. masを使う

前回、できていなかったものが、AppStoreからアプリのインストール。

Macでの開発環境構築をできる限り自動化する。 - Qiita

という記事の中でmas-cliが紹介されていたので使ってみた。 mas-cliとはコマンドラインでAppStoreのアプリケーションをインストールできるようにしたアプリケーション。

  • 署名・審査を通過したアプリケーションソースなので安全
  • 自動的にアップデートされる

という2点の理由から、brew-caskよりもこちらのほうがなにかといい。

1. brewでmasをインストール

brewでインストールするアプリリストに追加

2. AppStoreのログイン情報を設定ファイルに記載

mas signin ${ID} "${PASSWORD}"

という形式でサインインしてから、インストールします。masのroleでは最初にsignoutし、signinしてからアプリのインストールを開始しています。

3. アプリのリストを記載

mas_applications:
  - {name: 'Slack', store_hash: 803453959}
  - {name: 'CCMenu', store_hash: 603117688}
  - {name: 'Apple Configurator 2', store_hash: 1037126344}

試しで3つだけアプリケーションのIDを列挙しました。 nameは使われないですが、hashだけだと何のアプリケーションかがわからなくなるので。

4. アップデート

自動アップデートを有効にしてれば、不要ですが

mas upgrade

で、AppStore経由でインストールしたアプリをすべてアップデートすることができます。

mas-cliを使う上でのTIPS/NOTICE

1. アプリのリストを取得する

もし、PCを乗り換えるならmasをインストールして下記のワンライナーを実行すれば、AppStore経由でインストールされているアプリ名とハッシュがgroup_varsに記載するべきフォーマットでリストされる

~/W/provisioning ❯❯❯ mas list | sed -e"s/\([0-9]*\)\ \(.*\)\ (.*/- {name: '\2', store_hash: \1\}/"
- {name: 'Apple Configurator 2', store_hash: 1037126344}
- {name: 'Xcode', store_hash: 497799835}
- {name: 'Word Writer', store_hash: 931198233}
- {name: 'Keynote', store_hash: 409183694}
- {name: 'iMovie', store_hash: 408981434}
- {name: 'CCMenu', store_hash: 603117688}
- {name: 'Evernote', store_hash: 406056744}
- {name: '1Password', store_hash: 443987910}
- {name: 'Slack', store_hash: 803453959}
- {name: 'Dash', store_hash: 449589707}
- {name: 'LINE', store_hash: 539883307}
- {name: 'GarageBand', store_hash: 682658836}
- {name: 'LadioCast', store_hash: 411213048}

2. CLI経由だとインストールできないケースがある

CCMenu

CCMenu

CCMenuというアプリケーションは何故か、AppStoreからGUIで操作しないとインストールできなかった

3. AppStoreよりもbrew caskのほうがアップデートが進んでるケースが有る。

Alfredはcaskだと最新の3系がインストールされます。AppStoreからDLすると2系になってしまいました。(2016/10/08現在)

2. 通知する

MESSAGE="Provisioning is successfull, please restart or re-login"
osascript -e "display notification \"${MESSAGE}\" with title \"osx-provisioing\""
say "${MESSAGE}'"

終わったあとこちらをフックしています。通知センターに通知して、sayコマンドで再起動を促すメッセージを喋らせてます。

f:id:matsuokah:20161008182332p:plain

いい感じだ〜

github.com