← All Projects

AIニュース学習アシスタント(JP-NewsHourly)

AIニュース自動収集・翻訳サービス。6フィードを並列取得し、Gemini AIがふりがな・翻訳・キーワードを付与。

Next.js Supabase Gemini AI Vercel
Category
AI
Development Period
2週間
Responsibilities
要件定義/設計/フロント/バックエンド/DB/デプロイ

概要

NHK・Yahoo! Japanのニュースを自動収集し、Gemini AIがふりがな・中国語翻訳・キーワード抽出を行うAIニュース学習支援サービス。

対象ユーザー

  • 日本語学習者
  • 中国語話者
  • 毎日ニュースを効率よく読みたい人

Demo / GitHub

🔗 Demo を試す | GitHub

スクリーンショット

トップ画面
トップ画面 — ニュース一覧・ふりがな・中国語翻訳
カテゴリフィルタ
カテゴリフィルタ・キーワード絞り込み
過去記事閲覧
過去記事閲覧・日付指定

開発背景

日本語学習を続ける中で、自分自身が毎日使いたいサービスとして企画・設計・開発した。

毎日ニュースを読む習慣をつけたかったが、複数のニュースサイトを巡回するのは手間がかかる。さらに、難しい漢字のふりがなや中国語での確認もしたい。これらの課題を一つのサービスで解決するために開発した。

解決した課題

  • 日本語ニュースを中国語で素早く理解できる
  • 難読漢字にふりがなを自動付与
  • 複数ニュースサイトを一画面で閲覧
  • トレンドキーワードで今日の話題を把握
  • 重複ニュースを自動排除

主な機能

  • ニュース自動収集(NHK 5カテゴリ + Yahoo! Japan)
  • AIふりがな生成
  • 中国語翻訳
  • トレンドキーワード抽出
  • カテゴリ検索・キーワード絞り込み
  • 既読管理
  • 過去記事閲覧
  • OGPシェア画像生成
  • RSS配信
  • ダーク/ライトモード

使用技術

  • フロントエンド: Next.js 15 / React 19 / TypeScript / Tailwind CSS 4
  • バックエンド: Next.js API Routes / Server Components / ISR
  • AI: Gemini 2.5 Flash(@google/genai SDK)
  • DB: Supabase(PostgreSQL + RLS)
  • デプロイ: Vercel(自動デプロイ + Cron Jobs)

設計上の工夫

  • 並列取得: 6フィードをPromise.allSettledで同時取得。1つのフィードが失敗しても他に影響しない耐障害設計
  • 2層重複排除: URL完全一致 + タイトルのBigram Jaccard類似度判定(閾値0.4)で、同じニュースの異なるソース記事を自動統合
  • AIバッチ処理: 10記事を1回のAPI呼び出しでまとめて処理。構造化JSON出力を利用し、安定したAIレスポンスを実現
  • 自動更新: Vercel Cron(1日1回)+ ISR(約1時間ごと)の組み合わせで、サーバーレスながら継続的にコンテンツを更新
  • グレースフルデグラデーション: Supabase・Gemini AIそれぞれ未設定でもアプリが動作する独立設計

アーキテクチャ

 [NHK RSS x5] + [Yahoo RSS x1]        ↓   rss-parser(6フィード並列取得)        ↓   重複排除(URL → タイトルBigram Jaccard)        ↓  Top 10記事を選定   Gemini AI(1回のバッチ呼び出し)   ├─ ふりがな付与   ├─ 中国語翻訳   └─ キーワード抽出 x5        ↓   Supabase PostgreSQL(upsert保存)        ↓   Next.js Server Component(ISR: 1時間キャッシュ)        ↓   Vercel CDN → ユーザーに配信 

開発周期

2週間

担当範囲

要件定義 → 設計 → フロントエンド → バックエンド → DB設計 → デプロイ(全工程を一人で担当)

成果・実現したこと

  • 複数ニュースサイト巡回の手間を削減し、一画面で日本語ニュースを学習できる環境を実現
  • 中国語翻訳・ふりがな付与により、日本語学習者の情報収集効率を向上
  • AIによるキーワード抽出で、今日の重要トピックを即座に把握可能に
  • 6フィードを平均2秒以内で並列取得
  • Gemini AI 1回のAPI呼び出しで10記事分を同時処理
  • Vercel Hobby(無料プラン)でゼロコスト運用を実現

開発で直面した課題と解決方法

  • 重複記事問題: 同じニュースがNHKとYahoo!の両方に配信される → URL一致だけでなく、タイトルのBigram Jaccard類似度判定を実装し解決
  • AI処理コスト: 記事ごとにAPI呼び出しすると遅くコストが嵩む → 10記事を1回のバッチリクエストにまとめる設計に変更
  • 外部サービス障害対応: 環境変数なしでもアプリが動くよう、DB・AIそれぞれ独立してオプショナルな設計に

このプロジェクトで学んだこと

  • AI機能を組み込む際は、個別処理よりバッチ処理の方がコスト・速度ともに有利であること
  • 外部サービス(RSS・AI・DB)は独立して設計することで、一部障害時も全体停止を防げること
  • サーバーレス環境でも、運用を前提にした更新設計が重要であること