chezmoiは、複数の異なるマシンで設定ファイル(dotfiles)を安全に管理するためのGo製コマンドラインツールです。Gitリポジトリにテンプレート化した「ソース状態」を保存し、各マシン上で実際のファイルへ展開します。macOS、Linux、Windowsなど複数OSに対応し、暗号化や各種パスワードマネージャーとの連携も備えています。
chezmoiは、ホームディレクトリの実ファイルとは別に「ソース状態」をGitリポジトリとして持ちます。このソース状態にはファイルの雛形に加えて、chezmoiscripts・chezmoitemplates・chezmoidataなどの特殊ディレクトリが含まれます。ファイル名や中身にGoのテンプレート構文を書くと、マシンごとの変数やOSの違いに応じて展開結果を変えられます。chezmoi diffは現在のホームディレクトリとソース状態から計算したターゲット状態を比較し、差分を表示します。chezmoi applyはその差分を実際のホームディレクトリへ反映します。機密情報はageやgpgでの暗号化に対応します。1PasswordやBitwarden、gopassなどのパスワードマネージャーもテンプレート関数から呼び出せます(go.modの依存関係一覧から確認できます)。
- STEP 01
git clone https://github.com/twpayne/chezmoi.gitしてcd chezmoiしたあと、go buildでCLIをビルドします。go.modはGo 1.26系を要求しているため、手元のGoが古いとここで失敗する可能性があります。
- STEP 02
go tool chezmoiでビルド直後のバイナリを直接起動でき、initやadd、applyなどのサブコマンド一覧をhelpで確認できます。
- STEP 03
chezmoi add ~/.bashrcのように既存ファイルを登録すると、~/.local/share/chezmoi以下にソースファイルがコピーされる様子を確認できます。
- STEP 04
設定を書き換えたあとchezmoi diffを実行すると、ホームディレクトリとソース状態の差分がプレビュー表示され、chezmoi applyで初めて実ファイルに反映されます。
- STEP 05
go test ./...を実行すると、age・gpg・python3など多数の外部コマンドが$PATHに見つからない場合、該当するテストがスキップされる旨のログが出ます。
- STEP 06
make smoke-testを実行すると、クロスコンパイルやlintを含めた一連の検証を一度に体験できます。
手元で試すと、Gitで履歴管理できるdotfilesリポジトリと、そこからマシンごとに展開されたホームディレクトリ設定一式が手に入ります。テンプレート機能により、1つのソースから複数マシン向けの設定差分を吸収でき、暗号化や外部パスワードマネージャーと組み合わせれば秘密情報を平文でGitに置かずに済みます。
developer-guide/index.mdには「LLMを使った貢献は即座にBanされる」と明記されており、AI支援でのコントリビュートは事実上禁止されています。
capslock-summary.jsonによると、chezmoi本体はCAPABILITY_ARBITRARY_EXECUTIONやCAPABILITY_MODIFY_SYSTEM_STATEなど広い権限区分を持ち、スクリプト実行やシステム状態変更を行うツールである点は把握しておく必要があります。
フルテストにはage・bash・gpgなど多数の外部ツールが$PATHに必要で、無い場合は該当テストが黙ってスキップされるため、CI環境と手元環境で検証範囲が変わり得ます。
goreleaser設定ではglibc版とmusl版でCGO_ENABLED=1のビルドが分かれており、配布バイナリの構成はやや複雑です。
複数マシンで同じdotfilesを使い回したい人や、Gitでの履歴管理とテンプレートによる環境差分吸収、秘密情報の暗号化管理までを1つのツールで済ませたい人に向いています。ドキュメントツリーの厚さ、main.ymlでのCodeQLやAlpine・Archlinuxでのテスト、golangci-lintの厳格な設定、capslockによる権限可視化など、エンジニアリング面での作り込みが随所から読み取れます。これらの material から、実際にインストールして動かさなくても、機能面・品質面ともに成熟したツールだと判断して差し支えありません。