Emacsを使用してElfeedでRSSを利用する方法

Emacsは非常に拡張性の高いソフトウェアです。テキストエディタ、メールクライアント、さらにはUSENETリーダーとしても使用できます。Elfeedを使用することで、EmacsをRSSフィードリーダーとしても利用できます。
目次
- Elfeedとは?
- Emacsでフィードリーダーを使用する理由
- EmacsにElfeedをインストールする
- Emacsで最初のRSSフィードを設定する
- Emacsでフィードを自動的にタグ付けおよびフィルタリングする方法
- URLに基づいてフィードを自動的にタグ付けする方法
- タグ用のカスタムカラーとフォントを作成する方法
- よくある質問
こちらもお読みください: macOS用の最高のRSSリーダーアプリ5選
Elfeedとは?
Elfeedは、Emacs用に書かれた軽量でありながら強力なRSSフィードリーダーです。シンプルなタグベースのシステムを使用してRSSフィードを整理します。それだけでなく、コンテンツに基づいてフィードを自動的にタグ付けできる強力な「フックベース」のタグ付けシステムも備えています。

これにより、多くのRSSフィードをフォローしている人々にとって、フィードを自動的に整理する方法としてElfeedは便利です。
こちらもお読みください: Emacsを使用してEMMSで音楽を再生する方法
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を使用せずに
ElfeedにRSSフィードを手動で追加する
Elfeedは、init.elファイルにフィードURLを手動で追加することで簡単にデータを埋めることができます。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を埋める別の方法は、実行中にフィードリンクを提供することです。これにより、Emacsを再読み込みすることなく、RSSリンクでフィードリストをアクティブに更新できます。
これを行うには、Alt + Xを押してコマンドバッファを開きます。elfeed-add-feedと入力し、Enterを押します。Elfeedは、読み込むフィードのURLを提供するように求めます。

私の場合、最新の技術記事に関する日々の更新を受け取るために、ElfeedにフィードURLを提供しています。
フィードURLをコピーし、URLプロンプトでCtrl + Yを押してEmacsにリンクを貼り付けます。貼り付けたら、Enterを押してフィードURLをElfeedにコミットします。

