個人的開発環境 2026春 — chezmoiで管理するモダンzsh環境

きっかけ

nokogiriさんの記事を読んで、自分も晒してみようという気持ちになりました。もう10年以上dotfilesを育てていて、chezmoiに移行してからは新しいMacでもchezmoi apply一発で環境が再現できるようになっています。

この記事では、grep/rm/findをモダンCLIに置き換えた設定と、fzfを使ったキーバインド、ターミナルの使い分けを紹介します。

ツール一覧

まず全体像から。Brewfileで管理しているツール群を用途別にまとめました。

用途 ツール 何をするか
dotfiles管理 chezmoi テンプレート対応のdotfiles管理
プラグイン管理 zsh-abbr 展開されるエイリアス
ファジー検索 fzf あらゆるリストの絞り込み
ディレクトリ移動 zoxide 使用頻度ベースのcd
リポジトリ管理 ghq Goスタイルのリポジトリ管理
履歴検索 atuin シェル履歴の同期・検索
プロンプト Powerlevel10k 高速起動のzshテーマ
バージョン管理 mise 言語ランタイムの切り替え
Git TUI lazygit ターミナルでGit操作
Docker TUI lazydocker ターミナルでDocker操作
ls代替 eza カラフルなファイル一覧
grep代替 ripgrep 高速な全文検索
find代替 fd 直感的なファイル検索
cat代替 gat シンタックスハイライト付きcat
rm代替 trash ゴミ箱に入れるrm
diff表示 git-delta 見やすいgit diff
man代替 tealdeer コマンドの使い方を例で表示
ターミナル Kitty + cmux 用途で使い分け
MySQL接続管理 mysh SSHトンネル対応のMySQL接続マネージャー
Markdown表示 glowm Mermaid図も描画できるMarkdown CLI

セットアップ

1. Homebrewでインストール

brew bundle --file=Brewfile

Brewfileにツールを全部書いてあるので、これ1行で入ります。

2. chezmoiでdotfilesを適用

chezmoi init --apply dotfiles

シンボリックリンクを手で張る必要はありません。chezmoiがdot_zshrc~/.zshrcに、dot_config/kitty/~/.config/kitty/に、それぞれ展開してくれます。テンプレート(.tmpl)を使えば、会社PCと私物PCで設定を出し分けることもできます。

3. フォントを設定

ターミナルのフォントを Hack Nerd Font Mono に変更します。Nerd Fontを入れないとアイコンが豆腐になります。

4. シェルを再起動

exec zsh

便利ツール紹介

ここからが本題です。日常的に使っている便利機能を紹介します。

zsh-abbr — 展開されるエイリアス

普通のaliasと違って、入力した瞬間にフルコマンドへ展開されるのがzsh-abbrの特長です。展開後のコマンドが見えるので、何を実行しようとしているか常にわかります。

zsh-abbrの展開デモ
abbr -S g='git'
abbr -S gs='git status'      # -f で強制展開
abbr -S gc='git checkout'
abbr -S v='nvim'
abbr -S l='eza'
abbr -S c='claude'
abbr -S j='z'                 # zoxideのz
abbr -S cm='chezmoi'
abbr -S d='docker'

もう1つ強力なのが、既存コマンドの強制置き換えです。grepと打つとrgに、rmと打つとtrashに展開されます。

abbr -f -S grep='rg'
abbr -f -S sed='sd'
abbr -f -S find='fd'
abbr -f -S rm='trash'
abbr -f -S man='tldr'
abbr -f -S curl='https'

rmが常にtrashに展開されるので、うっかりファイルを消してもゴミ箱から戻せます。地味ですが何度か助けられています。

Ctrl+T — ghqリポジトリ検索

ghqで管理しているリポジトリの中から、fzfで絞り込んでcdします。

