Bash/Zsh のプロンプトを高速・快適にするカスタマイズTips

ターミナルのプロンプトは、毎日何百回も目にする UI です。
しかし、カスタマイズによっては「遅い」「情報過多で読みにくい」「補完がもたつく」といった問題が起きがちです。

この記事では、Bash/Zsh のプロンプトを 高速・快適・見やすい ものにする具体的なカスタマイズ Tips を紹介します。
Zsh を中心にしていますが、Bash でも流用できる内容です。

1. 遅いプロンプトの正体を知る

プロンプトの遅延が起きる主な原因は次の通りです。

  • Git のステータス情報を毎回取得している
  • Powerlevel10k などのテーマ設定が重い
  • 実行中のフックが多い (precmd / PROMPT_COMMAND)
  • 外部コマンドをプロンプト描画時に呼び出している
  • プラグインの読み込みコストが大きい

表示されるたびに外部コマンドが走ると、数百 ms〜1 秒近く遅くなることもあります。

2. Git 情報の負荷を軽減する

Git のステータスは非常に重い処理です。
高速化するための方法をいくつか紹介します。

2-1. gitstatus を使って高速化する(Zsh)

Powerlevel10k で使われている gitstatusd を単体で利用できます。
Git フォルダでも高速でステータス取得ができ、プロンプト遅延のほとんどが解決します。

brew install romkatv/gitstatus/gitstatus

Zsh のフックで呼び出すだけで高速化できます。

2-2. Git 情報を最低限にする

ブランチ名だけを表示し、変更数や差分は表示しない形にすると高速です。

parse_git_branch() {
  git branch 2>/dev/null | sed -n '/\* /s///p'
}
PROMPT='%n@%m:%~ $(parse_git_branch)%# '

Bash でも同様に利用できます。

2-3. 大規模リポジトリでは Git 情報を非表示にする

数万ファイルの巨大リポジトリでは Git 情報が出るだけで極端に遅くなります。

if [[ $(git rev-parse --show-toplevel 2>/dev/null | wc -c) -gt 0 && $(find . -maxdepth 1 | wc -l) -lt 500 ]]; then
  PROMPT='%F{green}($(parse_git_branch))%f %~ %# '
else
  PROMPT='%~ %# '
fi

3. プロンプトの構造を minimal にする

プロンプトは情報が多いほどよいわけではありません。
実際よく使う情報は以下程度が最適です。

  • カレントディレクトリ
  • Git ブランチ
  • Python/Node などのバージョン(任意)
  • exit code(任意)

必要最低限の情報にすると高速化にもつながります。

例: ミニマルな Zsh プロンプト

PROMPT='%n@%m %~$(parse_git_branch) %# '

4. プラグインマネージャーを高速なものに変える

Zsh の場合

  • 遅い: oh-my-zsh(便利だが重い)
  • 高速
    • Antidote
    • Znap
    • Zinit(高速設定が必要)

Antidote だけで十分高速です。

git clone --depth=1 https://github.com/mattmc3/antidote.git ~/.antidote
echo "source ~/.antidote/antidote.zsh" >> ~/.zshrc
echo "antidote load" >> ~/.zshrc

5. 外部コマンドをプロンプトに書かない

プロンプトで datewhoami のような外部コマンドを呼ぶのは避けましょう。
代わりにシェル組み込みで表現します。

遅い例

PROMPT='$(date +"%H:%M:%S") %~ %# '

速い例(Zsh 組み込み)

PROMPT='${strftime("%H:%M:%S")} %~ %# '

6. fzf / zoxide など補完ツールを適切に使う

プロンプト速度ではなく操作速度の最適化ですが、開発の体験が大きく改善します。

fzf

brew install fzf
$(brew --prefix)/opt/fzf/install

zoxide

brew install zoxide
echo 'eval "$(zoxide init zsh)"' >> ~/.zshrc

z で過去のディレクトリへ瞬時に移動できる便利ツールです。

7. Bash でも高速化できるポイント

Bash は Zsh よりプロンプト機能が少なめですが、次の点で高速化できます。

.bashrc で不要な設定を削る

  • brew 補完
  • 旧バージョンの nvm
  • git-prompt
  • pyenv 設定の多重ロード

などが遅延原因になることがあります。

PROMPT_COMMAND を短くする

複数のコマンドを記述しているとプロンプトが表示されるたびに遅くなります。

8. 高速で快適なプロンプト例(Zsh)

最終的に、自分が使っている高速版プロンプトを例として紹介します。

# git branch(高速版)
parse_git_branch() {
  git rev-parse --abbrev-ref HEAD 2>/dev/null
}

# プロンプト定義
PROMPT='%F{cyan}%n%f %F{yellow}%~%f %F{green}$(parse_git_branch)%f %# '

外部コマンドは git のみ、表示内容も最小構成なので非常に高速です。

まとめ

Bash/Zsh のプロンプトは、カスタマイズ次第で大幅に快適にできます。
特に高速化のポイントは次の通りです。

  1. Git 情報の取り扱いを最適化する
  2. プロンプト構造を簡潔にする
  3. 外部コマンドをプロンプトの中で実行しない
  4. プラグインマネージャーを高速なものにする
  5. fzf や zoxide で移動・補完の快適性を上げる
タイトルとURLをコピーしました