0
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?

​「無理に近道するより整備された道を行け」物流の教訓からスクレイピングを捨て、公式RSS×Geminiで割り切ったAIアプリを作った話

0
Last updated at Posted at 2026-06-19

RSS×Gemini 2.5 Flashで構築する、AIトレンド自動分析システム『Puoppo(ポッポ)』の設計思想と現場の最適解

GitHubリポジトリはこちら: tosane932 / puoppo_app


はじめに

現役トラックドライバーが独学でPythonを学び、物流現場の知識を武器に
Webエンジニアへの転身を目指しています。

本記事では、IT資格なし・実務未経験からPython学習42時間目に
自作したAIトレンド自動分析システム『Puoppo(ポッポ)』の
設計思想と技術選定の意図を共有します。

特定の流行を追う一発芸的なシステムではなく、「現場のドメインデータを確実に制御する」という、長年履き込んでも壊れないデニムのような普遍的な設計思想を骨格に据えています。


2. 課題定義とシステムの全容

背景と課題

日常的な技術トレンドやニュースのインプットにおいて、「複数ソースの巡回」および「ノイズを含む長文の咀嚼」がボトルネックとなっていました。毎朝の限られた時間(例:卵焼きを調理する数分間)で、必要な1次情報だけを高密度に消費できる仕組みが必要でした。

実現したソリューション

画面のテキストボックスに「知りたい情報(例:政治・物価高、最新音楽ニュース等)」を任意に入力するだけで、AIが能動的に関連記事を最大100件収集・構造化し、1画面(1ペイン)でスクロールするだけでインプットが完結するシステム。

主要スペック

  • 処理パフォーマンス: キーワード入力から収集・要約完了まで一連の処理を約10〜15秒で実行。
  • UI/UX: 検索から結果表示までを一直線に繋ぎ、迷いを排除したシンプルな1カラムUI。

技術スタック

  • Language / Framework: Python 3 / Flask
  • Core Logic: RSSフィード解析(動的エンドポイント制御)
  • LLM Integration: Gemini API (gemini-2.5-flash)
  • Frontend: HTML / Jinja2 / JavaScript(No FW)
  • Environment: Ubuntu (Lubuntu) / VS Code / .venv

3. 動作デモ

実際の動作環境およびUIデザインについては、以下のデモ映像(YouTube:7分49秒)にて公開しています。

Puoppoデモ映像
(画像をクリックするとYouTubeへ遷移します)


4. 現場視点における技術選定とトレードオフ(割り切り)

① スクレイピングの限界と、RSSという「安全なエンドポイント」の採択

初期設計では主要ニュースサイトからの直接的なスクレイピングを検証しましたが、アクセスブロックや構造変更に伴うメンテナンスコストが課題となりました。

そこで、ブロックを技術的に"回避"するアプローチを破棄し、各媒体が公式に提供している「RSSフィード」を利用する設計へシフトしました。
これは、物流の現場における**「無理に近道を狙うよりも、整備された確実な道を行く方が、結果的に全体最適(最速)に繋がる」**という実務経験に基づく判断です。これにより、確実かつ安全なデータパイプラインを即座に構築しました。

② 10時間ビルドを可能にした Flask の選定

本システムのコア価値は「入力された動的キーワードからデータを集約し、LLMに投げて結果を返す」というデータフローの即時性です。
重厚な認証基盤やORMを必要としないフェーズであるため、ルーティングが最速で組めるマイクロフレームワークのFlaskを選定。過剰な設計(オーバーエンジニアリング)を徹底的に削ぎ落とすことで、プロトタイプの開発自体は1日(約10時間)でのスピードロールアウトを可能にしました。

③ Gemini 2.5 Flash によるコスト・速度の最適化

最大100件におよぶ記事テキストのコンテキストを一撃でコンテキストウィンドウに注入する必要があるため、広大なトークン許容量を持つGeminiモデルが必然的な選択肢となりました。
その上で、レスポンス速度(10〜15秒)と、個人開発における優れたコストパフォーマンスのバランスを考慮し、2026年5月時点で選定した軽量モデルである gemini-2.5-flash を採用しています。

④ デザインの排除と1カラムUIへの特化

昨今のモダンなJavaScriptフレームワーク(React/Vue等)によるコンポーネント設計はあえて行わず、素のHTML/CSSで実装しています。
UIデザインのレイアウトにリソースを割くのをやめ、「ユーザーがスクロールの手を止めることなく、正確な情報だけを脳内に滑り込ませる」という実用性のみに特化させました。


5. 🚀 セットアップ手順 (Mac / Linux版)

ローカルの仮想環境(Linux / macOS)で動作させるための手順は以下の通りです。

# 1. リポジトリのクローン
git clone https://github.com/tosane932/puoppo_app.git
cd puoppo_app

# 2. 仮想環境の作成と有効化
python3 -m venv .venv
source .venv/bin/activate

# 3. 必要なライブラリのインストール
pip install -r requirements.txt

# 4. APIキーの設定
export GEMINI_API_KEY="あなたのAPIキー"

# 5. アプリの起動
python app.py

6. 🚀 セットアップ手順 (Windows版)

Windows環境のローカルで動作させるための手順です。

# 1. リポジトリのクローン
git clone https://github.com/tosane932/puoppo_app.git
cd puoppo_app

# 2. 仮想環境の作成と有効化
python -m venv .venv
# [PowerShellの場合]
.venv\Scripts\Activate.ps1
# [コマンドプロンプトの場合]
.venv\Scripts\activate.bat

# 3. 必要なライブラリのインストール
pip install -r requirements.txt

# 4. APIキーの設定
# [PowerShellの場合]
$env:GEMINI_API_KEY="あなたのAPIキー"
# [コマンドプロンプトの場合]
set GEMINI_API_KEY=あなたのAPIキー

# 5. アプリの起動
python app.py

7. 今後のロードマップ(技術の深掘りと実績の証明)

現在は初期要件を満たし、実用に耐える打率を出していますが、2026年末までに「現場でもそのまま通用する」構成へと昇華させるため、以下の2段階のリファクタリングを計画しています。

① 密結合なアーキテクチャの分離

現在Flaskに集約されている「RSS解析」「LLM制御」「ビュー制御」のロジックを整理・分離し、クリーンアーキテクチャの概念を取り入れた、変更に強い疎結合なレイヤードアーキテクチャへ移行します。

② テスト自動化の基盤構築

外部API(Gemini)の挙動変化やRSSフィードのフォーマット変更に追従できるよう、Pytestを用いたユニットテストおよびモックテストを導入し、CI(継続的インテグレーション)を意識した堅牢なコードベースを構築します。


8. おわりに

『Puoppo(ポッポ)』の開発を通じ、過剰な設計や流行の技術スタックに踊らされることなく、「目の前にある具体的な課題に対して、必要なパーツだけをシンプルに組み合わせる」というミニマリズムの有効性を再確認しました。

無駄な情報収集の時間を削り、創出されたリソースで次は何を実装するか。そうしたエンジニアリング本来の楽しさを、このシステムは教えてくれています。


GitHubリポジトリはこちら: tosane932 / puoppo_app

関連記事

0
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
0
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?