ログイン機能実装要件 - type-moon-wiki
1. 目的
現在のtype-moon-wikiアプリケーションにログイン機能を追加し、ユーザー認証に基づく以下の機能を提供します。
- FGOのゲームデータ(
fgo-assetsから取得)に基づいたユーザーの所持サーヴァント/アイテムのチェックおよび育成状況管理。 - バトルシミュレーション機能。
- ストーリー振り返りおよびBGM鑑賞機能。
- ログインユーザーによるWikiコンテンツの編集機能。
2. 技術選定
2.1. 認証システム: Firebase Authentication
- 選定理由:
- Reactアプリケーションとの統合が容易。
- Googleアカウント、メールアドレス/パスワードなど、複数の認証プロバイダーをサポート。
- ユーザー認証、セッション管理、セキュリティに関する複雑な処理をFirebase側で管理するため、堅牢性とスケーラビリティが高い。
- トラフィック集中時の負荷分散にも優れ、安定したログイン処理を提供可能。
2.2. ユーザーデータ保存: Cloud Firestore
- 選定理由:
- Firebase Authenticationとのシームレスな連携。
- リアルタイムデータベース機能を持つNoSQLデータベースで、ユーザーごとのデータを効率的に保存・取得可能。
- 大規模なアクセスとリアルタイムでの読み書きに耐える設計であり、データの一貫性と堅牢性を確保。
- Firestore セキュリティルールにより、サーバーサイドでデータのアクセス制御を厳密に行い、ユーザーデータへの不正アクセスや改ざんを防止。
3. アーキテクチャの概要
3.1. フロントエンドとバックエンドの分離
- フロントエンド:
type-moon-wiki(Docusaurus/Reactアプリケーション)- 静的なHTML/CSS/JavaScriptファイルとしてビルドされ、Firebase Hostingなどの静的ホスティングサービスにデプロイされます。
- ユーザーはブラウザから直接フロントエンドにアクセスします。
- バックエンド: Firebase (Authentication & Cloud Firestore)
- Googleによって管理されるBaaS (Backend as a Service) として提供されます。
- フロントエンドは、これらのFirebaseが提供するAPIエンドポイントに対して、HTTPS (443ポート) を介して安全に通信を行います。
- フロントエンドとバックエンドは、物理的にも論理的にも完全に分離されており、同一ポートで稼働することはありません。
3.2. セキュリティ考慮事項
- ポートの分離: フロントエンドとAPIが異なるドメイン/サービスで提供されるため、同一ポートからのAPIアクセスによる脆弱性(例: CSRFなど)のリスクを低減します。
- Firestore セキュリティルール: サーバーサイドで適用されるルールにより、各ユーザーがアクセスできるデータ範囲を厳密に定義します。これにより、クライアントサイドからの不正なデータ操作を防止し、データ整合性とセキュリティを確保します。
4. 実装ステップ (初期フェーズ)
- Firebaseプロジェクトのセットアップ (ユーザー様作業):
- Firebaseコンソールにて新規プロジェクトを作成し、Webアプリケーション用の設定情報を取得していただきます。
type-moon-wikiへのFirebase初期化:firebasenpmパッケージをインストールします。- 取得したFirebase設定情報を用いて、Docusaurusプロジェクト内にFirebase SDKを初期化するコードを追加します。
- 認証状態のグローバル管理:
- React Context APIを利用し、アプリケーション全体でユーザーの認証状態(ログイン済みか、誰がログインしているかなど)を管理する仕組みを構築します。
- ログイン/ログアウトUIコンポーネントの作成:
- ユーザーがログイン/ログアウトを行えるUI要素(ボタン、フォームなど)を作成します。
- ナビゲーションバーへの統合:
- ユーザーの認証状態に応じて、ナビゲーションバーに「ログイン」ボタンまたは「ユーザー名/ログアウト」表示を動的に切り替える機能を実装します。
上記が、ログイン機能の実装に関する要件整理と、今後の作業方針となります。この内容で問題なければ、次のステップとしてFirebaseプロジェクトのセットアップについてご案内させていただきます。