Elfeedとは?
ElfeedはEmacsのために書かれた軽量かつ強力なRSSフィードリーダです。タグを使ったシンプルなシステムで、RSSフィードを分類します。それだけでなく、強力な「フックベース」のタグ付けシステムも備えており、フィードの内容に応じて自動的にタグ付けを行うことができます。
このため、ElfeedはたくさんのRSSフィードをフォローしている人や、フィードを自動的に分類する方法を探している人にとって便利です。なぜEmacsでフィードリーダーを使うのか?
Emacsは相互運用性という概念で動いています。Emacsはデータを受け取り、それを様々な異なる方法で解釈できるようにするためです。
Emacsはテキスト編集専用に使うこともできますが、例えばテキスト編集中にメールにアクセスできると、書いているテキストを作成中のメールにシームレスに利用することが可能になります。 このように、RSSフィードリーダーをEmacsに組み込むことは、魅力的なことです。Emacsの強力な編集機能を使って、フィードを操作したり、Emacsの他の機能を利用したりすることができるようになるのです。EmacsにElfeedをインストールする
Elfeedのインストールは実に簡単です。GNU ELPAリポジトリから入手できますので、init.elファイルに何も手を加えずにアクセスできます。
Elfeedをインストールするには、Alt
+ X
を押してコマンドバッファを表示させ、package-install
と入力します。パッケージ名には elfeed
を指定して、Enter
を押します。EmacsがElfeedのソースコードをダウンロードし、直後にコンパイルします。
Emacsで最初のRSSフィードをセットアップする
インストールが終わったら、Alt
+ X
を押してElfeedにアクセスし、コマンドバッファに elfeed
と入力してください。こうすると空のElfeedバッファがロードされます。
-
手動でinit.elを編集する
-
Emacsを使わない場合
手動でRSSフィードを追加する方法
Elfeedには “elfeed-feeds “という変数があるので、手動でフィードのURLをinit.elファイルに追加すれば、Elfeedに簡単に登録することができます。Elfeedには “elfeed-feeds “という変数があり、これはElfeedがどのフィードを取得し、概要画面に表示するかを指定するものです。
例えば、これは私のinit.elファイルからのスニペットです。(setq elfeed-feeds
'("https://feeds.maketecheasier.com/MakeTechEasier"
"https://solar.lowtechmagazine.com/feeds/all-en.atom.xml"
"https://old.reddit.com/r/f1technical.rss"))
setqは、特定の変数の値を設定するEmacs関数です。この場合、変数elfeed-feedsに3つのフィードリンクを値としてセットしています。
これにより、Elfeedは自動的にこれらのリンクを内部データベースに追加し、次にプログラムを実行したときにロードします。EmacsでRSSフィードを追加する
ElfeedにRSSフィードを追加するもう一つの方法は、Elfeedの実行中にフィードのリンクを与えることです。これにより、Emacsをリロードすることなく、フィードロスターをRSSリンクでアクティブに更新することができます。
これを行うには、Alt
+ X
を押してコマンドバッファを開いてください。elfeed-add-feed と入力し、
Enter` を押します。ElfeedはロードしたいフィードのURLを尋ねてきます。
フィードのURLをコピーして、URLプロンプトで Ctrl
+ Y
を押すと、Emacsにそのリンクが貼り付けられます。貼り付けたら、あとはEnter
を押して、フィードのURLをElfeedにコミットするだけです。
Emacsで自動的にフィードにタグを付け、フィルタリングする方法
ElfeedはRSSフィードの一覧表示や閲覧の他に、フィードの一覧を細かく調整するための機能を多数備えています。
そのすてきな機能のひとつが、自動タグ付けです。この機能により、特定のフィードから来たRSSエントリに即座にタグ付けすることができます。 たとえば、あるトピックに関する複数のフィードがある場合、それらすべてに同じタグが付くように設定すれば、まとめ画面で複数のフィードを簡単に、直感的に分類することができます。 これを行うには、init.elファイル内のRSSフィードを編集します。この簡単な例を見てみましょう。(setq elfeed-feeds
'(("https://feeds.maketecheasier.com/MakeTechEasier" 技術ニュース)
("https://solar.lowtechmagazine.com/feeds/all-en.atom.xml" tech)
("https://old.reddit.com/r/f1technical.rss" tech f1))
RSSフィードに自動的にタグを付けるには、デフォルトのelfeed-feedsフォーマットに2つのことをする必要があります。
- フィードのリンクを括弧で囲みます。これは
elfeed-feeds
に、この変数の特定のエントリが複数の部分から構成されていることを知らせます。 - 特定のリンクのタグとして機能する単語を指定します。スペースで区切れば、複数のタグを含めることができます。
ElfeedでRSSフィードをフィルタリングする
これらのタグは、Elfeedの強力なフィルタリングシステムと連動しています。これにより、タグだけを元にRSSフィードをグループ化することができます。
例えば、「news」「news tech」「news gaming」というタグのついたRSSフィードがあった場合、Elfeedでは「news」タグの下にすべてのフィードをグループ化することができます。フィードのリストをフィルタリングするには、Elfeedの中でS
を押すと、Elfeedのフィルタリングプロンプトが表示されます。デフォルトでは以下のようなプロンプトが表示されます。
6ヶ月前のもの +未読
- 記号は日付の範囲を表します。これは “2022-02-22 “のような絶対的な日付であったり、“3-days-ago “のような相対的な日付であったりします。
- 記号はタグ演算子で、このタグを持つすべてのフィードを明示的に含めるようにElfeedに指示します。
これを踏まえて、次のようなRSSフィードを考えてみましょう。
[0](setq elfeed-feeds
[1] '("https://feeds.maketecheasier.com/MakeTechEasier" 技術ニュース)
[2] ("https://solar.lowtechmagazine.com/feeds/all-en.atom.xml" tech)
[3] ("https://old.reddit.com/r/f1technical.rss" tech f1)
[4] ("https://www.autosport.com/rss/f1/photos/" f1)
[5] ("https://www.philstar.com/rss/world" ニュース)))
tech」タグをフィルタリングするには、Elfeedのフィルタプロンプトで「+tech」と入力すると、Elfeedのサマリーバッファに最初の3つのリンクが表示されます。しかし、"+news “を追加すると、Elfeedは代わりに1番目と5番目のタグを表示するようになります。
これを知っていれば、フィルタリングロジックをより具体的に設定することができます。例えば、“f1 “を除いたすべてのtechリンクを含めたい場合は、次のように入力します。+tech -f1
URLを元にフィードに自動的にタグを付ける方法
ElfeedでRSSエントリーに自動的にタグを付けるもう一つの方法は、URLに基づいてソートすることです。これは似たようなURL構造を持つRSSフィードをElfeedで購読している場合に有効です。
そのためには、Elfeedのelfeed-new-entry-hook
を使用します。これは、特定の条件に基づいてカスタムコマンドを実行するフック関数です。この関数は elfeed-add-feed
コマンドでエントリーが追加されるたびにカスタムコマンドを実行します。
このフックの中では elfeed-make-tagger
関数を使用することができます。この関数は、設定したオプションに基づいてリンクにタグ付けする一般的な関数です。このように、2つの関数を組み合わせて自動タグ付けを行うと、以下のような感じになります。
(アドフック 'elfeed-new-entry-hook
(elfeed-make-tagger :feed-url "medium\.com" :add '(medium))
:add '(medium))
この関数は、“medium.com “というスラッグを含むリンクに自動的にタグ付けします。
また、elfeed-make-tagger
で設定するオプションで、より具体的なタグ付けを行うこともできます。例えば、URLに基づいてフィードにタグ付けすることも、3ヶ月以上前のエントリーを除外することもできます。
(アドフック 'elfeed-new-entry-hook
(elfeed-make-tagger :feed-url "medium\.com"
:before "3ヶ月前"
:add 'medium))
タグにカスタムカラーとフォントを作成する方法
自動タグ付けの他に、Elfeedでは扱っているタグに応じて見え方をカスタマイズすることができます。これは、特定のタグを持つフィードを目立たせたい場合に便利です。
そのためには、elfeed-search-face-alist
という関数を再定義する必要があります。これは、Elfeedがサマリーバッファの外観を変更するために使用するコマンドです。そのため、この関数を再定義するには、 defface
と push
という関数を使用します。
- defface 関数は Emacs の新しい “face” を作成します。* defface 関数は Emacs の新しい “face” を作成します。 “face” は文字フォントと背景色の両方を含むことができる値の集合で す。
- 一方、push関数は、Emacsの既存のコマンドに定義を追加します。
このように考えると、これらの関数を組み合わせることで、Elfeedのカスタム「顔」を作ることができます。例えば、これは f1 タグを赤くハイライトするカスタムフェイスです。
(defface elfeed-face-tag-f1)
'((t :フォアグラウンド "#f00"))
"これはElfeedのF1タグのカスタムフォントフェイスです。")
(プッシュ '(f1 elfeed-face-tag-f1))
elfeed-search-face-alist(エルフィードサーチフェイスリスト))
おめでとうございます。これで、Elfeedを使ってEmacsをRSSリーダーとして使う方法がわかりました。さらに、あなたのRSSフィードのニーズに合わせてElfeedをカスタマイズしたり、自動化する方法についての基本的な考えも身についたことでしょう。
Emacsでもっと何かできないかとお考えでしたら、Emacsの生産性向上のための最適なパッケージの記事をご覧ください。よくある質問
1. Elfeedでフィードを削除するにはどうしたらいいですか?
フィードを削除するには、init.elファイル内のフィードのエントリを削除するか、 Emacsのカスタマイズ機能を使って削除するかの2つの方法があります。
前者の場合、elfeed-feeds変数に登録されているフィードのURLを削除するだけです。しかし、後者の場合は、Alt
+ X
を押して、コマンドバッファを開く必要があります。ここで、customize
とタイプしてください。これはEmacsのカスタマイズウィンドウを開きます。
そこから、検索ボックスに elfeed-feeds
と入力してください。そうすると、現在購読しているフィードがすべて表示されます。
フィードのリンクの横にある DEL
ボタンをクリックすると、フィードを削除することができます。削除が完了したら、検索バーの下にある Apply
と Save
ボタンをクリックすると、フィードが更新されます。
2. Elfeedですべてのフィードを追加しても更新されない場合はどうすればいいですか?
Elfeedは自動的にフィードのリンクを更新しません。フィードの最新エントリーを取得するには、Shift
+ G
を押すと、現在購読しているすべてのフィードの更新が開始されます。
さらに、特定のRSSフィードだけを更新したい場合は、elfeed-update-feed
関数を実行してください。
3. 自動タグが機能しないようです。どうしたらいいですか?
同じRSSフィードのタグが競合していることが原因だと思われます。これは、手動フィードと自動フィードの両方に同じフィードURLを含んでいる場合に起こります。
これを解決するには、init.elファイルの手動フィードのエントリと、Emacsのカスタマイズバッファの自動フィードのエントリのどちらかを削除する必要があります。