こちらもお読みください: Linuxでファイルを簡単にリネームする方法
Emacsでフィードを自動的にタグ付けおよびフィルタリングする方法
RSSフィードをリスト表示および表示することに加えて、Elfeedはフィードリストを微調整するための多くの機能を実行できます。
その便利な機能の1つが自動タグ付けです。この機能を使用すると、特定のフィードからのRSSエントリに即座にタグを付けることができます。
たとえば、特定のトピックに関する複数のフィードがある場合、すべてに同じタグを設定することができ、概要画面で複数のフィードを簡単かつ直感的に整理できます。
これを行うには、init.elファイルでRSSフィードを編集します。以下は簡単な例です。
(setq elfeed-feeds
'("https://feeds.maketecheasier.com/MakeTechEasier" tech news)
("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-months-ago +unread- @記号は日付範囲を示します。これは「2022-02-22」のような絶対日付や「3-days-ago」のような相対日付である可能性があります。
- 「+」記号はタグオペレーターで、Elfeedにこのタグを持つすべてのフィードを明示的に含めるように指示します。

これを考慮して、次のRSSフィードを見てみましょう。
[0](setq elfeed-feeds
[1] '("https://feeds.maketecheasier.com/MakeTechEasier" tech news)
[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" news)))「tech」タグをフィルタリングするには、Elfeedのフィルタープロンプトに「+tech」と入力して、Elfeedの概要バッファに最初の3つのリンクを表示します。ただし、「+news」を追加すると、Elfeedは最初と5番目のタグを表示します。
これを知っていると、フィルタリングロジックをより具体的にすることができます。たとえば、すべての技術リンクを含めたいが「f1」を除外したい場合、次のように入力できます:
+tech -f1URLに基づいてフィードを自動的にタグ付けする方法
ElfeedでRSSエントリを自動的にタグ付けする別の方法は、URLに基づいてそれらをソートすることです。これは、Elfeedを使用して類似のURL構造を持つRSSフィードを購読している場合に便利です。

これを行うには、Elfeedのelfeed-new-entry-hookを使用します。これは、特定の条件に基づいてカスタムコマンドを実行するフック関数です。この関数は、elfeed-add-feedコマンドを使用してエントリが追加されるたびにカスタムコマンドを実行します。
そのフック内でelfeed-make-tagger関数を使用できます。これは、設定したオプションに基づいてリンクにタグを付ける一般的な関数です。このように、2つの関数を組み合わせて自動タグ付けを作成することは、次のようになります:
(add-hook 'elfeed-new-entry-hook
(elfeed-make-tagger :feed-url"medium\.com"
:add '(medium)))
この関数は、「medium.com」というスラッグを含むリンクに自動的にタグを付けます。
また、elfeed-make-taggerで設定するオプションをより具体的にすることもできます。たとえば、URLに基づいてフィードにタグを付け、3か月以上前のエントリをフィルタリングすることができます:
(add-hook 'elfeed-new-entry-hook
(elfeed-make-tagger :feed-url"medium\.com"
:before"3 months ago"
:add 'medium))タグ用のカスタムカラーとフォントを作成する方法
自動タグ付けに加えて、Elfeedが扱うタグに基づいてElfeedの外観をカスタマイズすることもできます。これは、特定のタグを持つフィードを目立たせたい場合に便利です。

これを行うには、elfeed-search-face-alist関数を再定義する必要があります。これは、Elfeedが概要バッファの外観を変更するために使用するコマンドです。このため、この関数を再定義するには、deffaceおよびpush関数を使用できます:
- defface関数は、Emacs用の新しい「フェイス」を作成します。「フェイス」は、文字フォントと背景色の両方を含む値のセットです。
- push関数は、Emacsの既存のコマンドに定義を追加します。
これを考慮して、これらの関数を組み合わせてElfeed用のカスタム「フェイス」を作成できます。たとえば、これはf1タグを赤で強調表示するカスタムフェイスです。
(defface elfeed-face-tag-f1
'((t :foreground"#f00"))
"これはElfeedのF1タグ用のカスタムフォントフェイスです。")
(push '(f1 elfeed-face-tag-f1)
elfeed-search-face-alist)おめでとうございます!これで、Elfeedを使用してEmacsをRSSリーダーとして使用する方法を学びました。さらに、RSSフィードのニーズに合わせてElfeedをカスタマイズおよび自動化する基本的なアイデアも得ました。
この議論がEmacsでできることを考えさせた場合は、Emacsのための最高の生産性パッケージに関する記事をチェックしてください。
こちらもお読みください: Linuxでターミナルに入力できない問題を修正する方法
よくある質問
1. Elfeedでフィードを削除するにはどうすればよいですか?
フィードを削除するには2つの方法があります:init.elファイルのフィードエントリを削除するか、Emacsのカスタマイズ機能を使用して削除します。
前者の場合、フィードを削除するのはelfeed-feeds変数内のフィードURLを削除するだけです。しかし、後者の場合は、Alt + Xを押してコマンドバッファを開く必要があります。ここから、customizeと入力します。これにより、Emacsのカスタマイズウィンドウが開きます。
そこから、検索ボックスにelfeed-feedsと入力します。これにより、現在購読しているすべてのフィードが表示されます。
これにより、フィードリンクの横にあるDELボタンをクリックしてフィードを削除できます。完了したら、検索バーの下にある適用および保存ボタンをクリックしてフィードを更新します。
2. Elfeedにすべてのフィードを追加したのに、更新されない場合はどうすればよいですか?
Elfeedはフィードリンクを自動的に更新しません。フィード内の最新のエントリを取得するには、Shift + Gを押して現在購読しているすべてのフィードを更新します。
さらに、特定のRSSフィードのみを更新したい場合は、elfeed-update-feed関数を実行します。
3. 自動タグが機能しないようです。どうすれば解決できますか?
これは、おそらく同じRSSフィードに対して競合するタグがあるためです。これは、手動フィードと自動フィードの両方に同じフィードURLを含めた場合に発生する可能性があります。
これを解決するには、init.elファイル内の手動エントリまたはEmacsのカスタマイズバッファ内の自動フィードエントリのいずれかを削除する必要があります。