16
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LeveragesAdvent Calendar 2019

Day 20

構成管理を覚えた新卒SREがdotfileを自動化させる

Last updated at Posted at 2019-12-20

はじめに

Leverages Advent Calendar20日目を飾ります、SREの @t-kusakabe です。
毎日yamlを書いてたりします。

構成管理について

レバレジーズではansibleを使って構成管理をしています。
インフラ未経験だった僕は、それまで名前こそ知っていましたがまったく使ったことがありませんでした。
IaC。素晴らしいですね。
ということで今回は覚えたてのansibleを使ってみたいと思います!

dotfile

皆さんdotfile育ててますか?
普段から自分が愛用してるツールは自分用にカスタマイズして使うことで生産性が向上します。
しかし定期的にメンテナンスをしてあげないとすぐに冗長になってしまいますよね。
とりあえず適当にファイル作ってみたりvimrcとかに追記しまくったりなど。。。

僕のdotfileも2年ほど育ててきましたがかなり扱いづらい感じになっていました。。。

2年ほど運用してきたdotfile
.
├── 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にしてみたやつ
.
├── 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周りだけみてみます。

Vim周り
roles/nvim/files
├── ctags
├── init.vim
└── userautoload
    ├── basic.vim
    ├── plug.vim
    └── statusline.vim

大体こんな感じです(ややこしいので細かいのは省きましたw)
basic.vim にキーバインド等の設定、 plug.vim にプラグイン関係、 statusline.vim にはステータスラインに関する設定みたいな感じに分けてファイルを置いています。

Taskの中身はこんな感じです。

roles/nvim/tasks~
# 必要なものを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 さんです!楽しみ!

16
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?