6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SumaRSS:RSSフィードをAIで要約して静的サイト化する自動化システムを作った話

Last updated at Posted at 2025-11-30

この記事はRust+SvelteKit+CDKでRSS要約アプリを作ってみる Advent Calendar 2025の1日目の記事になります。

また、筆者が属している株式会社野村総合研究所のアドベントカレンダーもあるので、ぜひ購読ください。

自己紹介

筆者は普段仕事でVueを使っています。社内でVueを使うような案件に対して、アーキテクトだったりテックリードだったりの役割で参画するのがメインジョブになっています。

仕事をこなす上ではVueの知識があれば十分なのですが、エンジニアである以上、仕事で触らない技術に対しても興味がありますし、触って勉強しなければならないとも感じています。

そこで、今回は普段から気になっていた技術を使ってWebアプリ(サイト?)を作ってみることにしました。

採用した技術

  • SvelteKit
    • SPAフレームワークであるSvelteを拡張したメタフレームワークです。ルーティングやサーバサイドを備え、よりリッチなプロダクトを開発することができます。
    • 文法がVueに似ており、Vueよりもパフォーマンスが良いということで前々から興味がありました。
    • また、個人的にはVueのメタフレームワークであるNuxtと比較してSvelteKitの方が性に合うと感じました(詳細は後述)。
    • ちなみに、今回は静的サイト(SSG)として作成します。
  • Rust
    • 高速であることを売りにしたプログラミング言語です。Webアプリというよりはツール系(特にフロントエンド界隈のビルドツールやLintツールに見られる)で広く普及していますが、Webアプリを書くこともできます。
    • フロントエンド界隈で仕事をしていると、ツールやライブラリでRustで書かれているものがよく目につくようになったので使ってみようと思いました。
    • ちなみに、筆者は去年もひとりアドベントカレンダーをしているのですが、そのときもRustをテーマにしたカレンダーでした(すっかりRustのことを忘れつつあります)。
  • AWS(Lambda + SQS + DynamoDB + S3)
    • 恥ずかしながら、この時代にAWSをがっつり触ったことがあまりないのでこれを機に勉強することにしました。
    • 資格試験でよく出るサーバレスかつイベントドリブンなアーキテクチャを作ってみたかったので、あえてSQSを挟むアーキテクチャとしました。
  • CDK
    • 上記のAWSリソースをデプロイするのに利用しました。IaCをやったことがなく、少しぐらいは触っておかなければ、と思って採用しました。
  • Github Actions
    • Github上で動作するCI/CDランナー(?)です。まったく使ったことがないわけではありませんが、

作ったアプリ

機能

「RSSフィードから記事を取得し、AIに要約させて一覧化するWebアプリ」を作成しました。名前をSumaRSSとしました。

RSSリーダー自体は使っているのですが、タイトルだけでなく記事の概要までチラ見できると、情報収集のスピードが上がるのでは、と思ってこのテーマにしました。
最近話題のAIとも絡めることができるので、その点もプラスでした。

特徴

静的サイトなので表示が速い

記事の一覧化は、日次でページを分けて行うこととしました。日次で表示するため、リアルタイムでレンダリングする必要性は薄く、静的サイトとして生成する(SSG)ことにしました。
SvelteKitはSSGも可能なのでその機能を使いました。レンダリングのためのサーバが不要なので、ビルド成果物はS3に格納するようにしています。

短い要約と長い要約を準備する

記事ごとに、短い要約と長い要約をAIに生成させています。短い要約は記事を一覧表示するときに表示し、すぐに記事の内容を把握するのに使います。長い要約は記事の詳細を確認したいときに使います。

記事の取得から要約まで非同期で処理が実行される

あまりユーザに関係ない特徴ですが。。。
今回、RSSフィードから記事を取得するところは日次でスケジュール実行していますが、取得した記事に要約をつけるところは非同期で行なっています。
すなわち、

  1. 記事を取得するLambdaが日次スケジュール起動される
  2. 取得した記事をDynamoDBに格納し、キーをSQSに送信する
  3. SQS送信イベントをきっかけに、要約するLambdaが起動され、SQSからキーを受信する
  4. キーを元にDynamoDBから記事を取得して要約する

という流れになります。

最初のLambdaで全部やってしまってもいいのですが、SQSによるメッセージングを触ってみたかったのであえてこのような構成にしました。(AWSの資格の問題で何回も見たので気にはなっていた)

開発の進め方

この記事を書いている現在、アプリの方はほぼ完成しています。過去を振り返る形で自分がどのように開発を進めていたかを書き起こしてみます。

順番

  1. CDKをざっと書く
  2. RustでRSSフィードから記事を取得してDynamoDBに格納するLambdaを書く→デプロイ
  3. その後にSQSに送信する処理を追加する
  4. SQSから受信してAIに要約させるLambdaを書く→デプロイ
  5. 静的サイト側を実装する
  6. 静的サイトをビルドしてS3にアップロードするGithub Actionsを実装する
  7. ついでにPRやマージ時に実行されるパイプラインも実装する

スタイル

AIを使ってバイブコーディング的に進めました。がっつりマークダウンを書いて開発させるSpec駆動開発もやってみたくはありましたが、今回の主目的は技術の習得なので、導いてくれる先生ぐらいの温度感で使っています。コード補完は多用しませんが、デバッグやプラクティスについての質問には活用します。これぐらいの使い方が学習用途ではちょうどよかったです。

コスト

ちゃんと計算していませんが、かかるとすれば以下のリソースたちです。

  • AWSリソース
  • OpenRouter(要約のためにAIを呼び出すので)

AIにはコストを重視してGPT-4o-miniを採用しました。記事の要約ではこれで十分かと思います。

まとめ

今回はどのようなアプリを作ったのかの概要を説明しました。
アプリの実装に踏み込んだ話は明日の記事以降で取り上げていきますので、よろしくお願いします。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?