「fzf」でファイル探しがゲームになった話
ファイルを探す時、あなたはいつも完璧な名前を覚えていますか?それとも、フォルダを何回も開いて、やっと見つけるタイプでしょうか。多くの人は、ファイル名の一部しか思い出せない時や、どのディレクトリに入れたか忘れてしまう時があります。そんな時「完璧に探し出さなきゃ」と身構えていませんか?
実は、完璧な検索を手放すと、もっと楽しく、もっと早くファイルが見つかるツールがあるんです。「fzf」というコマンドラインツールを使えば、曖昧な記憶を手がかりに、まるで宝探しのようにファイルを見つけられます。厳密な検索から解放された時、思いがけない「発見」が生まれることも。
この記事では、「fzf」の基本的な使い方から、ちょっとした裏技まで、あなたのターミナルライフがもっと面白くなるヒントを紹介します。
「fzf」、完璧すぎない検索が面白い!
「fzf」は、ファジー検索(あいまい検索)を可能にするコマンドラインツールです。入力した数文字から、関連する候補を瞬時に絞り込みます。これは、ファイル名やコマンド履歴、プロセスの検索など、様々な場面で役立ちます。
完璧なパスやファイル名を覚えていなくても大丈夫です。例えば「do」と入力するだけで、「document」「download」「docker」といった候補がリアルタイムで表示されます。この「ゆるさ」が、検索を楽しいゲームに変える秘密です。指一本で候補を選び、エンターキーを押すだけで、目的のファイルやコマンドが手に入ります。
普段の作業で、ファイルを探すのに30秒以上かかっていませんか?「fzf」を使えば、その時間をわずか3秒に短縮できます。完璧な検索を目指すストレスから解放され、直感的な操作でどんどん作業が進みます。
たった3ステップ!「fzf」で「ゆる検索」を始める準備
「fzf」を使い始めるのは、とても簡単です。Homebrewを使えば、1分でインストールが完了します。このツールを導入するだけで、あなたのターミナルでの体験が劇的に変わります。
結論
「fzf」は、macOSやLinux環境であれば、パッケージマネージャーを使ってすぐに導入できます。インストール後にシェル設定を更新するだけで、すぐに利用可能です。
具体的な手順
macOSユーザーはHomebrewを使うのが最も手軽です。Linuxユーザーも、お使いのディストリビューションのパッケージマネージャーでインストールできます。
# macOSの場合
brew install fzf
# Linux (Debian/Ubuntu)の場合
sudo apt install fzf
# その他の環境やパッケージマネージャーがない場合、Gitからインストール
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
インストールが終わったら、シェル設定を更新します。多くの場合、.bashrcや.zshrcに自動で追記されますが、念のため手動で反映させます。
source ~/.bashrc # もしくは source ~/.zshrc
これで「fzf」を使う準備は完了です。ターミナルを再起動しなくても、すぐに新しいコマンドを試せます。
注意点
Homebrewでインストールした場合、自動的にシェル設定が更新されることが多いです。しかし、Gitから手動でインストールした場合は、.fzf/installスクリプトが設定ファイルを変更します。念のため、sourceコマンドで設定を読み込み直しましょう。設定ファイルが変更されたか不安な時は、エディタで開いて確認すると良いでしょう。
「fzf」の基本技!ファイル検索の「宝探し」
ファイルを探す時、あなたはいつも完璧なファイル名を覚えていますか?「あのファイル、どこだっけ?」とフォルダをさまよう時間は、今日で終わりです。「fzf」を使えば、まるで宝探しのようにファイルを見つけられます。
結論
findコマンドと「fzf」を組み合わせるのが、ファイル検索の基本です。曖昧なキーワードから、瞬時に目的のファイルへたどり着けます。
具体的な手順
カレントディレクトリ以下のファイルを検索する時、find . -type fコマンドと「fzf」をパイプで繋ぎます。これにより、findが生成したファイルリストを「fzf」が受け取り、インタラクティブに絞り込めます。
find . -type f | fzf
このコマンドを実行すると、ターミナルが全画面モードに切り替わります。そして、見つかったファイルリストが表示されます。表示されたリストに対して、ファイル名の一部をキーボードで入力してみてください。例えば「repo」と入力すれば、「repository」「report」といった候補がリアルタイムで絞り込まれます。
上下の矢印キーで候補を移動し、エンターキーを押すと、選択したファイル名がターミナルのコマンドラインに挿入されます。あとは、catやvimなど、好きなコマンドと組み合わせて使えます。
# 例えば、選択したファイルをcatで表示する
cat $(find . -type f | fzf)
注意点
非常に大きなディレクトリツリーに対してこのコマンドを実行すると、ファイルリストの生成に時間がかかる場合があります。数百万のファイルがあるような環境では、少し待つ必要があるかもしれません。そのような場合は、検索範囲を限定するために、findコマンドの引数を調整したり、fdのような高速な代替ツールと組み合わせたりするのも良い方法です。
「fzf」で過去のコマンドを「掘り出す」裏技
「あの時実行したコマンド、何だったっけ?」と、コマンド履歴を遡るのに苦労していませんか?Ctrl+Rを連打して、なかなか見つからない…そんな経験は誰にでもあるはずです。「fzf」を導入すると、このコマンド履歴の検索が劇的に変わります。
結論
「fzf」は、シェルのキーバインドと連携させることで、Ctrl+Rによるコマンド履歴検索を高速でインタラクティブなものに変えます。過去のコマンドを「掘り出す」感覚で、素早く再利用できます。
具体的な手順
「fzf」をインストールすると、多くのシェルで自動的にCtrl+Rのキーバインドが上書きされます。もし自動設定されなかった場合、または手動で設定したい場合は、以下の設定を.bashrcや.zshrcに追記します。
# .bashrc または .zshrc に追記
# fzfのインストール時に設定されることが多い
# fzfのキーバインドと補完を有効にする
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
設定を保存したら、シェルを再読み込みします。
source ~/.bashrc # または source ~/.zshrc
これで、ターミナルでCtrl+Rを押してみてください。すると、「fzf」のインタラクティブな検索画面が現れます。ここに、以前実行したコマンドの一部を入力します。例えば「git」と入力すれば、過去のgitコマンドがずらりと表示されます。
矢印キーで候補を選び、エンターキーを押すと、そのコマンドが現在のプロンプトに挿入されます。そのまま実行しても良いですし、少し修正してから実行するのも簡単です。
注意点
この機能は、bashやzshといった主要なシェルで動作します。他のシェルを使っている場合は、設定方法が異なるか、対応していない場合があります。自分の使っているシェルが何か、確認してから設定を進めましょう。また、あまりに古いコマンド履歴は検索対象外になることもあります。これはシェルの履歴設定によるものです。
「fzf」は「引数選択」の達人!コマンドを自由に操る
コマンドを打つ時、長いファイルパスや、たくさんの選択肢の中から一つを選ぶのに手間取っていませんか?例えば、cdコマンドでディレクトリを移動する時、いちいちパスをタイプしたり、lsで確認したりするのは面倒ですよね。「fzf」は、そんな「引数選択」の場面で、あなたの強力な味方になります。
結論
「fzf」は、コマンドの引数(パラメータ)をインタラクティブに選択する機能で、ターミナル操作を格段にスムーズにします。特に、ファイルパスやディレクトリ選択で威力を発揮します。
具体的な手順
「fzf」には、ディレクトリ移動を簡単にするalt-cキーバインドがデフォルトで用意されています。これは、サブディレクトリを素早く選び、cdコマンドを実行するのに便利です。
ターミナルでAlt+C(macOSではOption+C)を押してみてください。すると、現在のディレクトリ以下のサブディレクトリがリストアップされます。ここに、移動したいディレクトリ名の一部を入力します。
例えば、「src」と入力すれば、「source」「src」「scratch」のような候補が表示されます。選択してエンターキーを押すと、そのディレクトリに移動できます。
また、自分でパイプを繋いで、特定のリストから引数を選ぶことも可能です。例えば、現在のディレクトリにあるPDFファイルの中から一つを選んで開きたい場合。
evince $(ls *.pdf | fzf) # LinuxでPDFビューアevinceを使用する場合
このコマンドでは、ls *.pdfでPDFファイルの一覧を取得し、それを「fzf」に渡します。「fzf」でファイルを選んだ後、そのファイル名がevinceコマンドの引数として渡され、PDFが開きます。これは、ファイル名が長くても、正確にタイプする必要がないため、非常に便利です。
注意点
alt-cのキーバインドは、シェルによってはデフォルトで設定されていない場合があります。もし動作しない場合は、.fzf/installスクリプトが実行されたか、またはシェル設定ファイル(.bashrcや.zshrc)にfzf関連のスクリプトが読み込まれているか確認しましょう。また、$(...)というコマンド置換の記法は、選択された項目をコマンドの引数として渡すためのものです。この記法に慣れると、様々なコマンドと「fzf」を組み合わせられるようになります。
「fzf」と仲良くなるための「ちょっとしたコツ」
「fzf」を使い始めたばかりの頃、検索結果が多すぎて「結局どれを選べばいいの?」と迷ってしまうかもしれません。しかし、少しの工夫で、このツールはもっとあなたの役に立つようになります。
結論
「fzf」の検索結果をより絞り込むには、他のコマンドラインツールと組み合わせるのが効果的です。これにより、目的のファイルやコマンドをさらに素早く見つけられます。
具体的な手順
例えば、特定の拡張子を持つファイルだけを検索したい場合、findコマンドにnameオプションを追加できます。
find . -name "*.txt" -type f | fzf
このコマンドは、現在のディレクトリ以下にある.txtファイルのみを「fzf」で検索します。これにより、ノイズが減り、目的のファイルを見つけやすくなります。
また、もしfindコマンドが遅いと感じるなら、fdという高速な代替ツールと組み合わせるのも良い方法です。fdはfindのシンタックスに似ていますが、デフォルトで.gitignoreを尊重し、より高速に動作します。
fd . | fzf # fdがインストールされている場合
このコマンドは、fdでファイルリストを生成し、「fzf」に渡します。体感で2倍以上速く結果が表示されることがあります。(※1)fdをまだインストールしていないなら、brew install fdで試してみる価値は十分にあります。
注意点
新しいツールを導入する際は、設定ファイル(.bashrcや.zshrcなど)のバックアップを取っておくと安心です。万が一、設定を間違えても、すぐに元に戻せます。また、検索のコツは「最初から完璧な絞り込みを目指さない」ことです。まずは大まかに探し、必要に応じてフィルタリングを追加していく、という「ゆるい」アプローチが「fzf」との相性抜群です。
「fzf」で広がる!意外な「発見」が生まれる瞬間
私たちは日々の作業で「効率化」や「最適化」ばかりを追求しがちです。しかし、「fzf」の「ゆるい検索」は、その逆の体験、つまり「意外な発見」をもたらしてくれます。これは、完璧主義を手放した時に初めて見えてくる、面白い世界です。
結論
「fzf」の曖昧検索は、思いがけないファイルや、忘れていたプロジェクト、過去のアイデアに再会するきっかけを与えてくれます。これは、意図しない発見が創造性につながる、という面白い現象です。
具体的な体験談
副業でSaaS開発に取り組む30代のエンジニア(以下Aさん)は、以前、完璧なファイル管理を目指していました。全てのファイルを厳密な命名規則とフォルダ構造で整理し、探し物が見つからないと「自分の管理が悪い」と自分を責めていたそうです。しかし、ある時「fzf」を導入し、検索の「ゆるさ」を受け入れてみました。
Aさんは、プロジェクトのドキュメントを探す際に、いつも「doc」というキーワードで検索していました。ある日、いつものようにfind . -type f | fzfを実行し、「doc」と入力したところ、普段見慣れないファイルが候補に現れました。それは、2年前にAさんが書いた、別のプロジェクトの初期アイデアをまとめたMarkdownファイルでした。完全に存在を忘れていたそのファイルを開いてみると、当時の斬新な発想や、未解決だった課題が鮮明に蘇ったのです。
「完璧な検索では、探し求めているものしか見つからない。でも、曖昧な検索は、自分が何を探しているかさえ忘れていた『宝物』に出会わせてくれるんだ」とAさんは語ります。この偶然の発見から、Aさんは現在のSaaSに新しい機能を加えるヒントを得て、開発を加速させることができました。
この体験から読者が学べること
完璧なファイル管理や検索は、時に視野を狭めてしまいます。「fzf」の「ゆるい検索」は、意図しない情報との出会いを促し、新しいアイデアや解決策の発見につながる可能性があります。
今日から実行できるアクションプラン
- 「fzf」で「ゆる検索」を試す: まずは、いつもの
lsやfindの代わりにfzfを使ってみる。 - 「完璧」を手放す: ファイル名の一部だけを入力し、表示される候補を眺める癖をつける。
- 「発見」を楽しむ: 普段は開かないようなファイルが候補に現れたら、試しに開いてみる。
締め
「fzf」は、ただの検索ツールではありません。それは、あなたのターミナルでの作業を、もっと楽しく、もっと創造的なものに変える「魔法の杖」です。完璧な検索に縛られるのをやめて、「ゆるい検索」がもたらす偶然の発見を楽しんでみてください。思わぬアイデアや、忘れていた「宝物」に出会えるかもしれません。
まずはターミナルを開いて、「fzf」をインストールしてみましょう。
参考文献
- junegunn/fzf: A command-line fuzzy finder
- fzf公式ドキュメント
- fd: A simple, fast and user-friendly alternative to 'find'
- (※1)
fdとfindの速度比較: 開発者によるベンチマークでは、ファイル数やディレクトリ構造によるが、fdがfindに比べ数倍速い結果が出ているケースが多い。詳細はfdのGitHubリポジトリを参照。
まとめ・次のステップ
この記事が役に立ったら、ブログのメールマガジンへ登録してください。 AI活用・個人開発・副業に関する最新情報を週1回お届けします。
このブログでは、会社員をしながら副業でSaaSを開発する過程をリアルに発信しています。使用スタック: Next.js / Supabase / Claude API / Vercel