プロジェクト構造
Monorepo アーキテクチャの概要
概要
EasyStarter は Turborepo monorepo 構造と pnpm workspaces を使用しています。
ディレクトリ構造
easysaas/
├── apps/
│ ├── web/ # フロントエンド(React + TanStack Start)
│ ├── server/ # バックエンド(Hono + Cloudflare Workers)
│ ├── native/ # モバイル(React Native + Expo)
├── packages/
│ ├── i18n/ # 共有国際化
│ ├── api-client/ # 型安全な API クライアント
│ └── storage-config/ # ストレージ設定
└── docs/ # ドキュメントアプリ
Web (apps/web/)
以下の技術で構築されたフロントエンドアプリケーション:
- React 19 - UI ライブラリ
- TanStack Start - フルスタック React フレームワーク
- TanStack Router - 型安全なルーティング
- TanStack Query - データフェッチング
- TailwindCSS - スタイリング
- shadcn/ui - コンポーネントライブラリ
apps/web/src/
├── components/ # 再利用可能な UI コンポーネント
├── routes/ # ページコンポーネントとルーティング
├── hooks/ # カスタム React フック
├── lib/ # ユーティリティ関数
├── configs/ # アプリ設定
└── styles/ # グローバルスタイルServer (apps/server/)
以下の技術で構築されたバックエンド API:
- Hono - Web フレームワーク
- Cloudflare Workers - サーバーレスランタイム
- Drizzle ORM - データベースツールキット
- oRPC - 型安全な RPC
apps/server/src/
├── routers/ # API ルーター(oRPC)
├── handlers/ # ビジネスロジック
├── db/ # データベーススキーマとマイグレーション
├── middlewares/ # リクエストミドルウェア
├── emails/ # メールテンプレート
└── lib/ # 共有ユーティリティNative (apps/native/)
以下の技術で構築されたモバイルアプリ:
- React Native - クロスプラットフォームモバイル
- Expo - 開発プラットフォーム
- Expo Router - ファイルベースのルーティング
パッケージ
i18n (packages/i18n/)
すべてのサポートされるロケールの翻訳を含む共有国際化パッケージ。
api-client (packages/api-client/)
サーバーの型から生成された型安全な API クライアント。
storage-config (packages/storage-config/)
共有ストレージ設定とユーティリティ。
主要ファイル
| ファイル | 目的 |
|---|---|
turbo.json | Turborepo パイプライン設定 |
pnpm-workspace.yaml | ワークスペースパッケージ定義 |
.oxlintrc.json | リンティングルール(oxlint) |
.oxfmtrc.json | フォーマットルール(oxfmt) |
tsconfig.json | TypeScript 設定 |
開発ワークフロー
# 依存関係をインストール
pnpm install
# すべてのアプリを起動
pnpm dev
# 特定のアプリを起動
pnpm dev:web
pnpm dev:server
# すべてをビルド
pnpm build
# 型チェック
pnpm check-types