3618 文字
18 分
FreshRSS は最高のRSSリーダーだった(導入手順付き)

RSSを使い始めておよそ2週間が経過。

完全にハマっているので、更に環境を改善することにしました。

課題#

現在、RSSリーダーとしてInoReaderを使っています。

手軽に使えるRSSリーダーの中では一番便利だなと感じている一方で、以下のような課題がありました。

フィルター機能は有料プラン限定#

InoReaderの無料プランでは、フィルター設定ができません。特定のキーワードを含む記事を非表示にしたり、特定のキーワードを含む記事だけを表示したりすることができないのです。

これはRSSを使い始めた理由の根幹に関わる問題です。

インターネットは人々のアテンションを奪い合う荒地となりました。いわゆる「デッド・インターネットセオリー(Dead Internet theory)」というやつです。興味のない広告、フェイクニュース、対立煽り、AI Slop などなど、もううんざりです。

はてなブックマークのホッテントリフィードはインターネットの流行を知るのに便利ですが、あまり気分の良くならない記事も多く含まれています。はっきり言えば、Togetterをフィルターで除外したいのです。

「全文を読む」機能の中途半端さ#

InoReaderには「全文を読む」機能があります。これは、記事の一部しか配信されないRSSフィードに対して、元記事の全文を取得して表示する機能です。

これは当初かなり便利に感じていたものの、完璧ではありませんでした。

配信元によってはこの機能がうまく働かず、結局元記事を開く必要があったり。その場合、

  • フィードを見る
  • if 全文が読めた:
    • return
  • 「全文を読む」を試す
  • if 全文が読めた:
    • return
  • 元記事を開く
  • return

という手順を踏む必要があります。ステップ数が多いし、条件分岐があるのもよくありません。

Zen Browserのピン留めされたタブからなら、外のドメインのURLを開く時に自動でPeepで開いてくれるので、「全文を読む」を使わずに

  • フィードを見る
  • if 全文が読めた:
    • return
  • 元記事を開く
  • return

とするほうが、ステップ数が少ないしシンプルです。この場合、「全文を読む」は不要になります。

しかしいずれにせよ、元記事を開くと他のコンテンツへの誘導リンクが目に入り、やはり当初の目的を達成できません。

「全文を読む」にはもっと完璧に動作してもらう必要がありました。

結局企業のサービスに依存している#

アンチ資本主義は貫きたい。(私は社会主義/共産主義者ではありません。念の為。)

FreshRSS を使おう#

こうした課題を解決するために、FreshRSSを使うことにしました。

デモ版はこちら。

FreshRSSはオープンソースのRSSリーダーで、自分でサーバーにインストールして使う必要があります。自分でホスティングするので、フィルター機能は自由に使えるし、「全文を読む」機能もより詳細にカスタマイズして改善することができそうです。

ただし、サーバーを自分で管理する必要があるので、時間的・金銭的な運用コストがかかります。幸い、FreshRSSはDockerイメージが提供されているので、セットアップは超簡単に済みます。また、FreshRSSはかなり軽量なので、Google Cloud Compute Engine の無料枠で十分に動作しそうです。

ちなみにGemini先生にはOracle CloudのVM.Standard.A1.Flexを利用することを勧められましたが、大阪リージョンでも全然空きが無く、試すことができませんでした。

Out of capacity for shape VM.Standard.A1.Flex in availability domain AD-1. Create the instance in a different availability domain or try again later. If you specified a fault domain, try creating the instance without specifying a fault domain, otherwise try creating the instance in a different availability domain. If that doesn’t work, please try again later.

ではなぜCompute Engineなのか。VMはこれまで色んなところで借りてきたけど、実はまだGoogle Cloudでは借りたことが無かったからです。これを機に試してみることにしました。

無料枠のCompute Engineインスタンスを作成#

この記事を参考にしました。

補足情報#

記事内にもある通り、公式の情報に目を通すこと。無料枠の条件は今後変化するかもしれない。

OS は Ubuntu 24.04 LTS Minimal (x86/64, amd64) を指定した。最新の長期サポート版で、CPUアーキテクチャも合っている。

ディスクの設定はデフォルトで「バランス永続ディスク」となっているが、これは無料枠の対象外なので、「標準永続ディスク」に変更する必要がある。

たぶんこれで無料枠の条件を満たせているはず。

VMの環境構築#

叩いたコマンド履歴をGeminiに要約させたものを以下に置いておきます。正しい保証はありませんが、参考になれば。


GCP VMでFreshRSSをセットアップするための全コマンド手順#

【前提条件】

  • GCP Compute EngineでVMインスタンスが作成済み(OS: Ubuntu 24.04 LTS Minimalなど)。
  • VMにSSHで接続している状態。

フェーズ1:サーバーの初期設定#

Terminal window
# === 1. パッケージリストを更新し、システムを最新の状態にする ===
sudo apt update
sudo apt upgrade -y
# === 2. 必要なツールをインストールする ===
# テキストエディタ「nano」をインストール
sudo apt install nano -y
# バージョン管理システム「git」をインストール(拡張機能ダウンロードで使用)
sudo apt install git -y

フェーズ2:Dockerのインストール#

Terminal window
# === 1. Dockerリポジトリの設定に必要なパッケージをインストール ===
sudo apt install -y ca-certificates curl gnupg
# === 2. Dockerの公式GPGキーを追加 ===
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# === 3. Dockerのリポジトリを設定ファイルに書き込む ===
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# === 4. パッケージリストを再度更新 ===
sudo apt update
# === 5. Docker Engine本体とComposeプラグインをインストール ===
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# === 6. Dockerが正常にインストールされたかテスト実行 ===
# "Hello from Docker!" と表示されれば成功
sudo docker run hello-world

フェーズ3:FreshRSSのセットアップ#

Terminal window
# === 1. FreshRSS用の作業ディレクトリを作成し、そこに移動 ===
mkdir ~/freshrss
cd ~/freshrss
# === 2. 拡張機能を入れておくためのディレクトリも作成 ===
mkdir ./extensions
# === 3. docker-compose.yml ファイルを作成・編集 ===
nano docker-compose.yml

nanoエディタが開いたら、以下の内容をすべてコピーして貼り付けてください。

version: '3'
services:
freshrss:
image: freshrss/freshrss
container_name: freshrss
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
'CRON_MIN' : '*/30'

↑ 貼り付けが終わったら、Ctrl + XYEnter で保存して終了します。

Terminal window
# === 4. Dockerコンテナを起動 ===
# これによりFreshRSSが起動し、ブラウザから初期設定が可能になります
sudo docker compose up -d

