Agent skill

rustfeed-architecture

rustfeed プロジェクトのCargoワークスペース構成、クレート間の依存関係、データベーススキーマ、新機能追加時の配置ルールについて説明します。アーキテクチャに関する質問や新機能追加時に使用します。

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/rustfeed-architecture

SKILL.md

Rustfeed アーキテクチャガイド

このスキルは rustfeed プロジェクトのアーキテクチャと構造について説明します。

Cargoワークスペース構成

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-clirustfeed-tuirustfeed-core に依存
  • CLI/TUI 間で直接の依存関係は持たない

新機能追加時の配置ルール

機能の種類 配置先
データモデル 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/

判断基準

  • 両方のUIで使うrustfeed-core
  • CLIのみで使うrustfeed-cli
  • TUIのみで使うrustfeed-tui

データベーススキーマ

feeds table:

  • id: INTEGER PRIMARY KEY
  • url: TEXT NOT NULL UNIQUE
  • title: TEXT
  • description: TEXT
  • created_at: TEXT NOT NULL
  • updated_at: TEXT NOT NULL

articles table:

  • id: INTEGER PRIMARY KEY
  • feed_id: INTEGER NOT NULL (FOREIGN KEY)
  • title: TEXT NOT NULL
  • url: TEXT NOT NULL UNIQUE
  • content: TEXT
  • published_at: TEXT
  • is_read: INTEGER NOT NULL DEFAULT 0
  • is_favorite: INTEGER NOT NULL DEFAULT 0
  • created_at: TEXT NOT NULL

スキーマ変更時のルール

  1. rustfeed-core/src/db/mod.rsinit_db() を更新
  2. 既存データとの互換性を考慮
  3. マイグレーションが必要な場合は別途検討
  4. スキーマ変更後は CLAUDE.md のスキーマセクションも更新

依存関係管理

追加前の確認事項

  • 必要最小限の依存に留める
  • 既存の依存で代替できないか検討
  • ライセンスの確認(MIT/Apache-2.0推奨)
  • メンテナンス状況の確認

features指定の方針

toml
# 良い例:必要な機能のみ
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }

# 悪い例:不要な機能も含む
tokio = { version = "1", features = ["full"] }

クレート別の依存追加方針

  • rustfeed-core: 依存追加は慎重に(CLI/TUI両方に影響)
  • rustfeed-cli: CLI固有の依存のみ
  • rustfeed-tui: TUI固有の依存(ratatui等)

主要な依存クレート

クレート 用途 配置
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

非同期処理の方針

  • I/O操作(ネットワーク、ファイル)は非同期
  • データベース操作は同期(rusqliteの制約)
  • tokio::spawn でバックグラウンド処理
  • async 関数は _async サフィックスを付けない

ファイル検索のヒント

新機能実装時に参考にすべきファイル:

bash
# データモデルの確認
rustfeed-core/src/models/

# データベース操作の参考
rustfeed-core/src/db/mod.rs

# 既存CLIコマンドの参考
rustfeed-cli/src/commands/

# フィード処理の実装
rustfeed-core/src/feed/

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results