本記事は 2026/02/01 ~ 2026/03/02 の間毎日 AI アプリケーション開発(AI を搭載したアプリ開発 or AI を使用した開発)をテーマに 30 days AI challenge を行う 20 日目のブログポストです。
今日の AI アプリは、AI が最新ニュースを取得してくれるアプリです。
自分の知りたい分野やカテゴリーを登録しておき、AI が最新ニュース/トレンド情報を収集してくれます。すでにニュースアプリを使用している人には不要かもしれませんが、いろいろとカスタマイズができたり、AI ならではの機能も取り入れてみました。
アプリ概要
ユーザーが興味のある分野やカテゴリーをデータベースに登録しておき、その内容から AI が最新ニュースを取得してくれます。
国内ニュースのみに絞ることもできます。


登録したカテゴリーに関連する最新ニュースを表示してくれるだけではなく、AI による分析や考察、今後の影響についても示唆を出してくれる設計にしています。グッドボタン、バッドボタンを記事毎に用意しており、ユーザーが選択した good や bad をデータベースに登録し、次回 ニュースを取得する際に AI がその内容を考慮し、ユーザーが好みそうなニュースを取得してくれます。

一度検索した記事を履歴として表示することも可能です。

技術要素
今回の AI 要素は以下の通りです。
| AI活用箇所 | API | 目的 |
|---|---|---|
| ニュース取得 | Grounding Search | 最新ニュースをWeb検索+分析 |
| 嗜好学習 | プロンプト注入 | 👍👎履歴でパーソナライズ |
| カテゴリー提案 | Grounding Search | トレンドベースのおすすめ |
| 出力パース | — | AI出力からJSON安全抽出 |
AI 箇所のコードは過去に作成したクラス、メソッドと同じものを再利用しています。
Grounding Google Search を活用し、AI のデータだけでなく最新のソースをもとにした検索も行っています。Gemini のレスポンスに加えデータソースの情報も返すようにしています。
var (response, sources) = await _geminiService.GetChatResponseWithGroundingAsync(prompt);
return ParseNewsFromResponse(response, category);
若干工夫した個所としては、LLM による回答生成と Grounding 検索に時間がかかるため、できる限りリアルタイムで状況を随時更新しユーザーへ提示する仕組みになっています。生成結果が出るまでの予測時間は適当ですが。。笑
for (var i = 0; i < totalCategories; i++)
{
progressPercent = (int)((double)i / totalCategories * 100);
progressMessage = $"📡 [{i+1}/{totalCategories}] 「{cat.Icon} {cat.Name}」のニュースを取得中...";
var remaining = (totalCategories - i) * estimatedSecondsPerCategory;
estimateMessage = $"残り約 {FormatEstimate(remaining)}";
StateHasChanged(); // ← Blazor Server の差分レンダリングでUIを即時更新
var articles = await AiNewsService.FetchNewsForCategoryAsync(cat);
}
終わりに
世の中にはいろいろなキュレーションサイトがあるので、既存のもので充実しているとは思います。
ただ、個人的にはある程度カスタマイズできるとよいなと思っていたので、日常的にこのアプリを使って情報収集をしてみるとよさそうです。
AI による考察や未来予想の欄も設けましたが、できる限り、記事を見て自分で考えてから AI の出力を見たほうがよさそうですね。
今日も閲覧いただきありがとうございました。明日もよろしくお願いします!
30 days AI challenge 残り約 10 日!

コメント