経緯
筆者は今まで自作のdotfilesを利用していたが、chezmoi(シェモア)というツールがあると知って乗り換えた。
以前はこちらの方法で作成していた: 📄dotfilesの作り方
chezmoiとは
chezmoiは複数のPCで .zshrcのような設定ファイルを同期することができるツール。
通常のdotfiles運用と比較したときのchezmoiの良さ
- PCに設定値を同期するためのスクリプトをメンテナンスしなくてよい
- 端末ごとに微妙に異なる設定でも管理しやすい
- 「dotfiles→PC設定」「PC設定→dotfiles」という両方向での反映が可能
- PC設定とdotfilesの差分をdiffで確認しながら反映できる
- APIキーなどのgit管理したくないような情報もうまく管理できる
1. PCに設定値を同期するためのスクリプトをメンテナンスしなくてよい
既存のdotfiles管理の場合、自分自身で init.shなどのシェルスクリプトを作成し、
そこにシンボリックリンクを貼るためのコードを書く必要があった。
新たに管理対象にしたいファイルが出てきた場合は、そのスクリプトを修正する必要がある。
また、人によっては環境をクリーンアップするスクリプトを作っている人もいるだろう。
chezmoiは設定ファイルの同期管理を全てやってくれるので、自分でシェルスクリプトをメンテナンスする必要がなくなった。
これが一番大きな理由だ。
chezmoi apply を行うだけで端末に設定が反映される。
2. 端末ごとに微妙に異なる設定でも管理しやすい
「私用PCにはFlutterを入れておきたいが、社用PCにはFlutterは入れる必要がない」など
端末間の設定同期というのは完全に一致するわけではない。
この条件分岐をシェルスクリプトで管理するのは非常に面倒だったが、chzmoiはテンプレート機能というものがあるので
これを活用することで端末間の微妙な設定差分を簡潔に記載することができる。
■設定例:私用PCの場合だけFlutterを入れるBrewfileの設定
tap "homebrew/bundle"
brew "chezmoi"
{{ if eq .chezmoi.hostname "Private-PC" -}}
cask "flutter"
{{ end -}}
cask "font-hack-nerd-font" 参照:
Manage machine-to-machine differences - chezmoi
3. 両方向の反映が可能
通常のdotfilesの場合、「dotfilesの設定→PC」に反映するという一方向の考え方になると思うので、
「今の設定をdoftiles側に反映させたい」と思うときに少し面倒な時がある。(特に新しいファイルなど)
その点chezmoiは
- dotfilesの設定→PCへ反映:
chezmoi apply - PCの既存設定→dotfilesへ反映:
chezmoi add 対象ファイル
という具合でどちらの方向でも反映することができる。
4. PC設定とdotfilesの差分をdiffで確認しながら反映できる
PCに未反映の設定を、git diffの要領で確認することができる。
$ chezmoi diff
diff --git a/.Brewfile b/.Brewfile
index deb02a9f05d845c97814358c311095e26717708f..d603ba03064cbbab98fa75ecce3bbf9d63170a66 100644
--- a/.Brewfile
+++ b/.Brewfile
@@ -15,6 +15,7 @@ brew "ripgrep"
brew "tmux"
brew "tree"
brew "tree-sitter-cli"
+brew "uv"
brew "watchman"
brew "wget" これを自前のスクリプトで実現しようとするとかなり面倒。
5. APIキーなどのgit管理したくないような情報もうまく管理できる
chezmoiは1Passwordなど連携して機密情報も管理できる。
これまでのdotfilesでは、git管理したくない秘密鍵やAPIキーなどは
- 諦める
- プライベートリポジトリにしてリスクを承知の上git管理する
のどちらかしかなかった。
chezmoiはそれをいい感じに管理できるらしい。(筆者はまだ使っていない)
まとめ
chezmoiによって、本質的にやりたいことだけに集中することができるようになった。