🗣️ みんなの話題
Reddit 風のスレッド・コメントシステムのサンプル実装です。自由に話題を投稿し、コメントを通じてコミュニケーションを楽しめます。
Warning
本 README を含むプロジェクト内のコードは大半が AI により生成されたものであり、必ずしも正しい内容とは限らない点にご注意ください。
- 👤 ユーザー認証(JWT)
- 📝 スレッド投稿・閲覧
- 💬 木構造コメントシステム
- 👨💻 ユーザープロフィールページ(投稿したスレッド・コメント一覧表示)
- 📱 レスポンシブデザイン
- Language: Rust 🦀
- Framework: axum ⚡
- Database: PostgreSQL 🐘
- ORM: sqlx 📊
- 認証: JWT + OAuth2 (Google、予定) 🔐
- API 仕様: OpenAPI (utoipa) 📚
- Framework: Next.js 15+ (App Router) ⚛️
- UI: shadcn/ui + Tailwind CSS 🎨
- API クライアント: TanStack Query + Orval 🔄
- フォーム: React Hook Form + Zod 📋
minwada/
├── backend/ # Rust (axum) バックエンドAPI
│ ├── src/ # ソースコード
│ │ ├── main.rs # エントリーポイント
│ │ ├── config.rs # アプリケーション設定
│ │ ├── models/ # データモデル
│ │ │ ├── auth.rs
│ │ │ ├── threads.rs
│ │ │ └── users.rs
│ │ └── handlers/ # APIハンドラー
│ │ ├── auth.rs
│ │ ├── threads.rs
│ │ └── comments.rs
│ ├── migrations/ # DBマイグレーション
│ ├── database/ # DB設定
│ └── Cargo.toml # 依存関係
├── frontend/ # Next.js フロントエンド
│ ├── src/ # ソースコード
│ │ ├── app/ # App Router
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx # ホームページ
│ │ ├── components/ # UIコンポーネント
│ │ └── lib/ # ユーティリティ
│ ├── generated/ # API自動生成コード
│ └── package.json # 依存関係
├── justfile # タスクランナー
└── README.md # このファイル
- asdf - バージョン管理
- Docker Compose - コンテナ管理
- cargo-watch - Rust ホットリロード
- just - タスクランナー
$ asdf install
$ cargo install cargo-watch
$ cd backend
$ cp .env.example .env # 環境変数を設定
$ cd frontend
$ cp .env.example .env.local # 環境変数を設定
$ npm ci # 依存関係をインストール
$ just dev # バックエンドとフロントエンドの両方が起動します
- 🌐 フロントエンド: http://localhost:3000
- 🔌 バックエンド API: http://localhost:8000
- 📘 OpenAPI Docs: http://localhost:8000/swagger-ui/
- 📧 MailHog: http://localhost:8025
- バックエンドで API 仕様変更
- OpenAPI 仕様が自動更新
- フロントエンドで
npm run generate-api
実行(もしくはnpm run generate-api:watch
で自動生成) - 型安全な API クライアントが再生成
👤 ユーザー関連
- ユーザー登録・ログイン・ログアウト
- ユーザープロフィール表示
- ユーザーが投稿したスレッド一覧取得
- ユーザーが投稿したコメント一覧取得
- プロフィール編集
📋 スレッド関連
- スレッド一覧取得
- スレッド詳細取得
- スレッド作成・削除
💬 コメント関連
- スレッドのコメント一覧取得
- コメント投稿・削除
- 返信コメント(ネスト構造)
- 本プロジェクトは学習・デモ用途のサンプル実装です
- 実際の運用にはセキュリティやパフォーマンスの考慮が必要です
- 継続的に機能追加・改善を行っています
- バグ報告や機能提案は Issue からお願いします