今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

twpayne/chezmoi

複数のマシン上でドットファイルを安全に管理するツールです。

複数台のLinux・macOS・Windowsマシンを使っていても、chezmoiなら1つのテンプレートからOSやホストごとに条件分岐した設定ファイルを自動生成できます。パスワードやSSHキー、APIトークンはGPGやage、Bitwarderと連携した暗号化ストレージにそのまま保存でき、symlinkをかき集める作業から解放されます。宣言的な状態管理で「今どうなっているか」を常に把握できるので、チームで共通テンプレートを共有しつつ各自の環境向けに自動カスタマイズする、という運用を今日から試してみたくなります。

01 / 概要
何をするものか一文で言うと
ひとことで複数のマシン上でドットファイルを安全に管理するツールです。

chezmoiは、複数の異なるマシンで設定ファイル(dotfiles)を安全に管理するためのGo製コマンドラインツールです。Gitリポジトリにテンプレート化した「ソース状態」を保存し、各マシン上で実際のファイルへ展開します。macOS、Linux、Windowsなど複数OSに対応し、暗号化や各種パスワードマネージャーとの連携も備えています。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

chezmoiは、ホームディレクトリの実ファイルとは別に「ソース状態」をGitリポジトリとして持ちます。このソース状態にはファイルの雛形に加えて、chezmoiscripts・chezmoitemplates・chezmoidataなどの特殊ディレクトリが含まれます。ファイル名や中身にGoのテンプレート構文を書くと、マシンごとの変数やOSの違いに応じて展開結果を変えられます。chezmoi diffは現在のホームディレクトリとソース状態から計算したターゲット状態を比較し、差分を表示します。chezmoi applyはその差分を実際のホームディレクトリへ反映します。機密情報はageやgpgでの暗号化に対応します。1PasswordやBitwarden、gopassなどのパスワードマネージャーもテンプレート関数から呼び出せます(go.modの依存関係一覧から確認できます)。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    git clone https://github.com/twpayne/chezmoi.gitしてcd chezmoiしたあと、go buildでCLIをビルドします。go.modはGo 1.26系を要求しているため、手元のGoが古いとここで失敗する可能性があります。

  2. STEP 02

    go tool chezmoiでビルド直後のバイナリを直接起動でき、initやadd、applyなどのサブコマンド一覧をhelpで確認できます。

  3. STEP 03

    chezmoi add ~/.bashrcのように既存ファイルを登録すると、~/.local/share/chezmoi以下にソースファイルがコピーされる様子を確認できます。

  4. STEP 04

    設定を書き換えたあとchezmoi diffを実行すると、ホームディレクトリとソース状態の差分がプレビュー表示され、chezmoi applyで初めて実ファイルに反映されます。

  5. STEP 05

    go test ./...を実行すると、age・gpg・python3など多数の外部コマンドが$PATHに見つからない場合、該当するテストがスキップされる旨のログが出ます。

  6. STEP 06

    make smoke-testを実行すると、クロスコンパイルやlintを含めた一連の検証を一度に体験できます。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

手元で試すと、Gitで履歴管理できるdotfilesリポジトリと、そこからマシンごとに展開されたホームディレクトリ設定一式が手に入ります。テンプレート機能により、1つのソースから複数マシン向けの設定差分を吸収でき、暗号化や外部パスワードマネージャーと組み合わせれば秘密情報を平文でGitに置かずに済みます。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

developer-guide/index.mdには「LLMを使った貢献は即座にBanされる」と明記されており、AI支援でのコントリビュートは事実上禁止されています。

02

capslock-summary.jsonによると、chezmoi本体はCAPABILITY_ARBITRARY_EXECUTIONやCAPABILITY_MODIFY_SYSTEM_STATEなど広い権限区分を持ち、スクリプト実行やシステム状態変更を行うツールである点は把握しておく必要があります。

03

フルテストにはage・bash・gpgなど多数の外部ツールが$PATHに必要で、無い場合は該当テストが黙ってスキップされるため、CI環境と手元環境で検証範囲が変わり得ます。

04

goreleaser設定ではglibc版とmusl版でCGO_ENABLED=1のビルドが分かれており、配布バイナリの構成はやや複雑です。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

複数マシンで同じdotfilesを使い回したい人や、Gitでの履歴管理とテンプレートによる環境差分吸収、秘密情報の暗号化管理までを1つのツールで済ませたい人に向いています。ドキュメントツリーの厚さ、main.ymlでのCodeQLやAlpine・Archlinuxでのテスト、golangci-lintの厳格な設定、capslockによる権限可視化など、エンジニアリング面での作り込みが随所から読み取れます。これらの material から、実際にインストールして動かさなくても、機能面・品質面ともに成熟したツールだと判断して差し支えありません。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する