AnsibleでMac環境構築するテンプレートつくった

2016年くらい(?)に流行った、Macの開発環境構築をAnsibleで自動化するお話。

新しいMacを手に入れたときにオレオレ環境を再現する用途がほとんどだと思います。

クラウドにインスタンスを立ててリモート開発環境で快適に。 というのが主流になりつつある昨今需要は減っているかもしれません。 それでも、

というのは(たぶん)起こっているはず。

そんなお困りごとを解決できればいいなと思い、テンプレートを作成しました。
基本的にはメンテするのは一つのymlファイルだけでよい作りになっています。

※ 今回「全部シェルでええやん」はご勘弁ください。。。

できるもの

https://github.com/kohbis/mac-ansible/tree/template
"説明トカイラナイヨ!"という方は、こちらだけお収めください。

Ansibleとは

参考

Ansibleをはじめる人に。
Ansible実践入門

構成

今回は最小限の構成で、そこからカスタマイズできるテンプレートにしています。
エディタはVSCodeとVimを対象にしていますが、基本は変わらないのでAtom等もテンプレートを参考にしていただければと思います。

.
├── README.md
├── ansible.cfg
├── group_vars
│ └── localhost.yml #メンテナンス対象
├── inventory
│ └── localhost
├── localhost.yml #playbook
└── roles
├── dotfiles
│ ├── tasks
│ │ └── main.yml
│ └── template
│ ├── template.bash_profile #必要であれば編集
│ ├── template.bashrc #必要であれば編集
│ └── template.vimrc #必要であれば編集
├── homebrew
│ └── tasks
│ └── main.yml
├── homebrew_cask
│ └── tasks
│ └── main.yml
└── vscode
  ├── tasks
  │ └── main.yml
  └── templates
  ├── keybindings.json #必要であれば編集
└── settings.json #必要であれば編集

作業は

だけです。 アプリによってパスワードが必要になったりするので完全な自動化ができないのが何とも言えないところですね。
「できるよ!!」という方いらっしゃいましたらご教授いただければありがたいです。

$ curl -O https://raw.githubusercontent.com/kohbis/mac-ansible/template/setting.sh
$ chmod 755 ./setting.sh
$ sh ./setting.sh
#!/bin/bash

ANSIBLE_PATH=~/workspace/settings/mac-ansible

## command line tools
xcode-select --install

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

## install ansible
brew install ansible

## clone repo
git clone -b template https://github.com/kohbis/mac-ansible.git ${ANSIBLE_PATH}

## ansible
cd ${ANSIBLE_PATH}
ansible-playbook -i inventory/localhost localhost.yml # --tags "タグ名" 指定可能

ansible.cfg

[defaults]
inventory = ./inventory

localhost.yml

- hosts: localhost
connection: local
gather_facts: no
become: no
roles:
- homebrew
- homebrew_cask
- dotfiles
- vscode

inventory

[localhost]
127.0.0.1

group_vars

homebrew_taps:
- homebrew/cask
- homebrew/core
homebrew_packages:
- name: ansible
- name: awscli
## 中略 ##
- name: vim
- name: wget
homebrew_cask_packages:
- name: appcleaner
- name: cyberduck
## 中略 ##
- name: station
- name: visual-studio-code
dot_files:
- .bash_profile
- .bashrc
- .vimrc
code_extensions:
- vscode-icons-team.vscode-icons

できるだけ削ったつもりですが、それでも多くなってしまいました。。。 今使用しているMacからリストを作りたい場合は、こちらのコマンドをご利用ください。 (dot_filesはよしなに)

$ echo "homebrew_taps:" && brew tap | awk '{print "  - "$1}'
$ echo "homebrew_packages:" && brew list | awk '{print " - name: "$1}'
$ echo "homebrew_cask_packages:" && brew cask list | awk '{print " - name: "$1}'
$ echo "code_extensions:" && code --list-extensions | awk '{print " - "$1}'

roles

homebrew

- block:

- name: homebrew update
homebrew:
update_homebrew: yes

- name: homebrew tap
homebrew_tap:
name: ''
state: present
with_items: ''

- name: homebrew packages install
homebrew:
name: ''
state: ''
with_items: ''

tags:
- homebrew

homebrew_cask

- block:

- name: homebrew cask packages install
homebrew_cask: name= state=installed
environment:
HOMEBREW_CASK_OPTS: "--appdir=/Applications"
with_items: ''

tags:
- homebrew_cask

dotfiles

- block:

########
# copy #
########
- name: copy dotfiles
template:
src: template
dest: ~/
with_items: ''

#################
# symbolic link #
#################
# - name: checkout dotfiles
# git:
# repo: https://github.com/{your_repository}/dotfiles.git
# dest: ~/dotfiles

# - name: create symlinks
# file:
# src: ~/dotfiles/
# dest: ~/
# state: link
# force: yes
# with_items: ''

tags:
- dotfiles
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# alias ls='ls -G'
" set number

vscode

- block:

- name: visual studio code library directory
file:
path="~/Library/Application Support/Code/User"
state=directory

- name: visual studio code basic setting
template:
src: settings.json
dest: "~/Library/Application Support/Code/User"
mode: 0644

- name: visual studio code keybindings
template:
src: keybindings.json
dest: "~/Library/Application Support/Code/User"
mode: 0644

- name: visual studio code install extension
raw: "code --install-extension "
with_items: ''

tags:
- vscode
{
// "extensions.ignoreRecommendations": true,
// "editor.minimap.enabled": false,
}
[
// { "key": "cmd+shift+k", "command": "workbench.action.terminal.focusNext" },
// { "key": "cmd+shift+j", "command": "workbench.action.terminal.focusPrevious" },
]

最後に

本投稿では紹介していないけれど、できることはまだまだあります。 GitHubで mac-ansible 等で検索すれば、先人たちの恩恵を受けられます。 https://github.com/search?q=mac-ansible

mas-cliでMacAppStoreのアプリをインストールすることも可能です。

一応筆者の ansible-plyabook のURLを貼っておきます。 https://github.com/kohbis/mac-ansible (完全自分用でmasterを更新しまくっているのでご参考までに)

新しいMacを渡されて、ある程度のセットアップまではできるのは本当にありがたいですね。

結局みんな好きずきにカスタマイズするでしょうけど笑。

← Blog