要件/ Functional & non-functional
要件は機能要件 10 カテゴリ・合計 約 135 件と、非機能要件 5 カテゴリで構成しています。本ページでは、各カテゴリの担当範囲・要件数のサマリ、代表的な要件のハイライト、非機能要件の数値ターゲットを示します。要件 ID(F-*)は設計書の参照キーです。
機能要件のサマリFunctional categories
機能要件は要件 ID のプレフィックスで 10 カテゴリに分かれます。それぞれの担当範囲と要件数の目安、参照すべき機能カタログ ID(FE-*)を表にまとめます。
| カテゴリ | 担当範囲 | 要件数 |
|---|---|---|
F-ACC | アカウント・組織 — 社内 SSO / 社外メール + Google / MFA / 信頼デバイス / バックアップコード / プロフィール / アカウント無効化・5 年消去 | 14 |
F-BOX | Box(共有箱)— CRUD / メンバー 4 ロール / 検索 / Drive 同期設定 / 可視性 3 段階 / 参加申請 / 最近のファイル / アクティビティタブ | 16 |
F-FILE | ファイル・フォルダ — UL / 差し替え / 世代管理 / フォルダ / バッジ / プレビュー / ウイルススキャン / 保持 UI / Box 内検索 / 一括 DL | 23 |
F-SHARE | 共有リンク — 発行 / アクセス / 無効化 / 受取人 OTP / ZIP 配信 / メール送信 | 8 |
F-NOT | 通知 — 即時 / digest / off / テンプレ / ゼロベース / Box 別 / 参加申請 / アプリ内バッジ / 削除関連 | 16 |
F-AUD | 監査 — 追記専用 RLS / バックアップ / GCS 退避 / CSV エクスポート / Box アクティビティ | 6 |
F-RET | 保持・自動削除 — 全社デフォルト / Box デフォルト / Hold / 削除実行 / 影響シミュレーション | 9 |
F-ADM | 管理者 — /admin 全体 / 重大操作の理由必須 / メール通知 / アラート / 設定編集 | 19 |
F-SYNC | Drive 同期 — 片方向 / appProperties / 補修バッチ / orphan・削除検知 / DLQ | 12 |
F-OPS | 自動メンテナンス — パーティション / アーカイブ / JWKS / 検証 / クリーンアップ等のバッチ | 12 |
| 合計 | 135 |
代表的な要件のハイライトKey requirements
約 135 件の機能要件のうち、運用や利用感を方向づける 8 つを抜粋します。
1 ファイル最大 200 MB
図面や動画などの大きなファイルを想定し、Resumable Upload(再開可能アップロード)で大容量も安定。環境変数で運用中変更可。
信頼デバイス 30 日
OTP 入力後に信頼デバイスとして 30 日記録し、その間は OTP を再要求しません。パスワード / MFA 変更で全失効。
共有リンク最長 14 日
無期限の共有リンクは作れません。24 時間 / 7 日 / 14 日 / カスタム(最長 14 日)から選択します。
ZIP しきい値 200 MB / 10 件
合計サイズ 200 MB 超、またはファイル数 10 件超は ZIP を作らず個別 DL に誘導します。受信側のメモリ事故を防ぎます。
保持期間 全社デフォルト 180 日
初期値 180 日。Box ごとに 30 / 90 / 180 / 365 / 無制限から上書き可能。重要ファイルは Hold で対象外に。
監査ログ 2 年保持 + GCS 退避
すべての操作(認証 / Box 操作 / ファイル操作 / 共有リンク / 重大操作)をオンラインで 2 年、退避後も一定期間保持。
Hold バッジ 一定容量以上で常時表示
Box 内の Hold 合計容量がしきい値を超えると、Box 一覧 / Box 詳細 / 管理画面の 3 箇所にバッジが常時表示されます。
Drive 同期 Box 単位 ON / OFF
Box ごとに同期 ON / OFF。同期 ON にすると、社内 Drive の任意フォルダへ片方向で自動ミラーされます。
非機能要件Non-functional
性能・可用性・セキュリティ・監査・コンプライアンスを、判断可能な数値で定めています。
性能Performance
| 指標 | 目標値 | 備考 |
|---|---|---|
| ファイル一覧表示 | P95 < 1.5 秒 | 200 ファイル / Box、Server Components + 部分プリレンダリング |
| アップロード(100 MB) | P95 < 30 秒 | Resumable Upload、エンド回線速度に依存 |
| ダウンロード初回バイト | P95 < 1 秒 | 署名 URL(短時間だけ有効)から GCS 直配信 |
| PDF プレビュー(10 MB) | 初表示 5 秒以内 | @react-pdf-viewer/core、レンジリクエスト対応 |
| ウイルススキャン | P95 < 15 秒(100 MB) / 30 秒(200 MB) | ClamAV 1.4 on Cloud Run(常時稼働) |
| Drive 同期遅延 | P95 < 60 秒 | scan_clean 後、Pub/Sub Push 経由 |
可用性Availability
| 指標 | 目標値 | 備考 |
|---|---|---|
| 月次稼働率(24/7) | 99.5% 以上 | asia-northeast1(東京)の単一リージョン |
| 月次稼働率(業務時間内) | 99.9% 以上 | 平日の業務時間帯 |
| RPO(目標復旧時点) | 目標値あり | Supabase Postgres 自動スナップショット + PITR |
| RTO(目標復旧時間) | 目標値あり | 四半期に 1 回 PITR 復元演習 |
セキュリティSecurity
| 項目 | 仕様 |
|---|---|
| TLS | 1.2 以上必須、Cloud Load Balancer 終端、HSTS preload |
| 署名 URL の有効期限 | DL 短時間 / UL 一定時間(Resumable) |
| OTP(社外) | 6 桁、有効期限 5 分、続けて失敗すると 15 分ロック |
| 共有リンク レート制限 | 1 token あたり 回数の上限あり、続けて失敗すると 一定時間ロック |
| 共有リンク token | 32 桁ランダム base64url、約 192 bit エントロピー |
| パスワードハッシュ | Better Auth 標準(scrypt ベース、OWASP 推奨パラメータ) |
| シークレット管理 | Secret Manager に集約、年次一括ローテ(JWKS は自動・旧鍵を一定期間並行公開) |
| Drive サービスアカウント | Workload Identity Federation で JSON キー不発行 |
監査Audit
| 項目 | 仕様 |
|---|---|
| 監査ログ欠損率 | 0% |
| 完整性 | 追記専用 RLS(UPDATE / DELETE 拒否) + Supabase 自動バックアップ + 月次パーティション GCS 退避の 3 重防御 |
| 保持期間 | オンライン 2 年、GCS 退避で一定期間(25 ヶ月超を archive class) |
| 記録対象 | 認証 / Box 操作 / ファイル操作 / 共有リンク / 重大操作(admin) / Drive 同期 / 保持削除 |
コンプライアンスCompliance
| 項目 | 仕様 |
|---|---|
| 適用法令 | 個人情報保護法準拠 |
| データ保管リージョン | 東京固定(asia-northeast1)、Terraform で固定化 |
| 無効化ユーザ・Box の完全消去 | 5 年保持後に disabled-user-cleanup-5y バッチで消去(system_admin 承認制) |
| 監査ログの actor 仮名化 | 無効化ユーザの actor は仮名化(IDは保持) |
| 取扱ベンダー | Google Cloud / Supabase / Resend のみ、いずれも東京リージョン |
要件 ID の使い方Requirement IDs
F-* : 要件 ID(例 F-ACC-05)は docs/01基本構想/01_要件.md で一意に定義されています。設計書 / 機能カタログ / 画面カタログ / 監査ログ / テストケースの全てがこの ID を参照します。
FE-* : 機能カタログの ID(例 FE-FILE-UPLOAD)。要件 ID をまとめた業務処理単位を表します。
P-* : 画面カタログの ID(例 P-BOX-DETAIL-FILES)。URL を持つ画面(タブ・サブビュー含む)を一意に表します。
三者は相互にトレース可能で、たとえば「F-FILE-13(ClamAV 自動スキャン)」は機能 FE-FILE-VIRUS-SCAN に属し、画面 P-FILE-DETAIL と P-ADM-SCAN-QUEUE から参照されます。