- 本の登録 - タイトル検索またはバーコードスキャンで、本をすぐに追加
- 年別読書シート - 読書履歴を年ごとにビジュアルなカードで整理
- AI読書分析 - ChatGPT による分析であなたの読書傾向を発見
- 読書統計 - 月別の読書数、カテゴリ別の内訳、トレンドを可視化
- 全文検索 - MeiliSearch による高速な日本語全文検索
| レイヤー | 技術 |
|---|---|
| モノレポ | Turborepo + pnpm workspaces |
| フロントエンド | Next.js 14, React 18, TypeScript, Tailwind CSS |
| バックエンド | NestJS 11, GraphQL, DDDアーキテクチャ |
| データベース | MySQL 9.3 + Prisma ORM |
| 認証 | NextAuth.js (Google OAuth) |
| 検索 | MeiliSearch (日本語最適化ビルド) |
| AI | ChatGPT (Codex backend) |
| 決済 | Stripe |
kidoku/
├── apps/
│ ├── web/ # Next.js フロントエンド
│ └── api/ # NestJS GraphQL API (DDD)
├── packages/
│ └── eslint-config # 共通 ESLint 設定
├── docker/ # MeiliSearch & MySQL コンテナ
├── docs/ # アーキテクチャ・デプロイ関連ドキュメント
└── scripts/ # 開発自動化スクリプト
- Node.js >= 22
- pnpm >= 10.5.2
- Docker & Docker Compose
# 依存関係のインストール
pnpm install
# 環境変数の設定
cp apps/web/.env.example apps/web/.env
cp apps/api/.env.example apps/api/.env
# Docker サービス起動 (MySQL, MeiliSearch)
docker-compose up -d
# データベースのセットアップ
pnpm --filter web db:push
pnpm --filter web prisma generate
pnpm --filter api db:push
# 全ての開発サーバーを起動
pnpm dev| サービス | URL |
|---|---|
| Webアプリ | http://localhost:3000 |
| GraphQL API | http://localhost:4000/graphql |
| MeiliSearch | http://localhost:7700 |
docker-compose up --build
# MeiliSearch にドキュメントを登録
curl -XPOST -H "Authorization: Bearer ${ADMIN_AUTH_TOKEN}" \
http://localhost:3000/api/batch/meilisearchpnpm dev # 全サービス起動
pnpm build # 全パッケージのビルド
pnpm lint # リント実行
pnpm lint:fix # リントの自動修正
pnpm format # Prettier でフォーマット
pnpm check-types # 型チェック
pnpm validate # lint + 型チェック + テストを一括実行# フロントエンド
pnpm --filter web test # 単体テスト
pnpm --filter web test:c # カバレッジ付き
# バックエンド
pnpm --filter api test # 単体テスト
pnpm --filter api test:e2e # E2EテストバックエンドAPIは ドメイン駆動設計 (DDD) によるレイヤードアーキテクチャを採用しています。
apps/api/src/
├── domain/ # ビジネスロジックの中核 (エンティティ、リポジトリインターフェース)
├── application/ # ユースケース
├── infrastructure/ # 外部連携 (DB, 認証)
├── presentation/ # GraphQLリゾルバー、DTO、モジュール
└── shared/ # 横断的関心事
依存ルール: domain は他層に依存しません。application は domain のみに依存します。infrastructure は domain のインターフェースを実装します。presentation は application を通して処理を実行します。
詳細なアーキテクチャドキュメントは以下を参照してください。
コントリビュートを歓迎します!ガイドラインは CONTRIBUTING.md を参照してください。
MIT - Naoto Tanaka