zsh のカスタマイズ — starship プロンプト、履歴、エイリアス、プラグイン
macOS デフォルトの zsh を 30 分で生産的なシェルにする。starship+履歴検索+autosuggestions+syntax highlighting。
macOS は Catalina 以降 zsh をデフォルトシェルとして採用しているが、デフォルト設定では多くの機能が眠ったままだ。Oh My Zsh を丸ごと入れると重くなり起動が遅くなる。このガイドでは必要なものだけをカスタマイズする — starship プロンプト、履歴検索、autosuggestions、syntax highlighting、fzf、そして 5 つの便利なエイリアス。シェルのカスタマイズは便利機能の追加ではなく、摩擦の除去にあると考える — 以前は Oh My Zsh を全部入れていたが、いまでは必要なものだけに絞ることが起動速度と管理コストを両立させる唯一の方法だとわかっている。
対象は Mac の初期セットアップを終えて zsh を磨きたい人 — dotfiles で他のマシンにも .zshrc を同期することも含む。
TL;DR
- starship — 高速で美しいプロンプト(Oh My Zsh より軽量)
- zsh-autosuggestions — 履歴ベースのグレーサジェスション(fish スタイル)
- zsh-syntax-highlighting — 入力しながらコマンドに色をつける
- fzf シェル統合 — モダンな
Ctrl+R履歴検索 - dotfiles の chezmoi で
.zshrcをコミットして他のマシンに反映
前提条件
- macOS 14 以降+Homebrew(Mac 初期セットアップ)
- Nerd Font 対応ターミナル — Terminal.app、WezTerm/iTerm2
1. デフォルト zsh では足りない理由
- プロンプトに git 情報がない — ブランチや dirty 状態が見えない
- 履歴検索が弱い —
Ctrl+Rはあるがファジー検索ではない - オートコンプリートが限定的 — Tab 補完は動くが fish スタイルのグレーサジェスションはない
- syntax highlighting がない — タイポが実行後にはじめてわかる
これを解消すると毎日の作業で効果を実感できる。
2. starship プロンプト(5 分)
starship.rs — Rust 製の高速なクロスシェルプロンプト。oh-my-zsh の Powerlevel10k より軽量で、起動オーバーヘッドはほぼゼロだ。
2.1 インストール
brew install starship.zshrc の末尾に:
eval "$(starship init zsh)"新しいターミナルを開くと即座に適用される。
2.2 Nerd Font(アイコン用)
starship の git ブランチアイコンや言語アイコンを表示するには Nerd Font が必要だ。
brew install --cask font-jetbrains-mono-nerd-fontターミナルのフォントを JetBrainsMono Nerd Font に変更する。(WezTerm ガイド を参照。)
2.3 カスタマイズ(任意)
~/.config/starship.toml:
# 2 行プロンプト — 情報を上に、入力を下に
add_newline = true
format = """
$directory$git_branch$git_status$nodejs$python$rust$line_break$character"""
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"
[directory]
truncation_length = 3
truncate_to_repo = true
[git_branch]
symbol = " "
style = "bold purple"
[git_status]
conflicted = "⚠️ "
ahead = "⇡${count} "
behind = "⇣${count} "
staged = "[+${count}](green) "
modified = "[!${count}](yellow) "
untracked = "[?${count}](red) "デフォルトで十分優れている — まず
starship.tomlなしで使い始め、気になった点だけ調整するとよい。
3. 履歴 — デフォルトの問題を直す
.zshrc に追記:
# 履歴サイズ
HISTSIZE=50000 # メモリに保持する行数
SAVEHIST=100000 # ファイルに保存する行数
HISTFILE="$HOME/.zsh_history"
# 重複排除+即時保存
setopt HIST_IGNORE_ALL_DUPS # 重複を削除
setopt HIST_REDUCE_BLANKS # 空白のみの差異をマージ
setopt HIST_VERIFY # `!42` スタイルの展開を自動実行しない
setopt SHARE_HISTORY # すべての zsh インスタンスで履歴を共有
setopt INC_APPEND_HISTORY # 即座に履歴ファイルに追記
setopt EXTENDED_HISTORY # タイムスタンプ+実行時間
# 上/下矢印 — プレフィックスマッチ検索
autoload -U up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # 上矢印
bindkey "^[[B" down-line-or-beginning-search # 下矢印効果: git c と入力して ↑ を押すと、git c で始まる過去のコマンドだけが循環する。
4. zsh-autosuggestions(3 分)
fish スタイルのグレーサジェスションを表示する。Tab または → で承認する。
brew install zsh-autosuggestions.zshrc の末尾に:
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# グレートーン(デフォルトは暗すぎる場合がある)
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#5f5f5f'
# 非常に長いコマンドではサジェスションをスキップ(パフォーマンス)
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=80新しいターミナルでコマンドを入力してグレーのサジェスションが表示されれば OK。
5. zsh-syntax-highlighting(2 分)
入力しながらコマンドに色をつける — 有効コマンドは緑、無効は赤、オプションは黄色など。
brew install zsh-syntax-highlighting.zshrc の末尾に — zsh-autosuggestions の後でなければならない:
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh順序が重要:
- autosuggestions
- syntax-highlighting(最後でなければならない)
逆にすると、両方がときどき壊れる。
6. fzf — モダンな Ctrl+R 履歴検索
デフォルトの Ctrl+R は 1 行ずつ遡るだけだ。fzf はファジー検索+インタラクティブプレビューを提供する。
brew install fzf
$(brew --prefix)/opt/fzf/install --allインストールスクリプトが .zshrc に追記する:
[ -f ~/.fzf.zsh ] && source ~/.fzf.zshCtrl + R— ファジー履歴検索Ctrl + T— カレントディレクトリのファジーファイル選択(例:vim <Ctrl+T>)Alt + C— ファジーcd
詳細: Mac 初期セットアップ §3.2。
7. 5 つの便利なエイリアス
.zshrc または別の ~/.zsh_aliases(推奨):
# git
alias g='git'
alias gs='git status -s'
alias gd='git diff'
alias gco='git checkout'
alias gp='git push'
alias gl='git log --oneline --graph --decorate -20'
# ファイルシステム(eza — モダンな ls)
alias ls='eza --git --group-directories-first'
alias ll='eza -l --git --group-directories-first --icons'
alias la='eza -la --git --group-directories-first --icons'
alias tree='eza --tree --level=3'
# ディレクトリナビゲーション
alias ..='cd ..'
alias ...='cd ../..'
# リロード
alias zrl='source ~/.zshrc'
# エディター(VS Code または Cursor)
alias c='code .'1 文字エイリアスは衝突のリスクがある。
g(git)とc(code)は意図が明確なら問題ない。
8. ディレクトリジャンプ — zoxide
cd /Users/me/projects/myapp の代わりに z myapp で一発ジャンプできる。頻繁に訪れるディレクトリを自動学習する。
brew install zoxide.zshrc:
eval "$(zoxide init zsh --cmd cd)" # cd 自体を zoxide で置き換え普通に cd を使うだけで zoxide が学習する。その後 cd myapp のように部分的な名前でジャンプできるようになる。
9. 完全な .zshrc 例
上記をすべて組み合わせた完全なリファレンス:
# ~/.zshrc
# ─────────────────────────────────────────────
# PATH
# ─────────────────────────────────────────────
export PATH="$HOME/.local/bin:$PATH"
# ─────────────────────────────────────────────
# 履歴
# ─────────────────────────────────────────────
HISTSIZE=50000
SAVEHIST=100000
HISTFILE="$HOME/.zsh_history"
setopt HIST_IGNORE_ALL_DUPS HIST_REDUCE_BLANKS HIST_VERIFY
setopt SHARE_HISTORY INC_APPEND_HISTORY EXTENDED_HISTORY
# 上/下 — プレフィックス検索
autoload -U up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search
bindkey "^[[B" down-line-or-beginning-search
# ─────────────────────────────────────────────
# エイリアス
# ─────────────────────────────────────────────
alias g='git'
alias gs='git status -s'
alias gd='git diff'
alias gp='git push'
alias gl='git log --oneline --graph --decorate -20'
alias ls='eza --git --group-directories-first'
alias ll='eza -l --git --group-directories-first --icons'
alias la='eza -la --git --group-directories-first --icons'
alias ..='cd ..'
alias ...='cd ../..'
alias zrl='source ~/.zshrc'
alias c='code .'
# ─────────────────────────────────────────────
# プラグイン(順序が重要)
# ─────────────────────────────────────────────
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#5f5f5f'
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=80
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# ─────────────────────────────────────────────
# ツール
# ─────────────────────────────────────────────
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
eval "$(mise activate zsh)" # 言語バージョンマネージャー — /mac/dev-toolchain
eval "$(zoxide init zsh --cmd cd)"
# ─────────────────────────────────────────────
# プロンプト
# ─────────────────────────────────────────────
eval "$(starship init zsh)"10. 確認
# 新しいターミナルで
type starship # /opt/homebrew/bin/starship
ZSH_AUTOSUGGEST_USE_ASYNC=true # autosuggest が有効
echo $HISTSIZE # 50000
# starship プロンプト
cd ~/work/myrepo # プロンプトに git ブランチ+言語アイコンが表示される
# サジェスション
git c # グレーのサジェスション — Tab で承認
# fzf
history | head # 「git c」と入力して Ctrl+R — ファジー検索11. トラブルシューティング
プロンプトが壊れたグリフ(▢▢)でいっぱい
Nerd Font がない。font-jetbrains-mono-nerd-font を brew でインストールして、ターミナルのフォントを変更する。
command not found: starship
which starshipが何も返さない → brew のプレフィックスが PATH にあるか?- Apple Silicon:
.zprofileにeval "$(/opt/homebrew/bin/brew shellenv)"があるか確認
新しいターミナルの起動が遅い(1 秒以上)
.zshrc内の重いコマンド(nvmなど)を遅延ロードするzprofでプロファイリング: 先頭にzmodload zsh/zprof、末尾にzprof | head -20を追加して計測する
autosuggestions が表示されない
.zshrcの順序: autosuggestions の後に syntax-highlightingZSH_AUTOSUGGEST_HIGHLIGHT_STYLEが背景色に近すぎる場合があるunset ZSH_AUTOSUGGEST_HIGHLIGHT_STYLEでデフォルトを試す
syntax-highlighting が入力直後にちらつく
- WezTerm/iTerm2 の「Render fast」をオフにする
- または
ZSH_HIGHLIGHT_MAXLENGTH=300で非常に長い行のハイライトを無効化
zsh: no matches found: *.txt
zsh のグロビングはデフォルトで厳格だ。.zshrc に setopt NULL_GLOB を追加するか、エスケープして \*.txt と入力する。
12. 次のステップ
- Mac 初期セットアップ — /mac/initial-setup
- ターミナル — WezTerm / iTerm2 — /mac/terminal
- chezmoi で dotfiles 管理 — /mac/dotfiles —
.zshrcを複数マシンで同期 - 言語ツールチェーン(mise) — /mac/dev-toolchain
参考リンク
更新履歴
- 2026-05-16: 初稿。starship+履歴+autosuggestions+syntax-highlighting+fzf+エイリアス+zoxide+完全な .zshrc 例+6 つのトラブルシューティングケース。