ゆるく情報収集するために、2020 年から masutaka-feed というサーバーレスアプリケーションを運用しています。
いずれもフィードリーダーで真面目に購読するほどではないが、視界には入れておきたい立ち位置の情報です。
※ Mastodon の投稿先は鍵アカの @[email protected]
以前の構成図
以前は IFTTT の RSS Feed Integration を使って、新着アイテムを検知したら API Gateway 経由で Lambda 関数を呼び出していました。
ところが、2024 年になってから RSS Feed Integration が有料の IFTTT Pro でないと使えなくなり、仕方なく年額 $34.99
支払っていました。
GitHub:
はてブ:
現在の構成図
IFTTT は他で全く使っていないので、さすがに年額 $34.99
は支払い続けたくなく、今回 AWS のサーバーレス構成に完全移行しました。
EventBridge Scheduler でフィードを定期的にチェックし、DynamoDB で既読管理を行う構成です。外部サービスへの依存がなくなり、AWS 内で処理が完結するようになりました。
GitHub:
はてブ:
現在のアーキテクチャ
新しいアーキテクチャでは、以下のコンポーネントが協調して動作します。
EventBridge Scheduler による定期実行
GitHub プライベートフィードは 5 分ごと、はてブのお気に入りフィードは 15 分ごとに、次に示す Lambda の Subscriber 関数を定期実行します。
Lambda 関数の責務分離
フィードごとに 2 つの Lambda 関数に分離されています。
- Subscriber 関数: フィードの取得と新着アイテムの検出
- RSS/Atom フィードを取得、rss-parser によるパース
- DynamoDB で既読管理
- 新着アイテムがあれば Notifier 関数を呼び出す
- Notifier 関数: 通知処理の実行
- フィルタリング処理(GitHub では特定のイベントのみ通知)
- Mastodon への投稿
- Pushover への通知(GitHub のみ)
DynamoDB による重複防止
- フィードごとにテーブルを作成
- GitHub:
masutaka-feed-github-state
- はてブ:
masutaka-feed-hatebu-state
- GitHub:
- パーティションキーを設定
- GitHub: Atom フィード、各
entry
のid
- はてブ: RSS 1.0 フィード、各
item
のrdf:about
- GitHub: Atom フィード、各
- TTL を設定し、古いレコードを 30 日後に自動削除
SAM による構成管理は引き続き
今までどおり AWS SAM を使って、追加したコンポーネントも構成管理しています。
環境変数は今までどおり、GitHub Actions の Secrets/Variables で管理し、main ブランチに commit が追加されると自動デプロイされます。
移行してみて
- 責務が増えたのに、想定外にコードがすっきりした
- rss-parser が予想以上に便利で、GitHubFeedItem
や HatebuFeedItem
というフィードの型さえ定義すれば、簡単にパース出来た
- 結果的に、正規表現を使った HTML からの抽出 を捨てられた
- IFTTT Pro の年額
$34.99
を支払わずに済むようになった- AWS 料金は無料枠内に収まる
- 約 2 週間、エラーゼロで運用できている
Claude Code で実装した
IFTTT Pro への課金を始めてから、頭の中では構想できていたものの、言ってしまえばリファクタリングなので、どうにもやる気が起きず、放置していました。
Claude Code なら、そのやる気の低さを乗り越えることができ、大いに利用させてもらいました。
- JavaScript から TypeScript への移行
- IFTTT Pro から AWS 自前実装への移行
💡 pull request の各 commit message に、Claude Code のプロンプトあります。
template.yaml のリソース定義は調べるのが面倒ですが、Claude Code が一発で書いてくれました。もちろん後でウラは取ってます。
- EventBridge Schedulers 定義
- DynamoDB Tables 定義
- 各リソースの IAM Role 設定
- CloudWatch Alarm 監視定義
まとめ
IFTTT Pro のフィード通知機能を AWS のサーバーレス構成で自前実装することで、以下のメリットを得ることができました。
- コスト削減: 年間
$34.99
の固定費が実質ゼロ - 透明性獲得: フィードにどんなアイテムが追加され、今までどんなアイテムを既読にしたのかを掌握
- 監視強化: フィード購読にも監視を設定でき、障害をすぐに検知
- コード最適化: rss-parser を使用した、フィードのパース最適化
また、Claude Code を活用することで、JavaScript から TypeScript への移行や SAM テンプレートの作成など、やる気のなさのハードルを大幅に下げることができました。
今後も低空飛行で masutaka-feed を継続的に運用していきます。