LocalChat 基本設計書
完全オフライン環境で動作する社内向けチャットアプリケーションの基本設計図集です。
本設計書の図はすべて Mermaid で記述され、アプリ本体に同梱された
frontend/static/vendor/mermaid.min.js を用いてオフライン描画されます。外部CDN・インターネット接続は不要です。
1. システム概要
LocalChat は、外部サービスに一切依存せず社内イントラネット(閉域網)内だけで完結するチャットアプリです。 サーバー(ワークスペース)/チャンネル/DM/返信/リアクション/ファイル添付/メンション/図表描画(Mermaid・PlantUML)に対応します。
| 分類 | 採用技術 | 備考 |
|---|---|---|
| バックエンド | Python / FastAPI | REST API + WebSocket |
| リアルタイム通信 | WebSocket(プロセス内 ConnectionManager) | 外部ブローカー不使用 |
| データストア | SQLite(SQLAlchemy ORM) | オンプレミスのローカルファイル |
| 認証 | PBKDF2-HMAC-SHA256 + HMAC | 標準ライブラリのみ(外部依存なし) |
| フロントエンド | 素のHTML / CSS / JavaScript(SPA) | ローカル配信・CDN不使用 |
| 図表描画 | Mermaid(同梱) / PlantUML(同梱jar + JRE) | サーバー側でSVG生成 |
| セキュリティ | TLS(自己署名自動生成)+ プライベートNW限定ガード | グローバルIPを遮断 |
2. システム全体構成
flowchart LR
subgraph LAN["社内LAN(プライベートネットワーク・閉域網)"]
direction LR
subgraph Client["クライアント(ブラウザ SPA)"]
UI["index.html / app.js
markdown.js / mermaid.min.js"]
end
subgraph Server["社内サーバー(uvicorn + FastAPI)"]
Guard{{"PrivateNetworkGuard
ミドルウェア"}}
API["REST API ルーター群"]
WS["WebSocket /ws
ConnectionManager"]
SVC["サービス層 / 認証 / セキュリティ"]
ORM["SQLAlchemy ORM"]
RENDER["PlantUML レンダラ"]
end
DB[("SQLite
localchat.db")]
FILES[("ローカルファイル
data/uploads")]
JAR["plantuml.jar + JRE17"]
end
Internet(("インターネット")) -. 遮断 .-x Guard
UI -- "HTTPS (REST)" --> Guard
UI -- "WSS (リアルタイム)" --> Guard
Guard --> API
Guard --> WS
API --> SVC
WS --> SVC
SVC --> ORM
ORM --> DB
API --> FILES
RENDER --> JAR
API --> RENDER
WS -- "イベント配信" --> UI
flowchart LR
subgraph LAN["Corporate LAN (private, closed network)"]
direction LR
subgraph Client["Client (browser SPA)"]
UI["index.html / app.js
markdown.js / mermaid.min.js"]
end
subgraph Server["On-prem server (uvicorn + FastAPI)"]
Guard{{"PrivateNetworkGuard
middleware"}}
API["REST API routers"]
WS["WebSocket /ws
ConnectionManager"]
SVC["Service / Auth / Security"]
ORM["SQLAlchemy ORM"]
RENDER["PlantUML renderer"]
end
DB[("SQLite
localchat.db")]
FILES[("Local files
data/uploads")]
JAR["plantuml.jar + JRE17"]
end
Internet(("Internet")) -. blocked .-x Guard
UI -- "HTTPS (REST)" --> Guard
UI -- "WSS (realtime)" --> Guard
Guard --> API
Guard --> WS
API --> SVC
WS --> SVC
SVC --> ORM
ORM --> DB
API --> FILES
RENDER --> JAR
API --> RENDER
WS -- "event push" --> UI
図1. システム全体構成。社内LAN内で完結し、グローバルIPからのアクセスはミドルウェアで遮断される。