ターミナルがダサいとモテない。dotfiles managerをyadmからchezmoiに変えたぜ。

dotfiles managerをyadmからchezmoiに移行したので比較と感想を
最近は生成AIが盛んでもうこういった技術系のblogは意味を持たなくなってきていると感じてる今日このごろ・・・🤔
弊社でもGoogle WorkspaceのGeminiやGemini Enterpriseを使っていますが、個人的には ChatGPT/Codex と neovimをパワフルにしてくれる Github Copilot が好きかなぁ。
最近の自分は業務上、論文を調査することが最近多くて分野的にChatGPTの方が返答が良いのと、意図を汲んでくれて広がりある回答が多いからって理由なだけです。
論文の観点を無視したら Claude の方が良いんだろうな。
因みにTop画像は、ChatGPTで作りました!😂
技術的なことを書いても生成AIに聞いた方が良いと思うので、人間味あふれる感じで個人的な感想や印象などを書いていこうと思います。
(これから技術的な記事って減っていくのかな? 誰か教えて・・・🤣)
chezmoi
長らくdotfiles managerとして yadm を使ってきましたが、今回は chezmoi に移行しました。
因みに chezmoi の読み方は、ちぇ、ちぇ、ちぇずも・・・違います!😷
シェモアです!📢
正直言うと移行した大きな理由は特にありません!🤣
理由はこれだけです。
- yadm に飽きたから
- chezmoi は比較的新し目で気になってたのと、Proton Pass CLIに対応してるの確認したから
因みにもっと新し目でrustベースで書かれている rotz というのもありますが、あまり更新が活発じゃないのでやめました。
ただざっとドキュメント読むと rotz は構成管理機能が充実してる印象です。
yadmとchezmoiの比較
私は yadm は1年以上近く触っています。chezmoi は 1週間程度です。
ざっくり比較していきます。
これはあくまで自分の触った感想で、自分で書いてます。(生成AIで作ってません😅)
yadm
yadm 1年以上触っていて、正直なところ特に不満になるところはありませんでした。
home配下が直接的にすべてgit化される
.gitignoreしまくる必要があります。ただしこの点だけ理解できていれば扱えるのでスッキリしてる。
bootstrapが従来のunix的な印象
- 自分の場合は
.config/yadm/bootstrap.dにscriptを目的ごとに分けて.config/yadm/bootstrapでbootstrap.d配下のscriptをすべて実行するような仕組みにしています。 - 冪等性などは自分でコントロールする必要がありますが、その分コントロール自体は自分に委ねられているため混乱はしないと思います。
alternateがパワフル
- 若干ファイル名末尾に入れる
##conditionsが独自性が高いので理解するのに少し時間が必要ですが、理解してしまえばコントロールは完全にできます。 - chezmoi ではちょっと工夫しないとできないOSを判別してファイルを配置の有無を決定することや、symlinkするといったことも可能です。
templates がシンプル
- 良いところはシンプルであること
- あまり複雑なことができない分、シンプルにやれるため複雑化することがないと思われます。templateに処理系がたくさん入ってしまうといったことは回避できるはずです。
個人的に思うのは、シンプルに完全支配したいなら yadm で十分だと思います。
chezmoi
まだ移行して1週間くらいです。
全体的には移行中で、yadm では encryption をしていましたがまだそこまでやっていません。ageなどによる暗号化/復号化をちょっと試してみたいのですが、これからゆっくりやってきます。
${HOME}/.local/share/chezmoi
ここが、yadmと根本的に違います。
- 管理する実態のファイルツリーと chezmoi がgitで管理するファイルツリーは完全に別になっています。
- gitで管理されるのは、
${HOME}/.local/share/chezmoiです。 - HOMEは、
${HOME}/.local/share/chezmoiで管理されているファイルの定義にあった形で展開される先になっています。
Configuration Files ${XDG_CONFIG_HOME}/chezmoi/chezmoi.{json|jsonc|toml|yaml}
これが chezmoi の Config File になっています。
各種templateなどで使えるVariables、設定項目であるEditorなどを設定できます。
このファイル自体は chezmoi の管理上git化されないため注意が必要です。
自分はtemplate化すると決めて、初期化時に出力されるようにしています。
まだ暗号化してないので使っていませんが、macOSの pinentry が使えるようでmacOSのTouch IDと連携させられるかもしれないです。
Special Files
.chezmoidata/
まだしっかり活用できてません。
- jsonやjsoncやtomlやyamlを配置することでchezmoiのtemplateやscriptなどからパラメータとして読み込めるそうです。
- cargo backupのjsonなどを読み込むと良いかもしれません。
- 上記以外の形式のファイルを入れるとErrorになるため、 Homebrew BundleのBrewfile や gup exportのgup.conf などは配置できません。chezmoi templateで一度それらを読み込んで別の形式に変換する必要があります。
.chezmoiexternals/
自分の手元では使ってません。
使いながら何か良い利用方法など見つかればMediumに書いていきます。
.chezmoiscripts/
- yadmでいうbootstrap系のscriptを配置する場所です。
- run_から始まるscriptを置くことで
chezmoi apply時に実行することができます。 - 毎回起動する
run_、変更時に実行されるrun_onchenge_、一度だけ起動してstateが出力されるrun_once_といった形でいくつかの種類があり Use script to perform actions に説明があります。 - yadm bootstrapで starship と topgrade のupdateが行われたらconfigの再生成を行うなどができます。
.chezmoitemplate/
chezmoi の本領発揮がこのTemplateだと感じます。
- 細かくは Templating や Templates に説明があります。
- めちゃくちゃ多機能で jq などもあるのでjsonからデータをtemplateに組み込むことも簡単にできると思います。
yadm のtemplateから chezmoi のtemplateに移植するのが一番大変だった・・・🤣
でもbashrcの中に制御構文が入ってたけど、それを減らすことができたのでかなりスッキリさせることができた。
ただしcompletionsの読み込みで、外部に吐き出すと管理がめんどくさいんでevalをかなり使ってる悪い癖があるんで、
lookPath と onchange をうまく使いこなして、completionsを出力して丸ごと読み込ませるとかはやってもいいかもなぁ🤔
.chezmoiignore
- chezmoi で管理させないファイル群を指定できます。
- ちょっと個人的にすごいなと感じたのは、このドキュメントにある通り、chezmoiの設定やdataから状態をみて振る舞いを変えることができるところです。自分はやっていませんが、macOS/Linuxの差分や個人アカウント、会社のアカウントといった分岐でいろいろできそうです。 参考 .chezmoiignore
Password Manager
これもyadmにはない大きな特徴です。
yadmではPassword Managerとの連携はなく、自前でscriptを書いて連携させる必要がありましたが、chezmoiは本格的に連携しています。
- 細かくはこちらに説明がありTemplate Engine側で吸収できます。 参考 Password Manager
対応は以下の一覧です。
とんでもなくたくさんのPassword Managerに対応しています。
- 1Password
- AWS Secrets Manager
- Azure Key Vault
- Bitwarden
- Dashlane
- Doppler
- ejson
- gopass
- KeePassXC
- Keychain and Windows Credentials Manager
- Keeper
- LastPass
- pass
- passhole
- Vault
因みに自分は Proton のUserなのですが、Proton Passから先日出た Proton Pass CLI に対応しています。
これが yadm から移行する **”一番の理由”**になりました。
(2026/02/09時点では User guid 側のmenuの一覧には書いてないという・・・🤣)
参考 Proton Pass function
ただ自前で Proton Pass CLI で yadm で生成されるbashrcに読み込む外部ファイルも生成してたから、困ってたわけではありません😅
Encyption
まだ自分は組み込んでいないのですが、yadm では git-crypt (参考 yadm Encyption)を使っていたので、そのうち対応します。
gpg 以外にgoの age やrustの rage などにも対応しているので、gpg じゃなく age か rage でやってみようと考えています。
最後にchezmoiの感想
オレは chezmoi 好き!😍
いいじゃん chezmoi 気に入ったぞ!🤣
ターミナル環境について他の記事も書いているので、よろしければこちらもご覧ください!
『ターミナルがダサいとモテない』シリーズ一覧
転載:ターミナルがダサいとモテない。dotfiles managerをyadmからchezmoiに変えたぜ。
この記事は Medium(@yusuke_h) からの転載です。
