率直に言って、トランプを追跡するのは疲れる。彼はBBC、Guardian、NPR、Al Jazeera、Babylon Beeまでもの見出しを支配している。毎日10以上のサイトをチェック?お断りだ。だからTrump Dailyを作った!すべてを1つのクリーンなインターフェースに集約するセルフホストのRSSアグリゲーターだ。https://trumpdaily.siteが誕生した!

正直なところ、これはここ数年で数ヶ月間で一番楽しかったコーディングだった。

技術スタック(あるいは: なぜ退屈な技術を選んだか)

  • バックエンド: Python/Flask(そう、大好きだ!)
  • データベース: PostgreSQL
  • キャッシュ: Redis(文字通りすべてに)
  • タスク: Celery(バックグラウンドRSS取得)
  • フロントエンド: Vanilla JS(Reactなし、異論は受け付ける)
  • デプロイ: Docker Compose(1コマンドで完了)

全体で約1,000行のPythonと400行のJavaScript。ローカルで実行。トラッキングなし(Google Analyticsのみ)。クラウド費用なし。無駄なし。

仕組み

RSSフィード → Celery → キーワード → PostgreSQL → Flask API → ブラウザ
                         ↓
              (Funny? Political? Serious?)

5分ごとに、Celeryがフィードを取得し、キーワードマッチングを使用して記事をカテゴリ分けする:

  • "investigation" + "indictment" = Serious
  • "ridiculous" + "bizarre" = Funny
  • "tariff" + "trade war" = Economic

シンプルな正規表現、約85%の精度。ML不要。

なぜこれが途方もなく楽しかったのか

1. 実際に動作する
埃をかぶるほとんどのサイドプロジェクトとは異なり、毎朝これを使っている。本当に必要なものを作るのは感覚が違う。

2. Vanilla JSは解放的
webpackなし。babelなし。500MBのnode_modulesなし。瞬時にロードされるたった400行のJavaScript。フロントエンドはクライアントサイドで500以上の記事を苦もなくフィルタリングする。

3. Docker Composeは魔法
1つのdocker compose up -dで5つのサービス(nginx、flask、postgres、redis、celery)が起動する。設定地獄ゼロ。

4. Pythonは仕事を成し遂げる
週末プロジェクト→3日で動作するプロトタイプ。エコシステム(feedparser、SQLAlchemy、Celery)がただ動く。ライブラリのバグゼロ。

トレードオフ(あるいは: Go/Rustを使ったら?)

Pythonは速くない。現実的になろう:

言語RSSパースメモリ開発時間
Python15-30秒約600MB3日
Go3-5秒約50MB5-7日
Rust2-4秒約30MB9-15日
Node.js12-25秒約500MB3日
Bun5-8秒約200MB3日

GoがRSSパースを10倍速くできるか?はい。
それが重要か?絶対に違う。

アプリはすでに瞬間的に感じられる。RSSは5分ごとに更新される。取り込みに15秒かかろうが3秒かかろうが誰が気にする?ここでTwitterを運営しているわけではない。

違う選択をする場合

  • 10,000同時ユーザー? GoかRust
  • リアルタイムWebSocket? Elixir/Phoenix
  • $5/月のVPS? Go(より少ないメモリ)
  • すでにRustを知っている? 知っているものを使う

しかしシングルユーザーのセルフホストツールとしては?Pythonが完璧だ。

最良の判断

- クライアントサイドフィルタリング - 500の記事すべてをロードし、ブラウザでフィルタリング。速くてシンプル。
- Docker Compose - 個人プロジェクトにKubernetesの複雑さは不要。
- フレームワークなし - Vanilla JSはミリ秒でロード、ビルドステップなし。
- PostgreSQL - 適切なインデックス、SQLiteのロック問題なし。
- プライバシーファースト - ローカルで実行、ゼロトラッキング、ゼロクラウド。

最悪の判断

- 全文検索なし - PostgreSQLのLIKEは基本的だが、十分。
- リアルタイム更新なし - 記事は5分ごとに更新、ライブではない。
- メモリ使用量 - 600MBはこれにはオーバーキルだが、誰が気にする。

貢献したい?

リポジトリはGitHubでプライベートだが、コラボレーターを喜んで追加する。もし:

  • コードを探索したい
  • 機能を貢献したい
  • 自分のアグリゲーター用にフォークしたい

GitHubのユーザー名かメールアドレスを送ってほしい。スパムを避けるためにプライベートにしているが、コラボレーションは大好きだ。

学んだ教訓

  1. 退屈な技術が勝つ - Flask、PostgreSQL、Redisは退屈だ。しかし実戦テスト済みで予測可能だ。
  2. クライアントサイドレンダリングは過小評価されている - モダンなブラウザは速い。使おう。
  3. Docker Compose > Kubernetes - 小さなプロジェクトには、K8sは狂気のオーバーキルだ。
  4. Vanilla JSで十分 - React/Vueは素晴らしいが、シンプルなUIには不必要な複雑さだ。
  5. RSSは死んでいない - シンプル、標準化、APIキー不要、ただ動く。

評決

Pythonは間違いなく正しい選択だった。速いからではない(速くない)。理由は:

  • Github Co-Pilotで3時間で出荷した
  • コードが読みやすい
  • パフォーマンスは「十分良い」
  • 実際にメンテナンスを楽しんでいる

Goの方が10倍速いか?もちろん。それが重要か?いいえ。

速く出荷でき、問題を解決し、過剰設計しないツールを選べ。


技術: Python、Flask、PostgreSQL、Redis、Celery、Vanilla JS
コード行数: 合計約1,400行
開発時間: Github Co-Pilotで3時間
デプロイ: docker compose up -d
ステータス: プライベートリポジトリ、コラボレーター歓迎

2026年。作って、出荷して、毎日使っている。サイドプロジェクトはこうあるべきだ。