開発にメインで使っている MacBook Pro がいつ壊れても良いように環境構築の 9 割程度を Anisble 化している。どんな感じにやっているのかをご紹介 + 自分用のメモとして書き下します。
Windows 環境も構築を自動化したいけど面倒でやっていない。Windows 自体は普段使い(だらだらネットを巡回)とかでは好きだけど、最近あまりその上で開発をゴリゴリやることはないので、ひとまず macOS について。
このあたりは完全に自動化できてないけどまあ 3 分で終わるので...
# homebrew のインストール /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" # Ansible のインストール brew install ansible # 環境構築用 Ansible の clone git clone ...... cd ......
brew install
, brew cask install
better touch tool
のインストールと設定sudoer
の設定bash
の設定git
の設定ssh_config
の設定homebrew
で管理
homebrew cask
で管理--- - name: brew update homebrew: update_homebrew: yes - name: brew install homebrew: name: "{{ item }}" state: present with_items: "{{ homebrew_packages }}" - name: brew install with options homebrew: name: "{{ item.name }}" state: present install_options: "{{ item.options }}" with_items: "{{ homebrew_packages_with_options }}" - name: add homebrew tap repos homebrew_tap: tap: "{{ item }}" state: present with_items: - caskroom/cask - caskroom/versions - name: brew cask install homebrew_cask: name: "{{ item }}" state: present with_items: "{{ homebrew_cask_packages }}" ignore_errors: yes # var file --- homebrew_packages: - ansible - awscli - bash-completion - binutils - boost - coreutils - ... homebrew_packages_with_options: - name: findutils options: with-default-names - name: grep options: with-default-names - name: gnu-sed options: with-default-names - name: gnu-tar options: with-default-names - name: gzip options: with-default-names - name: gawk options: with-default-names homebrew_cask_packages: - google-chrome - iterm2 - slack - xquartz - bettertouchtool - ...
--- - name: brew cask install atom homebrew_cask: name: atom state: present ignore_errors: yes when: ansible_os_family == 'Darwin' - name: apm login command: 'apm login --token {{ apm_token }}' changed_when: no - name: apm stars --install command: 'apm stars --install' changed_when: no
-- - name: brew install homebrew_cask: name: cmd-eikana state: present - name: create config file copy: src: io.github.imasanari.cmd-eikana.plist dest: "{{ user_home_dir }}/Library/Preferences/io.github.imasanari.cmd-eikana.plist"
--- - name: create .bttconfig.json template: src: .bttconfig.json.j2 dest: '{{ user_home_dir }}/.bttconfig.json' tags: config_btt
--- - name: config sudoers become: yes become_user: root lineinfile: path: /etc/sudoers state: present regexp: '^%admin\s+ALL' line: '%admin ALL = (ALL) NOPASSWD: ALL' validate: 'visudo -cf %s'
.bash_profile
とかを置いてる--- - homebrew: name: bash path: /usr/local/bin/ state: present when: ansible_os_family == 'Darwin' - name: check if exists bash on macOS command: /usr/local/bin/bash --version register: check_bash_version when: ansible_os_family == 'Darwin' changed_when: no - name: change shell become: yes command: 'chsh -s '/usr/local/bin/bash' {{ login_user_name }}' when: ansible_os_family == 'Darwin' and check_bash_version.rc == 0 - name: create .inputrc template: src: .inputrc.j2 dest: '{{ user_home_dir }}/.inputrc' - name: create .bash_alias template: src: .bash_alias.j2 dest: '{{ user_home_dir }}/.bash_alias' - name: create .bash_profile template: src: .bash_profile.j2 dest: '{{ user_home_dir }}/.bash_profile'
.gitconfig
の配置--- - name: create .gitconfig template: src: .gitconfig.j2 dest: '{{ user_home_dir }}/.gitconfig' - name: create .gitignore_global template: src: .gitignore_global.j2 dest: '{{ user_home_dir }}/.gitignore_global'
--- - name: create /etc/hosts become: yes template: src: hosts.j2 dest: /etc/hosts
--- - name: create ~/.ssh/config template: src: .ssh_config.j2 dest: '{{ user_home_dir }}/.ssh/config' mode: 0644
Host * UseKeychain yes AddKeysToAgent yes ServerAliveInterval 30 Host *.*.compute.amazonaws.com User ec2-user Host piyo-kuso HostName piyo-kuso ProxyCommand ssh -W %h:%p hoge-fuga
macOS のバージョンによって結構変わるかも。アップグレードする際は要注意。Sierra, Hight Sierra 間で動くもの、動かないものが別れるけど、両方で動いてるっぽいものを中心に掲載。自己責任で使ってください。いじる前にバックアップとったほうがいいよ(defaults read > ~/Desktop/defaults.plist
)。
--- - name: キーリピート検知待ち時間 osx_defaults: key: InitialKeyRepeat type: int value: 10 state: present - name: キーリピート間隔時間 osx_defaults: key: KeyRepeat type: int value: 1 state: present
- name: Dock autohide osx_defaults: domain: com.apple.dock key: autohide type: bool value: true state: present
- name: バッテリー残量設定 osx_defaults: domain: com.apple.menuextra.battery key: ShowPercent type: string value: YES state: present - name: 時刻表示設定 osx_defaults: domain: com.apple.menuextra.clock key: DateFormat type: string value: "M\\U6708d\\U65e5(EEE) H:mm:ss" state: present
- name: トラックパッド右クリックの有効化 osx_defaults: domain: com.apple.AppleMultitouchTrackpad key: TrackpadCornerSecondaryClick type: int value: 2 state: present - name: トラックパッドタップの有効化 osx_defaults: domain: com.apple.AppleMultitouchTrackpad key: Clicking type: int value: 1 state: present - name: ライブ変換の無効化 osx_defaults: domain: com.apple.inputmethod.Kotoeri key: JIMPrefLiveConversionKey type: int value: 0 state: present
他にも色々あるけど、好みの色が激しくなってきそうなのでこのあたりで...。
com.apple.Dock
に入ってるので以下のようなコマンドで邪魔な初期で Dock に設定されている諸々を一掃できる
defaults write com.apple.Dock persistent-apps -array
以下、みなさんのベストプラクティスをコメントする大喜利会場
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです