ブログを読むのが趣味なのでRSSリーダーをよく使うのですが、たまにRSSフィードを提供していないブログがあります。 そんなときはHTMLからRSSフィードを生成するためにPolitePolというセルフホストというツールを使っていました。 ただこのツール、まぁまぁリソースを食います。 うちのサーバーはメモリが8GBしかないのでなかなか厳しいです。
そんなわけで、Go+SQLiteで超軽量なRSSジェネレータを作ってみました。 GitHub においてあります。
特徴
使いやすいUI
いまどきのシンプルなUIです。 操作感はPolitePolに寄せており、HTML要素をクリックすることで対応するXPathが取得され、対応要素がハイライトされるようになっています。
RSSフィードが公式に提供されている場合知らせてくれる機能もついています。 ただ、リンクをコピーするにはhttps接続が必要になるらしく...
おうちサーバーを簡単にHTTPS接続できるようにするDockerコンテナをつくってみました↓
管理画面もシンプルな感じにしてあります。 生成に失敗した場合も見やすいように
AI機能
RSS.appの自動生成機能が便利だったので、AIをつかってXPathを自動抽出できるようにしてみました。 現時点ではGeminiのみの対応です。(API無料だったので)
超軽量
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS e3b23edaef2c shelf_rssgen_nginx 0.00% 2.23MiB / 3.88GiB 0.06% 8.41MB / 8.44MB 15.4MB / 475kB 2 b89a68bf41b6 shelf_rssgen_go 0.04% 10.49MiB / 3.88GiB 0.26% 2.16MB / 6.7MB 41.8MB / 0B 11 c0044a5a6190 politepol 1.55% 148.4MiB / 3.88GiB 3.74% 98.5MB / 64.7MB 8.79GB / 26.4MB 16 f7e416a540c8 dbpolitepol 0.13% 174.6MiB / 3.88GiB 4.39% 15.8MB / 28.6MB 7.22GB / 303kB 29
IntelMacで平常時だとこんな感じのリソース消費になります。 RAM使用量でPolitePolは323MB、対して自作ツールは13MBです。
アクセスが増えるとリソース消費は増えますが、それでも圧倒的に省リソースであることには変わりません。 我ながらなかなかいいものをつくりました。
本ツールの開発にあたり、常時起動にGo + SQLite + nginx、フロント開発時にFarm + React.js + shadcn/uiという技術構成をとってみました。 (web関連でちゃんと開発したのは今回が初めてなのでこの書き方でいいのかよくわかっていませんが)
Flutterでアプリ開発をしていたからか、Reactには初めて触ったのですが思ったよりもスムーズに開発できました。 これならブログもGo + Reactで作り直すのもありかな
同じような技術構成で他にもいくつかセルフホストツールを作る予定なので、よかったらそちらも試してみてくださいね〜
アプリを作ったりしています! よかったらみていってください→
つくったもの
今のイチオシ↓