(この時点で、ブラウザから http://<サーバーのIPアドレス>:8080 にアクセスし、FreshRSSの初期設定(ユーザー作成など)を完了させてください)

フェーズ4:拡張機能のセットアップ#

FreshRSSの「拡張機能」タブから、気になる拡張機能を見つけてインストールします。

Terminal window
# === 1. 作業のため、一度FreshRSSコンテナを停止 ===
# ディレクトリが ~/freshrss であることを確認
cd ~/freshrss
sudo docker compose stop
# extensionsフォルダに移動
cd ./extensions
# === 2. サードパーティ製拡張機能をダウンロード ===
# 例: freshrss-af-readability
git clone https://github.com/Niehztog/freshrss-af-readability.git
# === 3. FreshRSSコンテナを再度起動して、すべての変更を適用 ===
cd ~/freshrss
sudo docker compose up -d

(この後、ブラウザでFreshRSSの拡張機能ページを再読み込みし、使いたい拡張機能のトグルスイッチをオンにしてください)


独自ドメインの設定#

次に、GCPサーバーのIPアドレスを、Cloudflareを使って独自ドメインのサブドメイン(例: rss.your-domain.com)でアクセスできるようにしたい。

これもGemini先生の手順書に従ったら上手く行った。


Cloudflareで独自ドメインをFreshRSSに設定する手順書#

【目的】 サーバーのhttp://<IPアドレス>:8080というURLを、覚えやすくて安全なhttps://rss.your-domain.comというURLでアクセスできるようにする。

【前提条件】

  • Cloudflareに独自ドメイン(例: your-domain.com)が登録済みであること。
  • FreshRSSが動作しているGCPサーバーの外部IPアドレスが分かっていること。

ステップ1:DNSレコードの追加(ドメインとIPアドレスの紐付け)#

まず、作成したいサブドメインが、あなたのGCPサーバーを指すように設定します。

  1. Cloudflareにログインし、対象のドメインを選択します。
  2. 左側のメニューから「DNS」をクリックします。
  3. レコードを追加」ボタンを押します。
  4. 以下の内容でレコードを作成します。
    • タイプ: A
    • 名前: rss (またはfreshrssなど、使いたいサブドメイン名を入力)
    • IPv4アドレス: あなたのGCPサーバーの外部IPアドレスを入力します。
    • プロキシステータス: **「プロキシ済み」(オレンジ色の雲のアイコン)**になっていることを必ず確認します。これが最も重要なポイントです。
  5. 保存」ボタンをクリックします。

ステップ2:SSL/TLSの設定(通信の暗号化)#

次に、ユーザーとCloudflare間の通信を安全なHTTPSに設定します。

  1. 左側のメニューから「SSL/TLS」をクリックし、「概要」タブを開きます。

  2. SSL/TLS暗号化モードを「フレキシブル」に設定します。

    • (これにより、サーバー側でSSL証明書を用意する必要がなくなります)
  3. 次に、「エッジ証明書」タブに切り替えます。

  4. 常にHTTPSを使用」という項目のスイッチをオンにします。

    • (これにより、http://でアクセスしても自動的にhttps://に転送されます)

ステップ3:Origin Rulesの設定(ポート番号 :8080 を隠す)#

この設定で、URLからポート番号を消すことができます。

  1. 左側のメニューから「ルール」をクリックし、「Origin Rules」タブを選択します。
  2. オリジンルールを作成」ボタンを押します。
  3. 以下の内容でルールを作成します。
    • ルール名: FreshRSS Port Forward (など、分かりやすい名前を入力)
    • 条件 (「次の場合に実行…」):
      • フィールド: ホスト名
      • 演算子: 次と等しい
      • 値: rss.ilapaj.com (ステップ1で設定したサブドメイン名を入力)
    • アクション (「その後…」):
      • 宛先ポートを上書き」という項目を探します。
      • ポート」を選択し、右側の入力欄に 8080 と入力します。
  4. デプロイ」ボタンをクリックしてルールを保存・有効化します。

最終確認#

以上で、すべての設定は完了です。 DNSの変更がインターネット全体に反映されるまで、数分から10分程度かかることがあります。

少し時間を置いてから、Webブラウザで以下のURLにアクセスしてみてください。

https://rss.your-domain.com (※rss.your-domain.comの部分は、あなたが設定したサブドメイン名に置き換えてください)

無事にFreshRSSのログイン画面が表示され、ブラウザのアドレスバーに鍵マークがついていれば成功です!


FreshRSSの設定#

あとはFreshRSS上でいろいろと設定し、こんな感じにできました。

「全文を読む」は拡張機能の「Readability」をインストールすることで実現したわけですが、これがかなり優秀で、ほとんどのフィードで元記事の全文を取得できるようになりました。しかも、ボタンを押さずに自動で全文を表示してくれるのがすごい。

先述のステップはもはや、

  • フィードを見る
  • return

で済むようになりました。

フィルター機能も自由に使えるし、InoReaderよりも快適です。

VMの性能やネットワーク速度に関する懸念はありましたが、実際に使ってみると全然問題ありません。これについてはまだインスタンスを立ててから24時間も経っていないのでなんともって感じですが、今のところ無料枠の範囲内で十分に動作しています。

正直笑っちゃうくらい便利で、こんな便利なものをこれまで使ってこなかったなんて!という気持ちです。今後無料枠では足らなくなってきたら、毎月1000円くらいであれば全然払っても良い。

もしRSSリーダーを探している人がいたら、ぜひFreshRSSを試してみてください。自分でホスティングするのは少し手間ですが、その価値は十分にあります。

封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00