1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人設定ファイル同期支援ツール chezmoi の使い方 (テンプレート機能編)

1
Last updated at Posted at 2026-01-28

chezmoi の使い方について書いた記事一覧は以下です。
[基本編] | [テンプレート機能編] (この記事) | [ファイル暗号化機能編]

chezmoi で個人設定ファイルを同期していると、

  • こちらのマシンとあちらのマシンでこの箇所を変えたい。
  • この箇所は GitHub リポジトリに入れるときは伏せておきたい。
    • なお、公開したくない情報を含むファイルは、ファイルごと暗号化してコミットする手もあります (この記事では扱いません → 別記事にしたので冒頭リンクを参照)。

ということもあると思います。これらは chezmoi のテンプレート機能を使って、ローカルで変数を注入するようにすれば解決できます。やり方は以下のドキュメントにあります。
Manage machine-to-machine differences - chezmoi

この記事は上記ドキュメントと同じ内容ですが、手順に区切って見出しを付けています。

  • 【手順1】 各マシンに設定ファイルを生成して、ローカルで注入したい変数を登録する
  • 【手順2】 ローカルで注入したい変数を含むファイルをテンプレートとしてソースディレクトリに登録した上で、テンプレートにくり抜く
  • 【手順3】 (おまけ) 通常のファイルのようにソースディレクトリからローカルに反映し、変数が注入された状態で反映されるか動作確認する

なお、以下では自作ランチャー ~/launcher.html に、そのマシンで利用する Slack ワークスペース ID にしたい箇所があるものとしています。

~/launcher.html
const slackUrl = 'https://app.slack.com/client/{{ .slackWorkSpaceId }}';

【手順1】 各マシンに設定ファイルを生成して、ローカルで注入したい変数を登録する

この手順はスキップできる場合があります: コマンド chezmoi data で、既に登録済みのそのマシンの変数 (アーキテクチャやホスト名、ユーザ名など) が表示されます。それらの変数はドット区切りの各階層キー (先頭にもドット) で {{ .chezmoi.arch }}{{ .chezmoi.hostname }} のように引き出せます。以下のようにテンプレートを実行してみて、登録したい変数を引き出せるなら自分で登録しなくてよいです。

chezmoi execute-template '{{ .chezmoi.arch }}'
# -> amd64
chezmoi execute-template '{{ .chezmoi.hostname }}'
# -> MyComputer
chezmoi execute-template '{{ .chezmoi.username }}'
# -> MYCOMPUTER\Cookie  # Windows の場合
chezmoi execute-template '{{ (splitList "\\" .chezmoi.username) | last }}'
# -> Cookie

# ※ 補足:
# chezmoi は Go の text/template を使っていてテンプレート内で sprig 関数が使えます
# https://masterminds.github.io/sprig/
# {{ (splitList "\\" .chezmoi.username) | last }} は .chezmoi.username を
# バックスラッシュ (エスケープ付きで \\) で分割して最後の要素を取ります

まず、ローカルで注入したい変数を記入する設定ファイル ~/.config/chezmoi/chezmoi.toml を生成します。このファイルは GitHub リポジトリには入れず、そのマシンで管理します。

vi ~/.config/chezmoi/chezmoi.toml

そして実際に適当な変数名を付けて変数を登録します。PC1 と PC2 で変えたいときは変えます (いま手元にない方のマシンでは後々作業すればよいです)。

~/.config/chezmoi/chezmoi.toml @ PC1
[data]
slackWorkSpaceId = "TXXXXXXXX"
~/.config/chezmoi/chezmoi.toml @ PC2
[data]
slackWorkSpaceId = "TYYYYYYYY"

上記のように変数を登録すると、以下のコマンドで "{{ .変数名 }}" で引き出せることが確認できます (しいて確認する必要はないです)。

chezmoi execute-template "{{ .slackWorkSpaceId }}"
# -> TXXXXXXXX

【手順2】 ローカルで注入したい変数を含むファイルをテンプレートとしてソースディレクトリに登録した上で、テンプレートにくり抜く

次に、ローカルで注入したい変数を含むファイルをソースディレクトリに登録しますが、このときオプション --template をつけることでテンプレートとして扱えます。

chezmoi add --template ~/launcher.html  # テンプレートとしてソースディレクトリに登録
# -> ~/.local/share/chezmoi/launcher.html.tmpl にコピーされる

しかし、このままでは記入欄がないので、ちゃんと記入欄をくり抜いてテンプレートにする必要があります。ソースディレクトリ側のファイルを以下のコマンドで編集します。

chezmoi edit ~/launcher.html
# お好きなエディタで編集したいなら ~/.local/share/chezmoi/launcher.html.tmpl を直接編集

【手順1】で登録 (確認) した変数を記入する欄を、以下のようにくり抜きます。

~/.local/share/chezmoi/launcher.html.tmpl
const slackUrl = 'https://app.slack.com/client/{{ .slackWorkSpaceId }}';

これで GitHub リポジトリに登録します。もし先にテンプレートの動作確認をしたいなら、【手順3】の動作確認後に登録してください。GitHub に公開したくない情報をくり抜いた場合は、きちんとくり抜けているか GitHub 登録前によく確認してください。

# ソースディレクトリに移動
# 公式には chezmoi cd だが Windows Git Bash で chezmoi cd すると bash でなくなるのでこう
pushd ~/.local/share/chezmoi/
git status
git add launcher.html.tmpl
git commit -m "Add Launcher"
git push
popd  # chezmoi cd で移動した場合は exit で元の場所に戻る

後は別マシンで【手順1】を実施した上で、通常通りのコマンドでリポジトリをプルし、ローカルとの差分を確認し、ローカルに反映するだけです。

【手順3】 (おまけ) 通常のファイルのようにソースディレクトリからローカルに反映し、変数が注入された状態で反映されるか動作確認する

この手順はおまけです。別マシンへの反映時に意図通りか確認すればじゅうぶんです。

登録したマシンで動作確認するなら、chezmoi が変数を注入してくれるのを確認するため、あえてローカルファイルの、ローカル変数が注入されるべき場所を潰してみます。

vi ~/launcher.html
# const slackUrl = 'https://app.slack.com/client/ここに注入されるかのテスト';

その上で、通常通りのコマンドでローカルに反映します。変数が注入された状態で反映されるのがわかります。

chezmoi diff  # ソースディレクトリとローカルとの差分確認
# -> この時点のプレビューで変数が注入されているのがわかる
chezmoi apply  # ローカルに反映
# launcher.html has changed since chezmoi last wrote it? と訊かれたら o(overwrite) と打つ
~/launcher.html
const slackUrl = 'https://app.slack.com/client/TXXXXXXXX';
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?