rustfeed プロジェクトのCargoワークスペース構成、クレート間の依存関係、データベーススキーマ、新機能追加時の配置ルールについて説明します。アーキテクチャに関する質問や新機能追加時に使用します。
このスキルは rustfeed プロジェクトのアーキテクチャと構造について説明します。
rustfeed/
├── Cargo.toml # ワークスペース定義
├── rustfeed-core/ # 共有ライブラリ
│ └── src/
│ ├── lib.rs
│ ├── models/ # データモデル (Feed, Article)
│ ├── db/ # データベース操作
│ ├── feed/ # フィード取得・パース
│ └── config/ # 設定管理
├── rustfeed-cli/ # CLIバイナリ
│ └── src/
│ ├── main.rs
│ └── commands/ # CLIコマンド実装
└── rustfeed-tui/ # TUIバイナリ
└── src/
├── main.rs
├── app.rs # アプリケーション状態
├── ui.rs # UI描画
└── event.rs # イベント処理
rustfeed-cli ──────┐
├──► rustfeed-core
rustfeed-tui ──────┘
重要な原則:
rustfeed-core は他のクレートに依存しないrustfeed-cli と rustfeed-tui は rustfeed-core に依存| 機能の種類 | 配置先 |
|---|---|
| データモデル | rustfeed-core/src/models/ |
| データベース操作 | rustfeed-core/src/db/ |
| フィード処理 | rustfeed-core/src/feed/ |
| 設定関連 | rustfeed-core/src/config/ |
| CLIコマンド | rustfeed-cli/src/commands/ |
| TUI画面/コンポーネント | rustfeed-tui/src/ |
rustfeed-corerustfeed-clirustfeed-tuifeeds table:
id: INTEGER PRIMARY KEYurl: TEXT NOT NULL UNIQUEtitle: TEXTdescription: TEXTcreated_at: TEXT NOT NULLupdated_at: TEXT NOT NULLarticles table:
id: INTEGER PRIMARY KEYfeed_id: INTEGER NOT NULL (FOREIGN KEY)title: TEXT NOT NULLurl: TEXT NOT NULL UNIQUEcontent: TEXTpublished_at: TEXTis_read: INTEGER NOT NULL DEFAULT 0is_favorite: INTEGER NOT NULL DEFAULT 0created_at: TEXT NOT NULLrustfeed-core/src/db/mod.rs の init_db() を更新CLAUDE.md のスキーマセクションも更新# 良い例:必要な機能のみ
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
# 悪い例:不要な機能も含む
tokio = { version = "1", features = ["full"] }
| クレート | 用途 | 配置 |
|---|---|---|
tokio |
非同期ランタイム | core |
anyhow |
エラーハンドリング | core |
rusqlite |
SQLiteデータベース | core |
feed-rs |
RSS/Atomパース | core |
reqwest |
HTTP通信 | core |
chrono |
日時処理 | core |
clap |
CLIパーサー | cli |
ratatui |
TUIフレームワーク | tui |
colored |
ターミナル出力色付け | cli |
tokio::spawn でバックグラウンド処理async 関数は _async サフィックスを付けない新機能実装時に参考にすべきファイル:
# データモデルの確認
rustfeed-core/src/models/
# データベース操作の参考
rustfeed-core/src/db/mod.rs
# 既存CLIコマンドの参考
rustfeed-cli/src/commands/
# フィード処理の実装
rustfeed-core/src/feed/