devAlice
← Mac

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

  1. starship — 高速で美しいプロンプト(Oh My Zsh より軽量)
  2. zsh-autosuggestions — 履歴ベースのグレーサジェスション(fish スタイル)
  3. zsh-syntax-highlighting — 入力しながらコマンドに色をつける
  4. fzf シェル統合 — モダンな Ctrl+R 履歴検索
  5. dotfiles の chezmoi で .zshrc をコミットして他のマシンに反映

前提条件

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

順序が重要

  1. autosuggestions
  2. 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.zsh
  • Ctrl + 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: .zprofileeval "$(/opt/homebrew/bin/brew shellenv)" があるか確認

新しいターミナルの起動が遅い(1 秒以上)

  • .zshrc 内の重いコマンド(nvm など)を遅延ロードする
  • zprof でプロファイリング: 先頭に zmodload zsh/zprof、末尾に zprof | head -20 を追加して計測する

autosuggestions が表示されない

  • .zshrc の順序: autosuggestions の後に syntax-highlighting
  • ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE が背景色に近すぎる場合がある
  • unset ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE でデフォルトを試す

syntax-highlighting が入力直後にちらつく

  • WezTerm/iTerm2 の「Render fast」をオフにする
  • または ZSH_HIGHLIGHT_MAXLENGTH=300 で非常に長い行のハイライトを無効化

zsh: no matches found: *.txt

zsh のグロビングはデフォルトで厳格だ。.zshrcsetopt NULL_GLOB を追加するか、エスケープして \*.txt と入力する。


12. 次のステップ


参考リンク

更新履歴

  • 2026-05-16: 初稿。starship+履歴+autosuggestions+syntax-highlighting+fzf+エイリアス+zoxide+完全な .zshrc 例+6 つのトラブルシューティングケース。