シェル履歴を爆速検索!atuinとfzfで効率化する管理・同期テクニック

シェル履歴をatuinとfzfで効率的に検索・管理・同期する方法を解説。インストールから設定、使い方まで実践的に紹介。

シェル履歴atuinfzf検索管理同期2026/5/25

はじめに

シェルを使っていると、過去に入力したコマンドを再利用したい場面が頻繁にあります。デフォルトのCtrl+Rによる履歴検索も便利ですが、より高速で多機能なツールとしてatuinfzfの組み合わせが注目されています。本記事では、atuinとfzfを使ってシェル履歴を効率的に検索・管理・同期する方法を解説します。

シェル履歴のデフォルト機能の限界

一般的なシェル(bash、zsh)の履歴機能には以下のような制約があります。

  • 検索が遅い: 履歴が数千件を超えるとCtrl+Rの応答が鈍くなる。
  • 曖昧検索ができない: 完全一致または部分一致のみで、あいまいな記憶からコマンドを探すのが難しい。
  • 端末間の同期が面倒: 複数のマシンを使う場合、履歴を共有する仕組みがない。
  • これらの課題を解決するのがatuinfzfです。

    atuinとは

    atuinは、シェル履歴をデータベースに保存し、高度な検索・暗号化・同期機能を提供するツールです。SQLiteベースで動作し、以下の特徴があります。

  • 高速検索: インデックスが効いており、大量の履歴から瞬時に検索。
  • 暗号化: 履歴を暗号化して保存可能(オプション)。
  • クラウド同期: 自前のサーバーやatuinの提供するサービスを使って履歴を同期できる。
  • fzf連携: インタラクティブなフィルタリングツールfzfと組み合わせて使える。
  • 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
    

    注意点とトラブルシューティング

  • 履歴が二重に記録される: シェルのデフォルト履歴とatuinの両方が有効だと重複します。HISTFILEを無効にするか、atuinのみを使うように設定しましょう。
  • 同期がうまくいかない: ネットワークや認証情報を確認。atuinサーバーのステータスをチェック。
  • fzfが表示されない: fzfが正しくインストールされているか確認。which fzfでパスが通っていること。
  • まとめ

    atuinとfzfを組み合わせることで、シェル履歴の検索・管理・同期が格段に快適になります。特に複数の端末を使うエンジニアにとって、同期機能は大きなメリットです。導入は簡単なので、ぜひ試してみてください。