dotfiles - chezmoiでグローバルコンフィグを一元管理する
chezmoiで管理する個人用途のdotfiles
概要
dotfiles は、ローカルマシンの設定ファイルを Git で管理・共有する取り組み。
Windows(WSL2)とMac両方持っており、異なるOS間で同じdotfile(gitconfig, zshrcなど)を使いたいと思ったのがきっかけ。
完全個人用で作成していくことにしたので、汎用化は追求しない。
dotfilesで検索するといろんなスター数の多いものがあるからそれを利用するのもあり。
構築
※ 構築手順については公式ドキュメントを参照すべきなので軽く載せる程度にする
dotfilesを作るにあたって大事なツールであるchezmoiを使う。
chezmoiの役割は、複数の環境で dotfiles(設定ファイル)を一元管理・適用する仕組みを提供すること。
インストール(PowerShell)
NOTE
2025年9月追記:以降は基本的にパワーシェルだが、WindowsにWSL2を入れてLinuxにもchezmoiを導入した。
iex "&{$(irm 'https://get.chezmoi.io/ps1')} -b '$HOME\bin'"found version 2.62.4 for latest/windows/amd64
installed C:\Users\{user_name}\bin\chezmoi.exePath 確認と設定
$env:PATH -split ';' | Where-Object { $_ -match "{user_name}\bin" }何も返らない場合は未設定
$env:Path += ";$HOME\bin"[Environment]::SetEnvironmentVariable("Path", $env:Path, "User")PowerShell を再起動後:
chezmoi --versionchezmoi version 2.62.4, commit ..., built at ...使い方
細かな使い方はREADMEに記載あるのでそちらを参照。
初期化
以下のコマンドで、~/.local/share/chezmoi が作られる。
空の管理ディレクトリができるので、ここにファイルを追加していく。
以降、ここに管理対象となるdotfileのコピーを置いていくことになる。git管理の対象となるのもこのディレクトリ。
chezmoi initすでにあるリポジトリで初期化したい場合はinitの後にrepository名を入れる。
remoteにあるdotfilesの内容が先ほどのパスのところに入る。
chezmoi init --apply git@github.com:<your>/<repo>.gitファイルの追加と適用
chezmoi add $HOME\.gitconfig既存の .gitconfig 内容がコピーされ、編集用テンプレートが生成される
chezmoi edit $HOME\.gitconfigエディタが開いてconfigの修正が可能
chezmoi apply管理下の変更をホームディレクトリに反映
chezmoi 設定ファイル
設定ファイルは以下のように作成
[edit]command = "code" # cursorにするとcursorで立ち上がるargs = ["--wait"]テンプレート機能
chezmoi では Go テンプレートを用いた条件分岐や変数展開が可能。
例えばOS やホストごとに微妙に異なる設定を条件分岐したり、環境変数を埋め込んだりできる。
ただ、普通の.gitconfigなどでは使用できないので、拡張子に.tmplをつける必要がある。
ユースケース
条件分岐
- OSごとの差分吸収(Mac と Linux で異なる ls オプションなど)
- 機能ごとの有効化・無効化(WSL のみ特定設定を有効化するなど)
{{ if eq .chezmoi.os "darwin" }} # mac alias ls="ls -G"{{ else if eq .chezmoi.os "linux" }} # linux alias ls="ls --color=auto"{{ end }}変数の埋め込み
- 環境変数の切り替え(開発環境と本番環境で違う PATH を通すなど)
[user] name = {{ .git_user_name }} email = {{ .git_user_email }}外部ツールの値を参照(例:1Password)
token = {{ (onepassword "op://my-vault/api/token") }}注意点
- 機密情報は直接含めないこと
- 例:APIキー、秘密鍵、トークン
- 含めたい場合は 別ファイルに切り出して
includeする- そのファイルは
.gitignoreに追加し、リポジトリには上げない
- そのファイルは
- もしくは1Password CLI など外部の秘密管理ツールに保管し、テンプレートから参照する
dotfilesを使ってみて
git管理することができれば両OSで同じ設定を常に享受できて、開発体験を損ねることがないので常に運用していきたい。
運用のコストとしても、対象のdotfileに変更があればedit→apply してremoteリポジトリを更新。OS側でupdateするだけなので楽ではある。
あとは、
- 異なる端末間で同じコンフィグを使用できる
- git管理することによって、変更履歴が追えたり一括で設定ファイルの見直しができたりするのがいい(データが消失してもリモートに保存されてるので復元可能という点もいい)