きっかけ
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の特長です。展開後のコマンドが見えるので、何を実行しようとしているか常にわかります。

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します。

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で過去のコマンド履歴をインクリメンタル検索します。

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

lと打てばezaに展開されます。ファイルタイプごとに色分けされ、Gitのステータスも表示されます。llで詳細表示です。
モダン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 bundleとchezmoi applyで環境が再現できます。ツール選びに正解はないですが、自分の手に馴染む道具を育てていくのは楽しいです。


コメント