シェル履歴を爆速検索!atuinとfzfで効率化する管理・同期テクニック
シェル履歴をatuinとfzfで効率的に検索・管理・同期する方法を解説。インストールから設定、使い方まで実践的に紹介。
はじめに
シェルを使っていると、過去に入力したコマンドを再利用したい場面が頻繁にあります。デフォルトのCtrl+Rによる履歴検索も便利ですが、より高速で多機能なツールとしてatuinとfzfの組み合わせが注目されています。本記事では、atuinとfzfを使ってシェル履歴を効率的に検索・管理・同期する方法を解説します。
シェル履歴のデフォルト機能の限界
一般的なシェル(bash、zsh)の履歴機能には以下のような制約があります。
Ctrl+Rの応答が鈍くなる。これらの課題を解決するのがatuinとfzfです。
atuinとは
atuinは、シェル履歴をデータベースに保存し、高度な検索・暗号化・同期機能を提供するツールです。SQLiteベースで動作し、以下の特徴があります。
fzfとは
fzfは、コマンドライン用のあいまい検索ツールです。標準入力から受け取ったリストをインクリメンタルにフィルタリングし、選択結果を標準出力に返します。atuinと組み合わせることで、履歴検索をさらに快適にできます。
インストール方法
atuinのインストール
macOS (Homebrew)
brew install atuin
Linux (公式スクリプト)
bash <(curl https://raw.githubusercontent.com/atuinsh/atuin/main/install.sh)
その他 各ディストリビューションのパッケージマネージャーでもインストール可能です。詳細はatuinのドキュメントを参照。
fzfのインストール
<h1>macOS</h1>
brew install fzf
<h1>Linux (git clone)</h1>
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
基本的な設定
シェルにatuinを統合
atuinをインストールしたら、シェルの設定ファイル(.bashrc、.zshrcなど)に以下の行を追加します。
eval "$(atuin init zsh)" # zshの場合
<h1>または</h1>
eval "$(atuin init bash)" # bashの場合
シェルを再起動すると、自動的に履歴がatuinに記録されるようになります。
fzfとの連携設定
atuinはデフォルトでfzfと連携できます。以下のコマンドを設定ファイルに追加すると、Ctrl+Rでatuinの検索インターフェース(fzf利用)が起動します。
<h1>すでにeval "$(atuin init zsh)"を書いた後なら不要な場合もあるが、明示的に設定</h1>
bindkey '^R' atuin-search # zshの場合
bashの場合は、~/.bashrcに以下を追加。
bind -x '"\C-r": "atuin search"'
使い方
基本的な検索
Ctrl+Rを押すと、fzfのインターフェースが表示されます。コマンドの一部を入力すると、リアルタイムで絞り込みが行われます。選択してEnterでそのコマンドを実行、Escでキャンセルです。
高度な検索オプション
atuinはコマンドラインからも直接検索できます。
<h1>曖昧検索</h1>
atuin search docker
<h1>日付範囲指定</h1>
atuin search --before "2023-01-01" --after "2022-06-01"
<h1>カレントディレクトリのみ</h1>
atuin search --cwd
<h1>終了コードでフィルタ</h1>
atuin search --exit 0
履歴の同期
複数のマシン間で履歴を同期するには、atuinの同期機能を使います。まずatuinアカウントを作成し、ログインします。
atuin register -u <username> -e <email> -p <password>
atuin login -u <username> -p <password>
その後、各マシンでatuin syncを実行すると、履歴がサーバーにアップロード/ダウンロードされます。自動同期を有効にするには、設定ファイルに以下を追加。
export ATUIN_SYNC_INTERVAL=300 # 5分ごとに同期
応用テクニック
カスタムキーバインド
Ctrl+R以外のキーに割り当てたい場合、例えばCtrl+Tに設定するには:
bindkey '^T' atuin-search # zsh
統計情報の表示
自分のコマンド使用傾向を確認できます。
atuin statistics
履歴のエクスポート/インポート
atuin export > history.json
atuin import < history.json
注意点とトラブルシューティング
HISTFILEを無効にするか、atuinのみを使うように設定しましょう。which fzfでパスが通っていること。まとめ
atuinとfzfを組み合わせることで、シェル履歴の検索・管理・同期が格段に快適になります。特に複数の端末を使うエンジニアにとって、同期機能は大きなメリットです。導入は簡単なので、ぜひ試してみてください。