Logo generated by Claude 3.7 Sonnet
ブログ記事・Reddit投稿・GitHub動向・論文を毎日自動収集・要約するWebアプリ
Nookは、テック系の最新情報を自動的に収集し、要約するWebアプリです。
Reddit、Hacker News、GitHub Trending、技術ブログ、学術論文など多様な情報源から毎日自動的にコンテンツを収集し、LLMを使用して日本語で要約します。シンプルなWebインターフェースで閲覧でき、各トピックに対してチャット形式でフォローアップ質問も可能です。
1日平均12円の運用費*で情報収集にかかる時間を大幅に削減します。
- Hacker News: Hacker Newsから最新のテクノロジーニュースを収集
- GitHub Trending: GitHubで各言語ごとの人気リポジトリを取得
- Reddit: r/MachineLearningなどのサブレディットから人気投稿を収集して要約
- RSS: RSSフィードを監視し、更新があれば取得して要約
- arXiv論文: HuggingFaceでキュレーションされた最新の学術論文を自動収集し、HTMLページがあれば論文ごと読んで要約
- フォローアップ質問: 要約された内容について、さらに詳しく質問可能(グラウンディングあり)
- 日付別整理: 収集した情報を日付ごとに整理して表示
- レスポンシブデザイン: モバイルデバイスでも快適に閲覧可能
- AWS CDK: インフラをコードとして管理し、簡単にデプロイ
- モジュラー設計: 新しい情報源の追加が容易
- カスタマイズ可能: 設定ファイルの編集で情報源を変更可能
必要なツール(クリックして展開)
- AWS CLI と AWS CDK
- CDKでのデプロイには強めの権限が必要です。
- 先に
aws configure
でシークレットなどの認証情報を登録する必要があります。
- Python 3.11
- Dockerイメージのビルドが可能な環境
tech_feed
のセットアップにローカルのDockerを使用するらしいです。
- 以下のAPIキー:
- Google Gemini API キー(有償)
- Reddit API キー(クライアントID、クライアントシークレット)
-
リポジトリをクローン
git clone https://github.com/discus0434/nook.git cd nook
-
環境変数の設定
.env
ファイルを作成し、以下の内容を設定GEMINI_API_KEY=your_gemini_api_key REDDIT_CLIENT_ID=your_reddit_client_id REDDIT_CLIENT_SECRET=your_reddit_client_secret REDDIT_USER_AGENT=your_reddit_user_agent
-
依存関係のインストール
python -m venv .venv source .venv/bin/activate # Windowsの場合: .venv\Scripts\activate pip install -r requirements.txt pip install -r requirements-dev.txt
-
AWS CDKを使ったデプロイ
make cdk-deploy # `cdk deploy`ではない
-
アプリにアクセス デプロイ完了後は、情報収集・要約用のLambdaが毎朝9時に実行されるようになり、その実行後にコンソールに表示される
viewer
関数のURLからWebインターフェースにアクセスすると、ニュースが閲覧可能になります。
graph TD
%% スタイル定義
classDef lambdaStyle fill:#FF9900,stroke:#FF9900,stroke-width:2px,color:white;
classDef s3Style fill:#569A31,stroke:#569A31,stroke-width:2px,color:white;
classDef eventStyle fill:#FF4F8B,stroke:#FF4F8B,stroke-width:2px,color:white;
classDef apiStyle fill:#232F3E,stroke:#232F3E,stroke-width:2px,color:white;
classDef userStyle fill:#3B48CC,stroke:#3B48CC,stroke-width:2px,color:white;
%% ノード定義
User[ユーザー]:::userStyle
EventBridge[Amazon EventBridge<br>毎日定時実行]:::eventStyle
S3[Amazon S3<br>データストレージ]:::s3Style
GeminiAPI[Google Gemini API]:::apiStyle
%% Lambda関数
RedditExplorer[Lambda: reddit_explorer<br>Redditの人気投稿収集・要約]:::lambdaStyle
HackerNews[Lambda: hacker_news<br>Hacker News記事収集]:::lambdaStyle
GitHubTrending[Lambda: github_trending<br>GitHubトレンド収集]:::lambdaStyle
TechFeed[Lambda: tech_feed<br>技術ブログRSS収集・要約]:::lambdaStyle
PaperSummarizer[Lambda: paper_summarizer<br>arXiv論文収集・要約]:::lambdaStyle
Viewer[Lambda: viewer<br>Webインターフェース・チャット機能]:::lambdaStyle
%% 外部情報源
Reddit[Reddit API]
HNSource[Hacker News API]
GitHub[GitHub API]
RSSFeeds[技術ブログRSSフィード]
ArXiv[arXiv API]
%% 接続関係
EventBridge --> RedditExplorer
EventBridge --> HackerNews
EventBridge --> GitHubTrending
EventBridge --> TechFeed
EventBridge --> PaperSummarizer
RedditExplorer --> Reddit
HackerNews --> HNSource
GitHubTrending --> GitHub
TechFeed --> RSSFeeds
PaperSummarizer --> ArXiv
RedditExplorer --> GeminiAPI
TechFeed --> GeminiAPI
PaperSummarizer --> GeminiAPI
Viewer --> GeminiAPI
RedditExplorer --> S3
HackerNews --> S3
GitHubTrending --> S3
TechFeed --> S3
PaperSummarizer --> S3
S3 --> Viewer
User --> Viewer
各情報源は設定ファイルで管理されており、簡単にカスタマイズできます:
nook/lambda/reddit_explorer/subreddits.toml
を編集して、収集するサブレディットを変更できます。
[[subreddits]]
name = "MachineLearning"
# 新しいサブレディットを追加
[[subreddits]]
name = "LocalLLaMA"
nook/lambda/github_trending/languages.toml
を編集して、追跡するプログラミング言語を変更できます。
[[languages]]
name = "python"
# 新しい言語を追加
[[languages]]
name = "javascript"
nook/lambda/tech_feed/feed.toml
を編集して、RSSフィードを追加/変更できます。
[[feeds]]
key = "new_blog"
name = "My Favorite Tech Blog"
url = "https://example.com/feed.xml"
nook/lambda/viewer/templates/index.html
を編集して、UIをカスタマイズすることもできます。
朝一番にNookにアクセスすれば、昨日1日のうちに発生した以下の情報をだいたい把握できます:
- 🔥 Redditで話題になっている最新の技術トピック
- 📈 GitHub上で人気急上昇中のプロジェクト
- 📰 Hacker Newsの注目記事
- 📚 最新のAI研究論文と主要な発見
- 🌐 更新されたブログ記事
すべて日本語で要約されているため、短時間で効率的に情報をキャッチアップできます。
記事/リポジトリの詳細について追加で知りたいことがある場合は、チャットインターフェースを使ってフォローアップ質問が可能です。
Nookが収集した情報はS3へ日毎に保存されるので、他のアプリケーションやワークフローと連携することも可能です:
import boto3
import json
from datetime import date
# S3からのデータ取得の例
s3 = boto3.client('s3')
date_str = date.today().strftime("%Y-%m-%d")
response = s3.get_object(
Bucket="your-nook-bucket",
Key=f"tech_feed/{date_str}.md"
)
content = response["Body"].read().decode("utf-8")
print(content)
このプロジェクトはGNU Affero General Public License v3.0の下で公開されています。詳細は LICENSE ファイルを参照してください。
- GitHub Issues: 質問、バグ報告、機能リクエスト
- X: @IMG_5955
[*]ただし、使用状況や設定によって費用が変動する可能性があり、実際のコストは保証できません。自己責任での使用をお願いします。