chezmoiを使ったローカル環境爆速構築

**chezmoi**を使ってローカル環境を爆速で構築する方法をご紹介します。複数のマシンや新しい環境で同じ設定を再現したいとき、chezmoiはとても便利なツールです。

## chezmoiとは

[chezmoi](https://www.chezmoi.io/)は、ドットファイル（設定ファイル）を安全かつ効率的に管理・同期するためのオープンソースツールです。主な特徴は以下の通りです。

- **安全性**：デフォルトで公開リポジトリに機密情報を含めないように設計されています。
- **柔軟性**：テンプレート機能を使って、環境に応じた設定を適用できます。
- **簡単な導入**：シンプルなコマンドでセットアップ可能です。
- **クロスプラットフォーム**：Windows、macOS、Linuxで動作します。

## chezmoiのインストール

### macOSの場合

Homebrewを使用して簡単にインストールできます。

```bash
brew install chezmoi
```

その他のインストール方法は[公式サイト](https://www.chezmoi.io/install/)を参照してください。

## 初期設定と既存ドットファイルの管理

### 初期化

chezmoiを初期化します。初回の`init`では、既存のドットファイルを管理対象に含めるかどうかを尋ねられます。

```bash
chezmoi init
```

`--apply`オプションを付けると、即座に適用されます。

### 既存のドットファイルを管理に追加

既存のドットファイルをchezmoiで管理するには、以下のコマンドを使用します。

```bash
chezmoi add ~/.bashrc
chezmoi add ~/.vimrc
chezmoi add ~/.config/nvim/init.vim
```

### ディレクトリ構成

`~/.local/share/chezmoi`ディレクトリに管理対象のファイルが保存されます。Gitリポジトリとして管理する場合、このディレクトリをリポジトリとして使用します。

## chezmoiの基本的な使い方

### ドットファイルの追加

新たに管理したいドットファイルがある場合、`chezmoi add`コマンドを使用します。

```bash
chezmoi add ~/.gitconfig
```

### 変更の適用

編集した設定を実際の環境に適用するには、`chezmoi apply`を実行します。

```bash
chezmoi apply
```

変更内容を確認したい場合は、`--dry-run`または`--verbose`オプションを使用します。

```bash
chezmoi apply --dry-run --verbose
```

## 新しいマシンでのセットアップ

新しい環境で同じ設定を適用するには、以下の手順を行います。

1. **chezmoiをインストール**します。

   ```bash
   brew install chezmoi  # macOSの場合
   ```

2. **リポジトリから初期化**します。

   ```bash
   chezmoi init <あなたのリポジトリURL>
   ```

   例えば、GitHubを使用している場合：

   ```bash
   chezmoi init git@github.com:あなたのユーザー名/dotfiles.git
   ```

3. **設定を適用**します。

   ```bash
   chezmoi apply
   ```

これだけで、以前の環境と同じ設定が新しいマシンに反映されます。

## テンプレート機能で環境に応じた設定

chezmoiの強力な機能の一つがテンプレートです。テンプレートを使うことで、環境変数や条件分岐を設定ファイルに組み込むことができます。テンプレートは[Go言語のテンプレート](https://pkg.go.dev/text/template)構文を使用しています。

### 変数の使用

ユーザー名やメールアドレスなど、変数を設定ファイルに埋め込むことができます。

`~/.gitconfig.tmpl`：

```gitconfig
[user]
    name = {{ .name }}
    email = {{ .email }}
```

`chezmoi.toml`で変数を定義します。

```toml
[data]
  name = "Your Name"
  email = "your.email@example.com"
```

### 条件分岐

OSやホスト名によって設定を変更することができます。

```bash
{{ if eq .chezmoi.os "darwin" }}
# macOS専用の設定
{{ else if eq .chezmoi.os "windows" }}
# Windows専用の設定
{{ end }}
```

### ホスト名による条件分岐

```bash
{{ if eq .chezmoi.hostname "work-machine" }}
# 仕事用マシンの設定
{{ else }}
# その他のマシンの設定
{{ end }}
```

## 機密情報の扱い

機密情報をリポジトリに含めないために、`encrypt`機能やパスワードマネージャーとの連携が可能です。

### 機密ファイルの暗号化

```bash
chezmoi add --encrypt ~/.config/myapp/credentials
```

デフォルトでは、`gpg`を使用して暗号化されます。

### パスワードマネージャーとの連携

`Bitwarden`や`LastPass`などのパスワードマネージャーと連携して、機密情報を管理できます。

`chezmoi.toml`で設定：

```toml
[passwordManager]
  command = "bw"
```

テンプレート内で使用：

```bash
password = {{ (password "itemName").password }}
```

## 高度な機能

### プライベートリポジトリの利用

機密性の高い設定を含む場合、GitHubのプライベートリポジトリを使用することが推奨されます。SSHキーを設定しておくと、パスワード入力なしでクローンできます。

```bash
chezmoi init git@github.com:あなたのユーザー名/private-dotfiles.git
```

### chezmoiスクリプト

初回セットアップ時にアプリケーションのインストールや設定を自動化できます。

`run_once_install-packages.sh.tmpl`：

```bash
#!/bin/bash
{{ if eq .chezmoi.os "darwin" }}
brew install git zsh vim
{{ else if eq .chezmoi.os "windows" }}
# Windows専用のインストールコマンド
{{ end }}
```

`chezmoi apply`時に自動で実行されます。

## まとめ

chezmoiを使うことで、複数の環境で一貫した設定を簡単に管理・適用できます。テンプレート機能や暗号化機能、スクリプトの自動実行など、強力な機能を活用すれば、より柔軟で安全なドットファイル管理が可能です。

新しいマシンや環境をセットアップする際の手間を大幅に削減できるため、ぜひchezmoiを導入してローカル環境の爆速構築を体験してみてください。

## 参考資料

- [chezmoi公式サイト](https://www.chezmoi.io/)
- [2台目のMacに環境構築をすぐ終わらせるためにchezmoiを使った話](https://zenn.dev/yukionodera/articles/setup-second-machine)
- [chezmoi – 素晴らしいドットファイルマネージャー](https://haril.dev/jp/blog/2023/03/26/chezmoi-awesome-dotfile-manager)
- [Go言語のテンプレートパッケージ](https://pkg.go.dev/text/template)

---

**最後に**、chezmoiを使用することで、複数のマシン間での設定の同期が驚くほど簡単になります。煩雑な環境構築作業から解放され、生産性を向上させることができます。ぜひ一度お試しを。