私のdotfilesが火を噴くぜ

この記事は Willgate Advent Calendar 2018 の21日目の記事です。

前日は okashoi さんの どうして Util / Common クラスはよくないのか? でした!


みなさん、サーバの個人設定ファイルの管理どうしていますか?え、サーバ以降の度に scp している?それはいけませんね。急にサーバ死んだら復旧できませんし、複数サーバに設定ファイル反映するの大変ですよ。

ということで、今回は dotfiles と呼ばれているものを紹介したいと思います。

dotfiles とは

dotfiles と大層な名前をつけていますが、言ってしまえば、 . から始まる個人設定のファイル群をgitで管理しましょうよ 。というものです。

なので、特別なツールの導入とかはありません。ただ、サーバに反映しやすいように一工夫している人もいたりしますので、そこらへんも少し踏まえて説明させていただきます。

そんなことはいいからお前の dotfiles みせろ

github.com

構成

$ tree ./
./
├── Makefile
├── README.md
├── bin
│   └── Makefile
└── etc
    ├── config
    ├── cron
    │   └── crontab
    └── init
        └── init.sh

仕組み

README.md に書いていますが、git リポジトリに管理されている /etc/init/init.sh を実行することでサーバ上の環境設定をしてくれるように設計しています。

ここでやっていることは、

git clone git@github.com:IkezoeMakoto/dotfiles.git
make -C dotfiles deploy

が大事な部分です。git 上から clone してくるのと make deploy を実行すること。

make deploy

make deploy が実行されると下記のターゲットが実行されることになります。

deploy: ## Create symlink to home directory
        @$(foreach val, $(DOTFILES), ln -sfnv $(abspath $(val)) $(HOME)/$(val);)
        $(MAKE) install
        $(MAKE) cron/set

ここの $(DOTFILES) は

CANDIDATES := $(wildcard .??*) bin
EXCLUSIONS := .DS_Store .git .gitmodules .travis.ym .gitignore
DOTFILES   := $(filter-out $(EXCLUSIONS), $(CANDIDATES))

で解決された . で始まるファイルたちが対象になり、シンボリックリンクが貼られホームディレクトリに設置されるようになっております。

このため、変更時にホームディレクトリの . から始まるファイルを編集したとしても、すぐ git commit && git push できる仕組みになっています。

綺麗にするコマンド

そのサーバから綺麗さっぱり無くしたいという時もあるでしょう(退職時や、サーバを譲渡するときなど)、その際は make clean というターゲットを使うことで、設定していたシンボリックリンクを綺麗に削除してくれます。

まとめ

時間がなかったので、少し駆け足になってしまいましたが、いかがでしたでしょうか?

自分専用の設定ファイルなどにこだわるひとであれば、このようなバックアップ、設定反映のための手段も一緒に導入しておくと、いろんな環境で作業でき、利便性も上がるので是非設定してみてください。