dotfilesを使いはじめた

はじめに

今更ながら、dotfiles を使いはじめた。
きっかけは、今後 Mac と WSL2 の両方で開発する機会が増えそうで、シェル設定やツールのバージョン管理を都度やり直すのが面倒になってきたためである。

今回は、自分用に作った dotfiles リポジトリを見ながら、どういう方針で構成したのか、何を管理対象にしているのかを整理して紹介する。

なお、現時点では主に WSL2 で使っており、Mac 側はまだ本格運用前である。
そのため、この記事は WSL2 寄りの内容になっている。
※ちなみに、Macでは構築を試していないので、この記事の内容はWSL2での内容が中心となる。

環境

Windows 11 Pro
WSL2 Ubuntu 24.04 LTS

dotfilesリポジトリ

リポジトリはこちら。

このリポジトリは、WSL と Mac の両方で使うことを前提にしていて、設定管理には chezmoi、ツールのバージョン管理には mise を使っている。

なぜ dotfiles を使うことにしたのか

今回やりたかったことは、ざっくり言うと以下の 3 つである。

  • 新しい環境でも、なるべく短い手順でいつもの開発環境を再現したい
  • WSL2 と Mac で共通化できる部分は共通化しつつ、OS ごとの差分だけは素直に分けたい
  • Neovim や tmux のように、少しずつ育てる設定を Git 管理したい

これまでは、その場しのぎで .zshrc を直接編集したり、必要になったツールを都度インストールしたりしていた。
また、zshとかtmuxとかをそこまで使っておらず、VSCodeのターミナルで完結させることが多かったため、そこまで環境構築にこだわる必要も感じていなかった。
ただ、今後は Mac と WSL2 の両方で開発する機会が増えそうで、シェル設定やツールのバージョン管理を都度やり直すのが面倒になってきたため、dotfiles を使うことにした。

構築する上で、以下のように役割を分けた。

  • bootstrap.sh で初回セットアップを自動化する
  • chezmoi でホームディレクトリ配下の設定ファイルを反映する
  • mise で CLI ツールや言語ランタイムのバージョンを揃える

せっかくなので、できる限りモダンなツールを使ってみようかということで、chezmoimise を選んでみた。

リポジトリの構成

bootstrap.sh で初回セットアップをまとめる

まずは bootstrap.sh を実行すれば、zsh や chezmoi、mise、oh-my-zsh、Neovim、Powerlevel10k などの導入を一通り自動化できるようになっている。
WSL では apt を使い、Mac では Homebrew を使う前提で処理が分かれているため、環境構築の手数をかなり減らせる。

README によると、主に以下のツールが自動インストール対象になっている。

ツール役割
zshデフォルトシェル
chezmoidotfiles の反映
miseツールバージョン管理
oh-my-zshzsh のベース設定
Neovimエディタ
Powerlevel10kプロンプトテーマ
difit補助ツール

Mac のみ cmux を入れるようになっているが、cmuxはまだ試していないため、今後tmuxに統一する可能性もある。

chezmoi でホーム配下の設定を管理する

設定ファイルの管理対象は以下の通り。

dotfiles 側展開先
dot_zshrc.tmpl~/.zshrc
dot_zprofile~/.zprofile
dot_config/mise/config.toml~/.config/mise/config.toml
dot_config/nvim/~/.config/nvim/
dot_config/tmux/tmux.conf~/.config/tmux/tmux.conf
dot_claude/settings.json~/.claude/settings.json

このくらいの範囲に留めているのはちょうど良くて、全部を無理に管理しないぶん見通しがよい。
特に、日常的に触る zsh、Neovim、tmux だけでも Git 管理に乗ると再現性が上がる。

mise でツールバージョンを固定する

mise では、Node.js や Go に加えて、日常的に使う CLI もまとめて管理している。

  • Node.js
  • Go
  • ripgrep
  • fd
  • fzf
  • bat
  • eza
  • zoxide
  • gh

ツールについて

tmux

tmux の設定は、dot_config/tmux/tmux.conf で管理している。 今のところ、tmux は WSL2 でしか使っていないため、Mac 側でどうするかはまだ決めていない。

ちなみに、Windows Terminalだとこんな感じ。
※ショートカットを覚えていないのでチートシートを表示するようにしている。

windows-terminal-01

実際のセットアップ手順

導入手順は以下の通り。

git clone https://github.com/katsuobushiFPGA/dotfiles ~/dotfiles
cd ~/dotfiles
bash bootstrap.sh
chezmoi init --source ~/dotfiles
chezmoi apply
chsh -s $(which zsh)

最後に Powerlevel10k の見た目を調整するなら、以下も実行する。

p10k configure

ここまでで、シェル、エディタ、tmux、各種 CLI の土台が一通り揃う構成になっている。

これから追加したいこと

今の時点でも実用的だが、まだまだ育てたいと思っている。

  • Git のグローバル設定や gitignore をどう管理するか整理する
  • 端末フォントやターミナル設定も再現できるようにする
  • Mac 実機でも一度セットアップして差分を洗い出す
  • chezmoi diffchezmoi doctor を使ったメンテナンス手順も固める
  • Neovim のプラグイン管理も入れてみる(今は lazy.nvim を手動で入れている)
  • tmux の設定ももう少し充実させる
  • claudeの設定についても、まだ使いはじめなので充実させたい。

dotfiles は一度作って終わりではなく、普段の作業に合わせて育てていくものだと改めて感じた。
その意味では、現時点でちょうどよいサイズ感になっている。

余談

Windows Terminalはこの設定が良いなと思ったのでメモ。

項目設定値
配色One Half Dark
フォント フェイスJetBrainsMono Nerd Font Mono
フォントサイズ11
windows-terminal-02

参考

おわりに

今までdotfilesを使っていなかったことを少し後悔するくらいには、環境構築が楽になった。
dotfiles を使い始める前は、まあそのうちやろうかな、くらいの気持ちだったが、実際にやってみると、環境構築の手間が大幅に減り、設定の再現性も上がった。
これも、claudeChatGPT などの AI ツールを活用して、リポジトリの構成やスクリプトの内容を整理しながら進められたおかげだと思う。

環境構築の設定について、実際に整理してみると、複数環境をまたぐ開発ではかなり相性がよいと感じた。
特に、chezmoi で設定ファイルを管理し、mise でツールバージョンを揃える形は分かりやすく、今後も育てやすい。

しばらくはこの構成で WSL2 側を使い込みつつ、Mac 側でも同じ手順でどこまで素直に再現できるかを試していきたい。
ただ、使いはじめてzshが重かったりするので、設定を見直したりもしていきたい…!

Hugo で構築されています。
テーマ StackJimmy によって設計されています。