Open You-keitou opened 1 day ago
root/ ├── packages/ │ ├── shared/ # 共有パッケージ │ │ ├── types/ # 共有の型定義 │ │ │ ├── entities/ # ドメインエンティティの型 │ │ │ └── dto/ # DTOの型定義 │ │ └── utils/ # 共有ユーティリティ │ │ │ ├── bot/ # LINE Botアプリケーション │ │ ├── src/ │ │ │ ├── domain/ # ドメイン層 │ │ │ │ ├── entities/ # ドメインエンティティ │ │ │ │ ├── repositories/ # リポジトリインターフェース │ │ │ │ └── services/ # ドメインサービス │ │ │ │ │ │ │ ├── application/ # アプリケーション層 │ │ │ │ ├── usecases/ # ユースケース │ │ │ │ ├── dto/ # DTOの定義 │ │ │ │ └── services/ # アプリケーションサービス │ │ │ │ │ │ │ ├── infrastructure/ # インフラストラクチャ層 │ │ │ │ ├── line/ # LINE SDK実装 │ │ │ │ ├── llm/ # LLMサービス実装 │ │ │ │ ├── database/ # データベース実装 │ │ │ │ └── repositories/ # リポジトリ実装 │ │ │ │ │ │ │ └── interfaces/ # インターフェース層 │ │ │ ├── controllers/ # コントローラー │ │ │ ├── middlewares/ # ミドルウェア │ │ │ └── validators/ # バリデーター │ │ │ │ │ ├── tests/ # テストファイル │ │ │ ├── unit/ # ユニットテスト │ │ │ ├── integration/ # 統合テスト │ │ │ └── e2e/ # E2Eテスト │ │ │ │ │ └── config/ # 設定ファイル │ │ │ └── liff/ # LIFFアプリケーション │ ├── src/ │ │ ├── domain/ # ドメイン層 │ │ │ ├── entities/ # ドメインエンティティ │ │ │ └── services/ # ドメインサービス │ │ │ │ │ ├── application/ # アプリケーション層 │ │ │ ├── usecases/ # ユースケース │ │ │ └── services/ # アプリケーションサービス │ │ │ │ │ ├── infrastructure/ # インフラストラクチャ層 │ │ │ ├── line/ # LINE LIFF SDK実装 │ │ │ ├── api/ # APIクライアント │ │ │ └── storage/ # ストレージ実装 │ │ │ │ │ └── presentation/ # プレゼンテーション層 │ │ ├── components/ # Reactコンポーネント │ │ │ ├── pages/ # ページコンポーネント │ │ │ ├── features/ # 機能別コンポーネント │ │ │ └── shared/ # 共有コンポーネント │ │ ├── hooks/ # カスタムフック │ │ ├── stores/ # 状態管理 │ │ └── styles/ # スタイル定義 │ │ │ ├── tests/ # テストファイル │ │ ├── unit/ # ユニットテスト │ │ ├── integration/ # 統合テスト │ │ └── e2e/ # E2Eテスト │ │ │ └── config/ # 設定ファイル │ ├── tools/ # ビルドツール、スクリプトなど ├── .github/ # GitHub Actions設定 ├── package.json # ルートpackage.json └── tsconfig.json # ルートTypeScript設定
依存関係の方向:
責務の分離:
スケーラビリティ:
// domain/entities/ChatHistory.ts export class ChatHistory { constructor( private readonly id: string, private readonly messages: Message[], private readonly metadata: ChatMetadata ) {} analyze(): AnalysisResult { // ビジネスロジック } } // application/usecases/AnalyzeChatHistory.ts export class AnalyzeChatHistoryUseCase { constructor( private chatRepository: ChatHistoryRepository, private llmService: LLMService ) {} async execute(chatId: string): Promise<AnalysisResult> { const history = await this.chatRepository.findById(chatId); const analysis = history.analyze(); return this.llmService.processAnalysis(analysis); } } // infrastructure/llm/DifyLLMService.ts export class DifyLLMService implements LLMService { async processAnalysis(analysis: AnalysisResult): Promise<LLMResponse> { //
重要なポイント:
1. 共有パッケージ(shared)
2. Botアプリケーション(bot)
3. LIFFアプリケーション(liff)
4. アーキテクチャの特徴
依存関係の方向:
責務の分離:
スケーラビリティ:
5. 実装例(botパッケージの場合):