fzfでLinuxターミナルを高速化:ファイルやコマンド履歴を爆速で検索する

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

なぜfzfは私にとって「手放せないツール」なのか?

/etc の奥深くに埋もれた設定ファイルを探したり、先週実行した Docker コマンドを必死に思い出そうとするのは、本当にストレスが溜まる作業です。従来の方法では history | grepfind を使いますが、履歴が5,000行を超えると動作が重くなり、効率も悪くなります。

私はこの半年間、個人用PCから本番サーバーまですべてに fzf を導入してきました。今思えば、もっと早く知っておけばよかったと後悔するほどです。fzf は Go 言語で書かれたコマンドラインの曖昧検索(fuzzy finder)ツールで、非常に軽量かつレスポンスが驚くほど速いのが特徴です。

最大のメリットは「曖昧検索(fuzzy search)」機能です。正確なスペルを打ち込まなくても、記憶にある数文字を入力するだけで、リアルタイムに候補が絞り込まれます。実務でのシステム管理において、fzf は「履歴からのコマンド検索」「ファイルのクイックオープン」「ハングアップしたプロセスのクリーンアップ」の3つの操作を非常にスマートにしてくれます。

fzf の全機能を活用するためのインストール方法

Ubuntu や Debian などのディストリビューションでは、パッケージマネージャーからインストール(sudo apt install fzf)することも可能ですが、私は Git 経由でのインストールを推奨します。この方法なら最新バージョンを利用でき、便利なショートカットキーを有効にするスクリプトも自動で設定できるからです。

# リポジトリをホームディレクトリにクローン
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf

# インストールスクリプトを実行
~/.fzf/install

インストール中、スクリプトから3つの質問が表示されます。すべて Y と入力してください:

  • Fuzzy auto-completion: cd **[TAB] と入力してディレクトリを高速検索できるようになります。
  • Key bindings: CTRL-R や CTRL-T などのショートカットキーを有効にします。
  • Update shell configuration: .bashrc に設定を自動追加します。

インストール完了後、source ~/.bashrc を実行して設定を反映させましょう。

作業をプロフェッショナルにするショートカットキー

デフォルトのショートカットを活用する

私が毎日100回以上は叩いている、3つの必須ショートカットを紹介します:

  • CTRL-R: Bash の標準的な履歴検索を完全に置き換えます。「nginx reload」と入力するだけで、必要なコマンドを瞬時に見つけ出せます。
  • CTRL-T: コマンド入力中にファイルを素早く検索して挿入できます。例えば、vim [CTRL-T] と入力してファイルを選択すると、そのファイル名が自動的に入力されます。
  • ALT-C: サブディレクトリへ高速に移動します。長いパスを入力する必要はなく、fzf のリストからディレクトリを選択するだけです。

fd との連携でファイルスキャンを10倍速くする

fzf はデフォルトで find コマンドを使用しますが、これは動作が比較的遅く、.gitnode_modules などの不要なディレクトリまでスキャンしてしまいます。大規模なプロジェクトでは、fd に置き換えることでスキャン速度を劇的に向上させることができます。

sudo apt install fd-find で fd をインストールし、以下のコードを .bashrc の末尾に追加してください:

# find の代わりに fd を使用し、隠しファイルや .git ディレクトリを除外する
export FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

プレビューウィンドウ:開かずに中身を確認する

ファイルの中身を確認するためにいちいち開くのではなく、プレビュー機能を使いましょう。シンタックスハイライト(色付け)を有効にして見やすくするために、bat コマンドを併用するのがおすすめです。

# CTRL-T でファイルの冒頭500行をプレビューするように設定
export FZF_CTRL_T_OPTS="--preview 'bat --color=always --line-range :500 {}'"

これで CTRL-T を押すたびに、右側のウィンドウにファイルの内容が分かりやすく表示されるようになります。

ハングアップしたプロセスを素早く処理する

サーバーが重くなったときps aux | grep... を叩いて PID を手動でコピーする代わりに、.bashrc に以下の関数を追加して、数秒でプロセスを終了させています:

fkill() {
  local pid
  pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')

  if [ "x$pid" != "x" ]
  then
    echo $pid | xargs kill -${1:-9}
  fi
}

fkill と入力し、矢印キーか名前検索でプロセスを選び、Enter を押すだけです。Tab キーを使えば、複数のプロセスを同時に選択して終了させることも可能です。

3年間の使用で得た実戦的なヒント

fzf を使いこなすのは難しくありませんが、あらゆる環境でスムーズに使うための注意点がいくつかあります:

1. システムリソース fzf は非常にメモリ効率が良く、数万個েরファイルを処理する場合でも通常 20MB 以下しか消費しません。低スペックの VPS でも安心して導入できます。

2. 巨大なディレクトリの処理: 10万ファイルを超えるようなディレクトリで作業する場合は、必ず fd を使い、/proc/sys などの仮想ディレクトリを除外して検索がハングアップするのを防ぎましょう。

3. SSH 使用時の注意点: リモートサーバーに fzf がインストールされていない場合、当然ながらショートカットは動作しません。私はワークフローを止めないために、主要な管理対象サーバーにはあらかじめ fzf を導入するようにしています。

fzf は Bash だけのものではありません。Vim ユーザーなら、ソースコード検索のための強力なプラグインも利用できます。しかし、コマンドラインで fzf を使うだけでも、退屈な繰り返し作業から解放され、毎日少なくとも30分は時間を節約できるはずです。

まずは1週間、CTRL-R と CTRL-T を使ってみてください。もう二度と、以前のような手動のコマンド入力には戻りたくなくなるはずです。

Share: