arait-code’s RC

RailsとReact,Vue,TypeScriptメインのWEBエンジニアです。

Zshでコマンド履歴を快適に検索する方法(fzf導入ガイド)

問題点

ターミナルでCtrl+Rを使ってコマンド履歴を検索するとき、一つずつしか表示されず不便に感じたことはありませんか?特に似たようなコマンドを何度も実行している場合、目的のコマンドを見つけるのに時間がかかってしまいます。

解決策:fzfの導入

fzf(fuzzy finder)を使えば、コマンド履歴を一覧表示し、リアルタイムで絞り込み検索ができるようになります。

fzfのインストール

Homebrewを使う場合(macOS)

brew install fzf

aptを使う場合(Ubuntu/Debian)

sudo apt install fzf

Zshへの設定

.zshrcファイルを編集します。

vim ~/.zshrc

ファイルの末尾に以下を追加:

# fzfの設定
eval "$(fzf --zsh)"
export FZF_DEFAULT_OPTS='--height 40% --reverse --border'

設定を保存したら、反映させます:

source ~/.zshrc

使い方

設定後は、これまでと同じようにCtrl+Rを押すだけです。

すると、過去のコマンド履歴が一覧表示され: - 文字を入力するとリアルタイムで絞り込み - ↑↓キーで選択 - Enterキーで実行

非常に直感的で快適な操作が可能になります。

オプション設定のカスタマイズ

より見やすくしたい場合は、オプションを調整できます:

# プレビューウィンドウ付き
export FZF_DEFAULT_OPTS='--height 50% --reverse --border --preview-window=:hidden'

# 色をカスタマイズ
export FZF_DEFAULT_OPTS='--color=fg:#f8f8f2,bg:#282a36,hl:#bd93f9'

トラブルシューティング

Ctrl+Rが動作しない場合

キーバインドが設定されているか確認:

bindkey | grep fzf

"^R" fzf-history-widgetのような行が表示されればOKです。

表示されない場合は、.zshrcの設定を見直し、以下の形式になっているか確認してください:

eval "$(fzf --zsh)"

注意: source ~/.fzf.zshやsource <(fzf --zsh)ではなく、eval "$(fzf --zsh)"の形式を使用してください。

セキュリティに関する補足

fzfは広く使われているOSSで、GitHub上で6万以上のスターを獲得している信頼性の高いツールです。

ただし、履歴に機密情報を残さないよう、以下の設定も併せて行うことをおすすめします:

# パスワードやトークンを履歴に残さない
export HISTCONTROL=ignorespace
export HISTIGNORE="*password*:*token*:*secret*"

# 履歴ファイルのパーミッション設定
chmod 600 ~/.zsh_history

機密情報を扱うコマンドを実行する際は、コマンドの先頭にスペースを入れると履歴に残りません。

まとめ

fzfを導入することで、コマンド履歴の検索が劇的に快適になります。設定も簡単で、一度使うと手放せなくなるツールです。ぜひ試してみてください。


参考リンク - fzf GitHub リポジトリ - fzf 公式ドキュメント