アーキテクチャ
Jeliqで生成されるアプリケーションのアーキテクチャと設計思想を解説します。全体構成
ディレクトリ構造
フロントエンド
Next.js App Router
Next.js 14のApp Routerを使用しています。 特徴:- Server Components / Client Componentsの使い分け
- ファイルベースルーティング
- レイアウトの共有
| パス | ファイル | 説明 |
|---|---|---|
/ | app/page.tsx | トップページ |
/login | app/(auth)/login/page.tsx | ログインページ |
/dashboard | app/(dashboard)/page.tsx | ダッシュボード |
/customers | app/(dashboard)/customers/page.tsx | 顧客一覧 |
/customers/[id] | app/(dashboard)/customers/[id]/page.tsx | 顧客詳細 |
コンポーネント設計
コンポーネントは以下の原則で設計されています。Single Responsibility
Single Responsibility
各コンポーネントは単一の責任を持ちます。大きなコンポーネントは小さなコンポーネントに分割されています。
Props Drilling回避
Props Drilling回避
深いネストでのProps受け渡しを避けるため、React ContextやカスタムHooksを使用しています。
再利用性
再利用性
components/ui/配下のコンポーネントは、アプリ全体で再利用できる汎用コンポーネントです。状態管理
- サーバー状態: Supabase Clientで直接取得
- クライアント状態: React useState / useContext
- フォーム状態: React Hook Form
バックエンド
Supabase
バックエンドにはSupabaseを使用しています。Database
PostgreSQLベースのリレーショナルデータベース
Auth
認証・認可システム(メール/パスワード、OAuth)
Storage
ファイルストレージ(画像、ドキュメント等)
Realtime
リアルタイムサブスクリプション(将来対応予定)
データアクセス
Supabase JavaScript Clientを使用してデータベースにアクセスします。 例:データ取得Row Level Security (RLS)
データベースにはRow Level Security (RLS)が設定されており、ユーザーは自分のデータのみにアクセスできます。認証・認可
認証フロー
認証方式
- メール/パスワード認証: デフォルトで実装
- OAuth: Google, GitHub等(設定により追加可能)
認可
- RLS(Row Level Security): データベースレベルでのアクセス制御
- ミドルウェア: ページレベルでの認証チェック
型安全性
TypeScript
全てのコードはTypeScriptで記述されており、型安全性が確保されています。データベース型
Supabaseのスキーマから自動生成される型定義を使用します。スタイリング
Tailwind CSS
UIスタイリングにはTailwind CSSを使用しています。 特徴:- ユーティリティファーストのアプローチ
- レスポンシブデザインのサポート
- ダークモード対応(設定により)
カスタムテーマ
tailwind.config.jsでカラースキームやフォントをカスタマイズできます。
拡張ポイント
外部APIとの連携
外部APIとの連携
app/api/ディレクトリにAPIルートを追加し、外部サービスとの連携を実装できます。認証方式の変更
認証方式の変更
Supabase Authの設定を変更するか、別の認証プロバイダー(Auth0、Firebase Authなど)に置き換えられます。
状態管理の追加
状態管理の追加
より複雑な状態管理が必要な場合、Zustand、Jotai、Redux Toolkitなどを追加できます。
テストの追加
テストの追加
Jest、Testing Library、Playwrightなどを追加してテストを実装できます。