要件定義書

完全オフライン環境で動作する社内向けチャットアプリケーション「LocalChat」の要件定義書です。本書では目的・スコープ・機能要件・非機能要件・制約条件を定義します。

1. 目的・背景

社内コミュニケーションを、外部サービスへ一切依存せずに行うことを目的とする。クラウドSaaS型チャットは情報漏えいリスクや閉域網要件への不適合が課題となるため、社内オンプレミス環境(閉域網)内だけで完結するチャット基盤を構築する。

2. スコープ

区分 内容
対象(スコープ内)認証、サーバー(ワークスペース)/チャンネル、メッセージ送受信、スレッド、リアクション、DM、ファイル共有、Markdown・図表描画、メンション通知、招待コード参加、複数アカウント切替、TLS/閉域網アクセス制御
対象外(スコープ外)ボイス/ビデオチャンネル(現フェーズ非対応)、外部SaaS連携、モバイル専用ネイティブアプリ、Push通知サーバー

3. 用語定義

用語 意味
閉域網インターネットに接続されていない社内LAN(プライベートネットワーク)。
サーバー(ワークスペース)チャンネルやメンバーを束ねる単位。
DMダイレクトメッセージ。1対1またはグループの個別会話。
招待コードサーバーへの参加に必要なコード。管理者/モデレーターが発行する。

4. 機能要件

ID 機能 要件内容
FR-01認証ユーザー登録・ログインを独自DBで行う。パスワードは PBKDF2-HMAC-SHA256 でハッシュ化し、トークンは HMAC で署名する(外部依存なし)。
FR-02複数アカウント1台の端末で複数アカウントを保持し、ワンクリックで切り替えできる。
FR-03プロフィール表示名・アイコン・ステータスメッセージを設定できる。
FR-04サーバー/チャンネルサーバー(ワークスペース)とテキストチャンネルを作成・一覧・閲覧できる。
FR-05招待コード参加管理者/モデレーターがコードを発行し(使用回数・有効期限の設定可)、保有者のみ参加できる。直接参加は無効。
FR-06ロール管理管理者/モデレーター/一般ユーザーの権限を管理する。
FR-07メッセージ送信・編集・削除・スレッド返信・絵文字リアクションができる。
FR-08Markdown見出し・太字・斜体・取り消し線・コード/コードブロック・引用・リスト・テーブル・リンクに対応(XSS対策済みの自前実装)。
FR-09図の埋め込みMermaid(ブラウザ内描画)と PlantUML(社内 jar によるサーバー側描画・任意設定)に対応する。
FR-10メンション@ユーザー名 による通知を行う。
FR-11DM1対1/グループのダイレクトメッセージを送受信できる。
FR-12ファイル共有画像・PDF・Officeファイル等をアップロード/ダウンロードできる。ファイルは社内サーバーのローカルへ保存する。
FR-13通知未読バッジを表示し、メンション時にブラウザ標準のデスクトップ通知を行う。
FR-14リアルタイム通信WebSocket による双方向のリアルタイム配信を行う(外部ブローカー不使用)。

5. 非機能要件

ID 分類 要件内容
NFR-01オフライン性外部CDN・クラウドストレージ・Push通知サーバーを一切使用しない。依存ライブラリ・ランタイム・図表エンジンをすべて同梱する。
NFR-02セキュリティ(閉域網)プライベートIP以外からのHTTP/WebSocket を既定で拒否する(アプリ層・OS層・バインド範囲の多層防御)。
NFR-03通信暗号化社内LAN内でも TLS(HTTPS/WSS)で通信できる。自己署名証明書の自動生成・自動更新に対応する。
NFR-04外部依存の最小化パスワードハッシュ・トークン署名を Python 標準ライブラリのみで実装する(bcrypt/jose 不使用)。
NFR-05可搬性単一ホスト上の uvicorn プロセスで全機能を提供し、DB・ファイル・証明書・ランタイムをローカルに保持する。
NFR-06可用性・堅牢性PlantUML 未導入時はソース表示へフォールバックするなど、補助機能の欠如で本体機能を停止させない。
NFR-07ビルド不要フロントエンドはバニラ HTML/CSS/JavaScript とし、ビルド工程・外部CDN を不要とする。

6. 技術スタック

区分 採用技術
バックエンドPython 3.11+ / FastAPI
リアルタイム通信WebSocket(FastAPI / uvicorn)
データベースSQLite(社内ローカル・SQLAlchemy 経由)
フロントエンドバニラ JavaScript / CSS(ビルド不要・外部CDN不使用)
図表描画Mermaid(同梱) / PlantUML(同梱 jar + JRE17)

7. 制約条件・前提

  • 運用環境はインターネットに接続されない社内オンプレミス(閉域網)であること。
  • 社内固有の設定は環境変数(.env)へ外出しし、OSS 公開を前提とする。
  • PlantUML 描画には Java 11 以上が必要(推奨は同梱の JRE17)。
  • 本番運用前に SECRET_KEY を推測困難な値へ変更すること。
  • 信頼できる社内利用を前提とする(PlantUML はサーバー上で jar を実行する)。