SaaSus Platformを使った実装(サーバレス)
SaaSus Platformを使ったサーバレス方式でのSaaSアプリケーション実装例です。 認証、テナント管理、ユーザー管理など、SaaSに必要な機能をサーバレス環境で動かしながら学習できます。
主な特徴
- サーバレス構成: AWS Lambda + CloudFront + S3 を活用
- React + TypeScript: フロントエンドにReactを使用
- JWT認証: ブラウザのローカルストレージでトークン管理
- CDK対応: AWS CDKを使用したインフラ一括構築・デプロイ
- モノリポ: フロントエンドとバックエンドを1つのリポジトリで管理
実装方式について
このサンプルアプリケーションは、サーバレス版として実装されています。
サーバレス版の特徴
バックエンドをサーバレスで構成する実装方式で、以下のような特徴があります:
- SaaSus Platformの認証情報となるトークン(JWT)を、ブラウザのローカルストレージに保管
- SaaS Platform利用者はJWTを使って本人確認を行う
- フロントエンドはReactで実装、S3 + CloudFrontでホスティング
- バックエンドはLambda上で動作するAPIサーバとして実装
アーキテクチャ
ブラウザ
│
▼
CloudFront (*.cloudfront.net)
├── /* → S3(React フロントエンド)
└── /api/* → Lambda Function URL(API)
※ Lambda リソースポリシーで特定の CloudFront Distribution のみ許可
処理フロー(ログイン〜ユーザ一覧表示)

実装されている画面・機能一覧
認証関連画面
Callback.tsx - 認証後遷移先画面
- SaaSus Platformからの認証情報を受け取り
- JWTトークンをローカルストレージに保存
- ユーザーのロールに応じて適切な画面に自動遷移
- ※リダイレクト処理のため、ユーザーには表示されません
SelfSignUp.tsx - セルフサインアップ画面
- 新規ユーザーが自分でテナント作成
- テナント名の入力
- ユーザー属性・テナント属性の設定
- 属性タイプ別の入力フィールド(文字列、数値、真偽値、日付)
ユーザー・テナント管理画面
TenantList.tsx - テナント一覧画面
- 複数テナントに所属するユーザー向け
- テナント属性の表示(設定済み/未設定の表示)
- 各テナントのユーザー一覧画面への遷移
UserPage.tsx - ユーザー一覧画面(メイン画面)
- ログインユーザー情報表示: テナント名、名前、メールアドレス、ロール
- ユーザー一覧テーブル: テナント内の全ユーザー表示
- ユーザー属性表示: カスタム属性の動的表示
フロントエンド実装
認証後遷移先画面(Callback)
SaaSus Platformが生成するログイン画面からログインを実施すると、認証後遷移先で設定したURLが呼び出されます。
本実装サンプルを使って動作確認を行うためには、
http://localhost:3000/callback(ローカル開発)または CloudFront デプロイ後の https://xxxxxxxxxx.cloudfront.net/callback と設定してください。

認証後遷移先にはクエリパラメータ(code=xxxxx)で、認証情報取得に必要な一時コードが渡される仕様となってます。一時コードを使ってJWTを取得、ローカルストレージに保存する実装を行ってください。
認証後の画面遷移ロジック
サンプルアプリでは、JWT取得後にユーザー情報を確認し、以下のロジックで適切な画面に遷移させています:
- テナント未所属の場合: セルフサインアップ画面へ遷移
- 複数テナント所属の場合: テナント一覧画面へ遷移
- 単一テナント所属の場合: ユーザー一覧画面(メイン画面)へ遷移
この遷移ロジックにより、ユーザーの状況に応じて最適な画面を表示できます。