fzf + ghqのリポジトリ検索デモ
function fzf-src () {
    local selected_dir=$(ghq list --full-path | fzf 
        --preview 'eza --tree --level=1 --color=always {}')
    if [ -n "$selected_dir" ]; then
        BUFFER="cd ${selected_dir}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N fzf-src
bindkey '^t' fzf-src

プレビュー欄にezaのツリー表示が出るので、どのリポジトリか一目でわかります。

Ctrl+R — 履歴検索

fzfで過去のコマンド履歴をインクリメンタル検索します。

fzf履歴検索デモ
function fzf-select-history() {
    BUFFER=$(history -n 1 | tail -r | fzf --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N fzf-select-history
bindkey '^r' fzf-select-history

atuinも入れているので、複数マシン間で履歴を同期できます。

Ctrl+O — コミットURLをコピー

git logからコミットを選ぶと、GitHubのコミットURLがクリップボードにコピーされます。PRやSlackにコミットリンクを貼るときに使います。

function fzf-git-hashes () {
    local selected="$(git log --format="%ai  %h  %an  %d %s" | fzf)"
    if [ -n "$selected" ]; then
        local remote="$(git remote -v | grep fetch | awk '{print $2}' | 
            perl -pe 's/ssh:////' | perl -pe 's/:///' | 
            perl -pe 's/git@/https:///' | perl -pe 's/.git$//')"
        local hash=$(echo $selected | awk '{print $3}')
        local url="${remote}/commit/${hash}"
        echo "${url}" | pbcopy
        BUFFER="open ${url}"
        zle accept-line
    fi
}
zle -N fzf-git-hashes
bindkey '^o' fzf-git-hashes

mysh — MySQL接続マネージャー

自作のCLIツールです。SSHトンネル経由のMySQL接続を、設定ファイルで管理して1コマンドで接続できます。

mysh connect staging

接続先の設定は~/.config/mysh/connections.tomlに書いておくだけ。SSHトンネルの確立からMySQLクライアントの起動まで自動でやってくれます。踏み台サーバー経由でstaging/productionに接続する運用で、毎回SSHトンネルを手動で張る手間がなくなりました。

GitHub: atani/mysh

glowm — Mermaid対応Markdown CLI

こちらも自作です。Glowと同じようにターミナルでMarkdownを読めますが、Mermaid図をiTerm2やKittyのインライン画像として描画できます。

glowm README.md           # ターミナルでMarkdownを表示
glowm --pdf README.md     # Mermaid図をPDF出力

コードレビュー中、設計ドキュメントを確認したいとき、ブラウザへ切り替えずターミナルで完結できます。

GitHub: atani/glowm

eza — モダンなls

ezaのデモ

lと打てばezaに展開されます。ファイルタイプごとに色分けされ、Gitのステータスも表示されます。llで詳細表示です。

モダンCLI置き換えまとめ

モダンCLI置き換えデモ
元コマンド 置き換え先 何が変わるか
ls eza 色、アイコン、Gitステータス
grep ripgrep 高速、.gitignore自動対応
find fd 直感的な構文、高速
rm trash ゴミ箱に移動(復元可能)
cat gat シンタックスハイライト
man tealdeer 実例ベースのヘルプ
sed sd 正規表現が楽
curl httpie(httpsコマンド) 人間が読めるHTTPクライアント
diff git-delta 行内diff、シンタックスハイライト

ターミナル — Kitty + cmux

ターミナルは用途で2つ使い分けています。

Claude Codeでの作業にはcmuxを使っています。Ghosttyベースのターミナルで、縦タブと通知機能があり、AIエージェントの長時間タスクを複数走らせるのに向いています。日本語フォント周りの改善でコントリビュートもしました。ちょっとした作業やSSH接続ではKittyを使っています。

KittyはGPUレンダリングで描画が速いです。自作のNavy Blueテーマを適用し、目が疲れない配色にしています。

# Navy Blue Theme
background #1a2535
foreground #a8b5c8
cursor #7aa2a2

# Splits(Cmd+D で左右分割)
map cmd+d launch --location=vsplit --cwd=current
map cmd+shift+d launch --location=hsplit --cwd=current

# ペーン移動
map cmd+[ neighboring_window left
map cmd+] neighboring_window right

フォントはHack Nerd Font Mono、日本語はHiragino Sansです。copy_on_select clipboardで選択すると即クリップボードにコピーされます。

プロンプト — Powerlevel10k

Starshipも試しましたが、Powerlevel10kのinstant prompt(プロンプトが瞬時に表示される機能)が手放せなくてこちらを使っています。zshの起動時にプロンプトだけ先に描画されるので、重い初期化処理があっても体感速度が落ちません。

左にディレクトリとGitブランチ、右にコマンド実行時間とバックグラウンドジョブ数を表示しています。

言語バージョン管理 — mise

プロジェクトごとに.mise.tomlを置いて、cdした瞬間にNode.js / Ruby / Python / Goのバージョンが切り替わります。asdfからの移行組で、個人的にはmiseのほうがシンプルで速く感じています。

[tools]
node = "latest"
go = "latest"
ruby = "latest"
python = "3.13.5"

まとめ

やりたいこと 実現方法
dotfiles管理 chezmoi(テンプレート対応)
コマンド短縮 zsh-abbr(展開が見える)
ディレクトリ移動 zoxide + fzf
リポジトリ検索 ghq + fzf
履歴検索 fzf + atuin
プロンプト Powerlevel10k(instant prompt)
モダンCLI eza, rg, fd, trash, gat, sd
ターミナル Kitty + cmux(用途で使い分け)
MySQL接続管理 mysh(SSHトンネル対応)
Markdown表示 glowm(Mermaid図対応)
バージョン管理 mise

chezmoiでdotfilesを管理しておけば、新しいMacが来てもbrew bundlechezmoi applyで環境が再現できます。ツール選びに正解はないですが、自分の手に馴染む道具を育てていくのは楽しいです。

個人的開発環境 2026春 — chezmoiで管理するモダンzsh環境

きっかけ

nokogiriさんの記事を読んで、自分も晒してみようという気持ちになりました。もう10年以上dotfilesを育てていて、chezmoiに移行してからは新しいMacでもchezmoi apply一発で環境が再現できるようになっています。

この記事では、grep/rm/findをモダンCLIに置き換えた設定と、fzfを使ったキーバインド、ターミナルの使い分けを紹介します。

ツール一覧

まず全体像から。Brewfileで管理しているツール群を用途別にまとめました。

用途 ツール 何をするか
dotfiles管理 chezmoi テンプレート対応のdotfiles管理
プラグイン管理 zsh-abbr 展開されるエイリアス
ファジー検索 fzf あらゆるリストの絞り込み
ディレクトリ移動 zoxide 使用頻度ベースのcd
リポジトリ管理 ghq Goスタイルのリポジトリ管理
履歴検索 atuin シェル履歴の同期・検索
プロンプト Powerlevel10k 高速起動のzshテーマ
バージョン管理 mise 言語ランタイムの切り替え
Git TUI lazygit ターミナルでGit操作
Docker TUI lazydocker ターミナルでDocker操作
ls代替 eza カラフルなファイル一覧
grep代替 ripgrep 高速な全文検索
find代替 fd 直感的なファイル検索
cat代替 gat シンタックスハイライト付きcat
rm代替 trash ゴミ箱に入れるrm
diff表示 git-delta 見やすいgit diff
man代替 tealdeer コマンドの使い方を例で表示
ターミナル Kitty + cmux 用途で使い分け
MySQL接続管理 mysh SSHトンネル対応のMySQL接続マネージャー
Markdown表示 glowm Mermaid図も描画できるMarkdown CLI

セットアップ

1. Homebrewでインストール

brew bundle --file=Brewfile

Brewfileにツールを全部書いてあるので、これ1行で入ります。

2. chezmoiでdotfilesを適用

chezmoi init --apply dotfiles

シンボリックリンクを手で張る必要はありません。chezmoiがdot_zshrc~/.zshrcに、dot_config/kitty/~/.config/kitty/に、それぞれ展開してくれます。テンプレート(.tmpl)を使えば、会社PCと私物PCで設定を出し分けることもできます。

3. フォントを設定

ターミナルのフォントを Hack Nerd Font Mono に変更します。Nerd Fontを入れないとアイコンが豆腐になります。

4. シェルを再起動

exec zsh

便利ツール紹介

ここからが本題です。日常的に使っている便利機能を紹介します。

zsh-abbr — 展開されるエイリアス

普通のaliasと違って、入力した瞬間にフルコマンドへ展開されるのがzsh-abbrの特長です。展開後のコマンドが見えるので、何を実行しようとしているか常にわかります。

zsh-abbrの展開デモ
abbr -S g='git'
abbr -S gs='git status'      # -f で強制展開
abbr -S gc='git checkout'
abbr -S v='nvim'
abbr -S l='eza'
abbr -S c='claude'
abbr -S j='z'                 # zoxideのz
abbr -S cm='chezmoi'
abbr -S d='docker'

もう1つ強力なのが、既存コマンドの強制置き換えです。grepと打つとrgに、rmと打つとtrashに展開されます。

abbr -f -S grep='rg'
abbr -f -S sed='sd'
abbr -f -S find='fd'
abbr -f -S rm='trash'
abbr -f -S man='tldr'
abbr -f -S curl='https'

rmが常にtrashに展開されるので、うっかりファイルを消してもゴミ箱から戻せます。地味ですが何度か助けられています。

Ctrl+T — ghqリポジトリ検索

ghqで管理しているリポジトリの中から、fzfで絞り込んでcdします。

fzf + ghqのリポジトリ検索デモ
function fzf-src () {
    local selected_dir=$(ghq list --full-path | fzf 
        --preview 'eza --tree --level=1 --color=always {}')
    if [ -n "$selected_dir" ]; then
        BUFFER="cd ${selected_dir}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N fzf-src
bindkey '^t' fzf-src

プレビュー欄にezaのツリー表示が出るので、どのリポジトリか一目でわかります。

Ctrl+R — 履歴検索

fzfで過去のコマンド履歴をインクリメンタル検索します。

fzf履歴検索デモ
function fzf-select-history() {
    BUFFER=$(history -n 1 | tail -r | fzf --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N fzf-select-history
bindkey '^r' fzf-select-history

atuinも入れているので、複数マシン間で履歴を同期できます。

Ctrl+O — コミットURLをコピー

git logからコミットを選ぶと、GitHubのコミットURLがクリップボードにコピーされます。PRやSlackにコミットリンクを貼るときに使います。

function fzf-git-hashes () {
    local selected="$(git log --format="%ai  %h  %an  %d %s" | fzf)"
    if [ -n "$selected" ]; then
        local remote="$(git remote -v | grep fetch | awk '{print $2}' | 
            perl -pe 's/ssh:////' | perl -pe 's/:///' | 
            perl -pe 's/git@/https:///' | perl -pe 's/.git$//')"
        local hash=$(echo $selected | awk '{print $3}')
        local url="${remote}/commit/${hash}"
        echo "${url}" | pbcopy
        BUFFER="open ${url}"
        zle accept-line
    fi
}
zle -N fzf-git-hashes
bindkey '^o' fzf-git-hashes

mysh — MySQL接続マネージャー

自作のCLIツールです。SSHトンネル経由のMySQL接続を、設定ファイルで管理して1コマンドで接続できます。

mysh connect staging

接続先の設定は~/.config/mysh/connections.tomlに書いておくだけ。SSHトンネルの確立からMySQLクライアントの起動まで自動でやってくれます。踏み台サーバー経由でstaging/productionに接続する運用で、毎回SSHトンネルを手動で張る手間がなくなりました。

GitHub: atani/mysh

glowm — Mermaid対応Markdown CLI

こちらも自作です。Glowと同じようにターミナルでMarkdownを読めますが、Mermaid図をiTerm2やKittyのインライン画像として描画できます。

glowm README.md           # ターミナルでMarkdownを表示
glowm --pdf README.md     # Mermaid図をPDF出力

コードレビュー中、設計ドキュメントを確認したいとき、ブラウザへ切り替えずターミナルで完結できます。

GitHub: atani/glowm

eza — モダンなls

ezaのデモ

lと打てばezaに展開されます。ファイルタイプごとに色分けされ、Gitのステータスも表示されます。llで詳細表示です。

モダンCLI置き換えまとめ

モダンCLI置き換えデモ
元コマンド 置き換え先 何が変わるか
ls eza 色、アイコン、Gitステータス
grep ripgrep 高速、.gitignore自動対応
find fd 直感的な構文、高速
rm trash ゴミ箱に移動(復元可能)
cat gat シンタックスハイライト
man tealdeer 実例ベースのヘルプ
sed sd 正規表現が楽
curl httpie(httpsコマンド) 人間が読めるHTTPクライアント
diff git-delta 行内diff、シンタックスハイライト

ターミナル — Kitty + cmux

ターミナルは用途で2つ使い分けています。

Claude Codeでの作業にはcmuxを使っています。Ghosttyベースのターミナルで、縦タブと通知機能があり、AIエージェントの長時間タスクを複数走らせるのに向いています。日本語フォント周りの改善でコントリビュートもしました。ちょっとした作業やSSH接続ではKittyを使っています。

KittyはGPUレンダリングで描画が速いです。自作のNavy Blueテーマを適用し、目が疲れない配色にしています。

# Navy Blue Theme
background #1a2535
foreground #a8b5c8
cursor #7aa2a2

# Splits(Cmd+D で左右分割)
map cmd+d launch --location=vsplit --cwd=current
map cmd+shift+d launch --location=hsplit --cwd=current

# ペーン移動
map cmd+[ neighboring_window left
map cmd+] neighboring_window right

フォントはHack Nerd Font Mono、日本語はHiragino Sansです。copy_on_select clipboardで選択すると即クリップボードにコピーされます。

プロンプト — Powerlevel10k

Starshipも試しましたが、Powerlevel10kのinstant prompt(プロンプトが瞬時に表示される機能)が手放せなくてこちらを使っています。zshの起動時にプロンプトだけ先に描画されるので、重い初期化処理があっても体感速度が落ちません。

左にディレクトリとGitブランチ、右にコマンド実行時間とバックグラウンドジョブ数を表示しています。

言語バージョン管理 — mise

プロジェクトごとに.mise.tomlを置いて、cdした瞬間にNode.js / Ruby / Python / Goのバージョンが切り替わります。asdfからの移行組で、個人的にはmiseのほうがシンプルで速く感じています。

[tools]
node = "latest"
go = "latest"
ruby = "latest"
python = "3.13.5"

まとめ

やりたいこと 実現方法
dotfiles管理 chezmoi(テンプレート対応)
コマンド短縮 zsh-abbr(展開が見える)
ディレクトリ移動 zoxide + fzf
リポジトリ検索 ghq + fzf
履歴検索 fzf + atuin
プロンプト Powerlevel10k(instant prompt)
モダンCLI eza, rg, fd, trash, gat, sd
ターミナル Kitty + cmux(用途で使い分け)
MySQL接続管理 mysh(SSHトンネル対応)
Markdown表示 glowm(Mermaid図対応)
バージョン管理 mise

chezmoiでdotfilesを管理しておけば、新しいMacが来てもbrew bundlechezmoi applyで環境が再現できます。ツール選びに正解はないですが、自分の手に馴染む道具を育てていくのは楽しいです。

コメント

タイトルとURLをコピーしました