アーキテクチャ 構成関連 - yama-0t0k0/wiki GitHub Wiki
人材紹介向けCRMシステム+チャット機能を想定したサーバーサイドDart構成を、構成要素・目的・使用技術ごとにまとめた表
リアルタイムチャットやPVカウンターのような“高頻度での書き込み”や“リアルタイム性”が求められる機能は、Cloud Firestore ではなく Firebase Realtime Database(RTDB)を併用するのが合理的な選択です。
※「高頻度」の基準
書き込み制限(1ドキュメントにつき1秒あたり最大1書き込み)
を超える場合。
構成要素 |
目的・役割 |
使用技術・サービス |
備考 |
フロントエンド |
UI・ユーザー操作 |
Flutter |
Web/モバイル共通対応可 |
バックエンドAPI |
業務ロジック、データアクセスAPI |
Dart(shelf, shelf_router, shelf_cors)など |
REST API or GraphQL |
データベース(業務) |
候補者情報、求人票、進捗、レポートなどの保管 |
Cloud Firestore |
認証付きクエリ、検索性良 |
データベース(チャット) |
チャットメッセージ、既読通知、PVカウントなどのリアルタイム処理 |
Firebase Realtime Database |
低レイテンシ処理向け |
認証・認可 |
ユーザー認証、セキュリティルール適用 |
Firebase Auth(Google・メール等) |
FirestoreとRealtimeDB両方に適用可能 |
ホスティング・CDN |
APIや静的ファイルの提供 |
Firebase Hosting or Cloud Run(for Dart backend) |
DartはCloud Runと相性◎ |
ロギング/監視 |
エラー・パフォーマンス監視 |
Google Cloud Logging、Crashlytics(Flutter側) |
任意でDatadogなども可 |
バッチ・スケジュール |
日次レポート生成、期限切れ通知 |
Cloud Scheduler + Dart Functions or Cloud Functions |
Firebaseベースでも対応可 |
チャット通知 |
新着メッセージの通知(クライアント) |
Firebase Cloud Messaging(FCM) |
モバイル/ブラウザ通知両方可 |
ストレージ |
履歴書、職務経歴書のアップロード・管理 |
Firebase Storage |
Firestoreとの連携可能 |
想定ユースケースと適合性
ユースケース |
適合性 |
備考 |
業務管理(求人・求職者・マッチング) |
◎ |
Firestoreとの相性が良く、リアルタイム更新も可能 |
リアルタイムチャット機能 |
◎ |
RTDBを使用することで低レイテンシで実装可能 |
プッシュ通知 |
◎ |
Firebase Cloud Messagingがそのまま使える |
大量アクセス時のスケーラビリティ |
◯〜△ |
Cloud Run や Cloud Functions でスケーラブルだが、超大規模には注意 |
複雑な集計・分析 |
△ |
Firestoreのみでは不向き、必要に応じて BigQuery や RDB 併用を検討 |
graph TD
subgraph Client
FE[Flutter App/Web]
end
subgraph Backend
API[Dart Server]
end
subgraph Firebase
AUTH[Firebase Auth]
FS[Firestore]
RTDB[Realtime Database]
FCM[Firebase Cloud Messaging]
STG[Firebase Storage]
MON[Cloud Monitoring & Logging]
end
subgraph DevOps
CI[GitHub Actions]
CR[Cloud Run]
end
FE -->|REST/gRPC| API
FE -->|Login| AUTH
FE -->|Receive| FCM
FE -->|Upload/Download| STG
API -->|Verify Token| AUTH
API -->|Read/Write| FS
API -->|Chat I/O| RTDB
API -->|Notify| FCM
API -->|File Access| STG
API -->|Logs/Errors| MON
CI -->|Deploy API| CR
CI -->|Deploy Web| FE
CR --> API
FS --> MON
RTDB --> MON
AUTH --> MON
https://www.mermaidchart.com/raw/e89b92fa-0919-46e8-9761-f8f05314413a?theme=light&version=v0.1&format=svg
OSSのRAGを想定したチャットボット構成
https://www.mermaidchart.com/raw/119f3d37-1b8d-48f1-8141-d5fee013994b?theme=light&version=v0.1&format=svg
graph TD
subgraph User Side - Smartphone
A1[Flutter Web\nUser Smartphone Browser]
end
subgraph Firebase
B1[Firebase Auth\nUser Authentication]
B2[Firestore\nUser Profile]
B3[Firebase Functions\nor Dart Server]
end
subgraph On-Premises Environment
C1[API Gateway\nWith Auth]
C2[Haystack Pipeline RAG]
C3[Retriever\nFAISS / Qdrant]
C4[Document Store\nLocal]
C5[Reader\nLocal LLM Mistral 7B and others]
C6[Chat Log Storage\nPostgreSQL / SQLite]
end
%% Flow
A1 --> B1
B1 --> B3
A1 --> B3
B3 -->|Send User ID and Profile| C1
C1 --> C2
C2 --> C3
C3 --> C4
C2 --> C5
C2 --> C6
C5 -->|Response| C2
C2 -->|Return Response| B3
B3 --> A1