はじめに
Leverages Advent Calendar20日目を飾ります、SREの @t-kusakabe です。
毎日yamlを書いてたりします。
構成管理について
レバレジーズではansibleを使って構成管理をしています。
インフラ未経験だった僕は、それまで名前こそ知っていましたがまったく使ったことがありませんでした。
IaC。素晴らしいですね。
ということで今回は覚えたてのansibleを使ってみたいと思います!
dotfile
皆さんdotfile育ててますか?
普段から自分が愛用してるツールは自分用にカスタマイズして使うことで生産性が向上します。
しかし定期的にメンテナンスをしてあげないとすぐに冗長になってしまいますよね。
とりあえず適当にファイル作ってみたりvimrcとかに追記しまくったりなど。。。
僕のdotfileも2年ほど育ててきましたがかなり扱いづらい感じになっていました。。。
.
├── emacs
├── emacs.d
│ └── init.el
├── gitconfig
├── myclirc
├── nvim
│ ├── ctags
│ ├── init.vim
│ └── userautoload
│ ├── basic.vim
│ ├── plug.vim
│ └── statusline.vim
├── plantuml
├── sh
│ ├── apt.sh
│ ├── ather.sh
│ ├── brew.sh
│ └── symbolic-link.sh
├── tigrc
├── tmux.conf
├── tmux.conf.debian
├── tmux.conf.osx
├── vscode
│ ├── keybindings.json
│ └── settings.json
└── zshrc
sh
以下にShellScriptを置いてShell芸で各種ファイルをばら撒いたりしていました。
中には何をしているのかわからないものがあったり、手作業でなんとかしているものもあって自動化からは程遠い状態でした。。。
また、PCを買い替えたりクリーンインストールをする度にどうやって環境作っていたっけ?と思いながら設定していました。
非常に効率が悪いですし不便ですね。つらい。。。
ansibleでどうやった?
というわけでちょっと早めの大掃除も兼ねてdotfileをansible化してみました。
ひとまず以下のような形に落ち着いています。
.
├── ansible.cnf
├── inventories
├── roles
│ ├── brew
│ ├── common
│ ├── desktop_app
│ ├── emacs
│ ├── git
│ ├── ideavim
│ ├── macos
│ ├── mycli
│ ├── npm
│ ├── nvim
│ ├── plantuml
│ ├── tig
│ ├── tmux
│ ├── vscode
│ └── zsh
└── site.yml
各Taskでしていることは単純で、Installする必要があるものはInstallする。
その後にsymlinkを貼る、といったことくらいしかしていないです。
Vim周りだけみてみます。
roles/nvim/files
├── ctags
├── init.vim
└── userautoload
├── basic.vim
├── plug.vim
└── statusline.vim
大体こんな感じです(ややこしいので細かいのは省きましたw)
basic.vim
にキーバインド等の設定、 plug.vim
にプラグイン関係、 statusline.vim
にはステータスラインに関する設定みたいな感じに分けてファイルを置いています。
Taskの中身はこんな感じです。
# 必要なものをInstallする
- name: Install vim-plug
get_url:
url: "{{ vim_plug_url }}"
dest: $HOME/.config/nvim/autoload/plug.vim
# 設定ファイルばら撒く
- name: Create symbolic link init.vim
file:
src: "{{ansible_env.PWD}}/roles/nvim/files/init.vim"
dest: $HOME/.config/nvim/init.vim
state: link
たったこれだけでもVimを使い始めるところまでを自動でしてくれるのでとても便利です!
HomebrewでInstallしているものなどは、YAMLで一覧に出来るのでとても便利でした。(別にansibleじゃななくても出来ますが。。。)
brew install
しているもの、 brew cask install
しているもので分けたりすることで管理しやすくしています。
└── defaults
└── main
├── brew.yml
└── brew_cask.yml
それぞれRole単位でディレクトリを分けて管理出来るのでとても使いやすくなりました。
実際実行するときは ansible-playbook -i inventories site.yml
とするだけで、Homebrewで普段使っているものをInstallしてきて、VimやZsh、Tigなどの設定ファイルを自動で配置出来るようになりました。
最後に
いかがでしたでしょうか?
dotfileをansibleで管理することで自分のPCがどういう風に構成されているのかがわかるようになりました。
またいつでも自分のPCを気軽にCleanInstallすることも出来るようになりました。
また拡張する時もRoleごとに別れているので見通しがよくなったと思っています。
是非皆さんも年末の大掃除を兼ねてdotfileの整理をして気持ちよく新年を迎えていただければなと思います。
(クリスマスよりお正月が楽しみ)
明日は @kilig さんです!楽しみ!