ProductReadyProductReady

プロジェクト構造

ProductReadyのアーキテクチャを理解する - すべての配置場所とその理由

プロジェクト構造

ProductReadyは明確で論理的な構造に従っています。このガイドは、すべての配置場所とコードを追加する場所を理解するのに役立ちます。

Next.jsは初めて? この構造は、スケーラビリティのための追加の組織化を伴うNext.js 15+ App Router規約に従っています。


概要

apps/productready/
├── src/                    # すべてのアプリケーションコード
│   ├── app/                # Next.jsページとルート
│   ├── components/         # Reactコンポーネント
│   ├── db/                 # データベーススキーマとクエリ
│   ├── lib/                # ユーティリティと設定
│   └── server/             # サーバーサイドコード(tRPC)
├── content/                # ドキュメント(MDX)
├── public/                 # 静的アセット
├── spec/                   # 製品仕様と設計ドキュメント
└── tests/                  # テストファイル

詳細構造

apps/productready
├─ src
│  ├─ app
│  │  ├─ (home)/
│  │  ├─ dashboard/
│  │  ├─ api/health/route.ts
│  │  ├─ docs/[[...slug]]/page.tsx
│  │  ├─ layout.tsx
│  │  └─ global.css
│  ├─ components
│  │  ├─ ui/ (button.tsx, card.tsx, ...)
│  │  └─ auth/auth-button.tsx
│  ├─ db
│  │  ├─ schema/ (users.ts, tasks.ts, posts.ts)
│  │  ├─ index.ts
│  │  └─ seed.ts
│  ├─ lib
│  │  ├─ trpc/client.ts
│  │  ├─ auth.ts
│  │  └─ demo.ts
│  └─ server
│     ├─ routers/ (tasks.ts, users.ts)
│     ├─ trpc.ts
│     └─ index.ts
├─ content
│  └─ docs
│     ├─ en/ (index.mdx, quick-start.mdx, ...)
│     ├─ zh-CN/ (index.mdx, ...)
│     └─ ja/ (index.mdx, ...)
├─ public/assets/
├─ spec/ (product-design.md, icp-guide.md, ...)
├─ .env.example
├─ package.json
├─ next.config.mjs
└─ drizzle.config.ts

主要ディレクトリの説明

src/app/ - Next.jsページ

ここにページとルートが配置されます。Next.jsはファイルベースのルーティングを使用します。

フォルダ構造 = URL構造

  • app/(home)/page.tsx/(ランディングページ)
  • app/dashboard/page.tsx/dashboard
  • app/dashboard/tasks/page.tsx/dashboard/tasks
  • app/api/health/route.ts/api/health(APIエンドポイント)

ルートグループ: (home) - 括弧はURLに影響せず、整理のためだけです

特別なファイル

  • page.tsx - 実際のページコンポーネント
  • layout.tsx - 共有レイアウトラッパー
  • loading.tsx - ローディング状態
  • error.tsx - エラーバウンダリ
  • route.ts - APIエンドポイント

追加する場所:

  • 新しいページ → page.tsxを含むフォルダを作成
  • 新しいAPI → route.tsを作成

src/components/ - Reactコンポーネント

再利用可能なUIコンポーネント。

components/
├─ ui/               # 基本UIコンポーネント(ボタン、カードなど)
├─ auth/             # 認証関連コンポーネント
├─ dashboard/        # ダッシュボード固有のコンポーネント
└─ marketing/        # マーケティング/ランディングページコンポーネント

命名規約

  • PascalCaseでファイルに名前を付ける:TaskCard.tsx
  • エクスポート名と一致させる:export function TaskCard() {}

src/db/ - データベース

Drizzle ORMスキーマとクエリ。

db/
├─ schema/
│  ├─ users.ts       # ユーザーテーブルスキーマ
│  ├─ tasks.ts       # タスクテーブルスキーマ
│  └─ index.ts       # すべてのスキーマをエクスポート
├─ index.ts          # データベースクライアント
└─ seed.ts           # シードデータ

新しいテーブルを追加する方法

  1. schema/に新しいファイルを作成:schema/posts.ts
  2. Drizzleでスキーマを定義
  3. schema/index.tsからエクスポート
  4. pnpm db:pushを実行

src/server/ - tRPC API

サーバーサイドのAPIロジック。

server/
├─ routers/
│  ├─ tasks.ts       # タスク関連のAPI
│  ├─ users.ts       # ユーザー関連のAPI
│  └─ posts.ts       # 投稿関連のAPI
├─ trpc.ts           # tRPC設定
└─ index.ts          # ルート集約

新しいAPIを追加する方法

  1. routers/に新しいファイルを作成
  2. tRPCルーターを定義
  3. index.tsでマージ

src/lib/ - ユーティリティ

共有ユーティリティと設定。

lib/
├─ trpc/client.ts    # tRPCクライアント設定
├─ auth.ts           # 認証ヘルパー
├─ demo.ts           # デモモードユーティリティ
└─ utils.ts          # 一般的なユーティリティ

content/ - ドキュメント

Fumadocsドキュメント(MDX)。

content/
└─ docs/
   ├─ en/            # 英語ドキュメント
   ├─ zh-CN/         # 中国語ドキュメント
   └─ ja/            # 日本語ドキュメント

新しいドキュメントページを追加する方法

  1. content/docs/[locale]/.mdxファイルを作成
  2. フロントマターを追加(タイトル、説明)
  3. meta.jsonでナビゲーションを更新

public/ - 静的アセット

画像、フォント、その他の静的ファイル。

public/
├─ assets/
│  ├─ icons/
│  └─ screenshots/
└─ favicon.ico

使用方法

<img src="/assets/icons/logo.svg" alt="Logo" />

開発ワークフロー

新しい機能を追加

例:タスク管理機能を追加

  1. データベーススキーマsrc/db/schema/tasks.ts
  2. APIルーターsrc/server/routers/tasks.ts
  3. ページsrc/app/dashboard/tasks/page.tsx
  4. コンポーネントsrc/components/tasks/TaskList.tsx

新しいページを追加

  1. src/app/にフォルダを作成
  2. page.tsxを追加
  3. 必要に応じてlayout.tsxを追加

新しいAPIを追加

  1. src/server/routers/にルーターを作成
  2. src/server/index.tsでマージ
  3. クライアントからtrpc.myRouter.myQuery.useQuery()を使用

ベストプラクティス

ファイル組織

  • 機能でグループ化:関連ファイルを一緒に保管
  • 明確な命名:ファイルの目的がわかるように
  • 浅い階層:深くネストしすぎない
  • グローバル状態を避ける:可能な限りローカルに保つ

コンポーネント

  • 小さく集中:1つのコンポーネント = 1つの責任
  • Props over Context:可能な限りpropsを使用
  • TypeScript:すべてに型付け
  • 大きなコンポーネント:複雑な場合は分割

データベース

  • スキーマファースト:常にスキーマを最初に定義
  • マイグレーションpnpm db:pushでスキーマを更新
  • シード:開発用のテストデータ
  • 生のSQL:Drizzleクエリビルダーを使用

次のステップ

プロジェクト構造を理解したので:

  1. 認証ガイド - ユーザー認証をセットアップ
  2. データベースガイド - スキーマとクエリを学ぶ
  3. tRPCガイド - 型安全なAPIを構築
  4. チュートリアル - 新しい機能を追加

ヘルプが必要ですか?

ProductReadyで構築を楽しんでください! 🚀

On this page