Emacsは非常に拡張性の高いソフトウェアです。Emacsはテキストエディタであり、メールクライアントであり、USENETリーダーで もあります。Elfeedを使えば、EmacsをRSSフィードリーダーとして使うこともできます。

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バッファがロードされます。

ElfeedにRSSフィードを追加する方法は2つあります。

  • 手動で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を尋ねてきます。

と入力します。 私の場合、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がサマリーバッファの外観を変更するために使用するコマンドです。そのため、この関数を再定義するには、 deffacepush という関数を使用します。

  • 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 ボタンをクリックすると、フィードを削除することができます。削除が完了したら、検索バーの下にある ApplySave ボタンをクリックすると、フィードが更新されます。

2. Elfeedですべてのフィードを追加しても更新されない場合はどうすればいいですか?

Elfeedは自動的にフィードのリンクを更新しません。フィードの最新エントリーを取得するには、Shift + G を押すと、現在購読しているすべてのフィードの更新が開始されます。

さらに、特定のRSSフィードだけを更新したい場合は、elfeed-update-feed関数を実行してください。

3. 自動タグが機能しないようです。どうしたらいいですか?

同じRSSフィードのタグが競合していることが原因だと思われます。これは、手動フィードと自動フィードの両方に同じフィードURLを含んでいる場合に起こります。

これを解決するには、init.elファイルの手動フィードのエントリと、Emacsのカスタマイズバッファの自動フィードのエントリのどちらかを削除する必要があります。

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。