この記事はEmacs Advent Calendar 2025の24日目の記事です。
Emacsにはgrepやripgrepを利用した強力なテキストファイルの検索手段があります。
一方で、テキストファイルだけではなく、PDFやEPUBも横断的にEmacsから検索したくなります。また、そのままEmacsで検索したPDFやEPUBを閲覧できるとベストです。
これらを実現するために、この記事ではRecollとconsultによるPDFやEPUBの全文検索環境の構築について書いていきます。
全体像 #
| 役割 | ツール |
|---|---|
| 全文検索ツール | Recoll |
| Emacs連携 | consult-recoll |
PDFやEPUBを全文検索できるRecollを導入し、EmacsからRecollにアクセスして全文検索を行います。
なお、RecollはPDFやEPUBだけでなく、テキストファイルはもちろんおことHTMLやWord等、多数の種類のファイルの全文検索に対応しています。
導入手順 #
Recoll #
導入手順については公式マニュアルを見るのが一番早くて正確ですが、ここでは最低限の設定手順を簡単にまとめます。
インストール #
まずは、全文検索ツールRecollのインストールです。
-
macOS (Homebrew)
bash brew tap nailuoGG/Recoll brew install --cask Recoll
-
Ubuntu
bash sudo apt install Recoll
-
Nix
NixにもRecollのパッケージがありますので、そちらからインストールするのも便利です。
設定ディレクトリ #
Recollの設定ディレクトリを環境変数で指定します。
環境変数として RECOLL_CONFDIR で任意のパスを設定できます。
export RECOLL_CONFDIR="$HOME/.config/Recoll"
mkdir -p "$RECOLL_CONFDIR"設定 #
先ほど作成した設定ディレクトリに Recoll.conf という設定ファイルを作成します。
Recoll.conf 内の topdirs に、全文検索対象のPDF等が保存されているディレクトリ群を指定します。
また、他にも色々設定ができますので、RECOLL.CONFを参照してみてください。 私は以下のような感じに設定しています。
topdirs = ~/Documents ~/Zotero ~/Book
noContentSuffixes+ = .bib .zip .iso .img
underscoreasletter = true
backslashasletter = true
orgmodesubdocs = true
indexallfilenames = true
indexStoreDocText = true初回のindex作成 #
以下のコマンドを実行することで全文検索用のindexを作成します。
Recollindex -c "$RECOLL_CONFDIR"ここまででRecollが使えるようになりました。 recollqというコマンドで全文検索結果を取得することもできますし、RecollのGUIアプリから全文検索することも可能です。
以下は、RecollのGUIアプリから transformer というキーワードを含むファイルを検索した結果です。
本文中に該当キーワードが含まれているファイルが一覧表示され、どの文脈でヒットしているかも確認できます。
GUIアプリでの動作を確認できたら、次はEmacsから同じ全文検索を扱えるようにします。
consult-recoll #
EmacsからRecollの検索結果にアクセスするために、consult-recollパッケージを使います。
(use-package consult-recoll
:ensure t
:demand t
:bind (("C-c n s" . consult-recoll))
:config
(setq consult-recoll-inline-snippets t)
(if (eq system-type 'darwin)
(setq exec-path (append '("/Applications/Recoll.app/Contents/MacOS") exec-path))))注意点として、macOSでbrewを使ってRecollをインストールするとRecollコマンドへの PATH が通っていないので、上記のように適宜追加しておきます。
これで C-c n s を押下するか consult-recoll を呼び出すだけでEmacsからPDFやEPUBを検索して直接開くことができるようになります。
以下は、Emacs上で transformer というキーワードを入力し、consult-recollによって検索した結果です。
ミニバッファ上で検索結果を絞り込みながら、該当するPDFやEPUBをそのまま開くことができます。
index更新の自動化 #
初回にindexを作成しましたが、新規にPDF等のファイルが追加された場合はindexを更新してあげる必要があります。 そのため、私は以下のような形でEmacsの起動中に5分ごとでindex更新を自動実行しています。
(when (display-graphic-p)
(run-at-time 0 (* 5 60)
(lambda ()
(start-process
"recollindex" nil
"recollindex" "-c" (getenv "RECOLL_CONFDIR")))))他の検索手段との使い分け #
Emacsには複数の検索手段がありますが、 私の中では以下のように使い分けています。
| 探す対象 | 使う検索手段 |
|---|---|
| ソースコードや設定ファイル | grep / ripgrep |
| 自分で書いたノートやメモ | org-roam |
| PDF / EPUB / 過去の資料 | Recoll |
Recollは、「どこにあるか覚えていない」「昔読んだ気がする」といった資料を探すための検索手段として使っています。
org-roamが 考えるための道具 だとすると、Recollは 思い出すための道具 という位置づけです。
終わりに #
PDFやEPUBは数が多く、すべてをテキストメモにするのは現実的ではありません。 そのため、PDFやEPUBのまま検索し、Emacsから直接閲覧できる環境は、個人的にとても便利だと感じています。