Bubbleでマルチテナントアプリを作る方法:テナント分離から実装まで完全ガイド

当サイトはアフィリエイトを含むプロモーションを掲載しています

目次

はじめに:マルチテナントアプリの重要性とBubbleでの実現可能性

近年、SaaSビジネスモデルの普及により、マルチテナントアプリケーションの需要が急速に高まっています。特にノーコード開発においても、複数の企業や組織が同じアプリケーションを安全に利用できる仕組みが求められています。

本記事では、人気ノーコードツール「Bubble」を使用して、セキュアで効率的なマルチテナントアプリを構築する方法を、実践的なノウハウと共に詳しく解説します。

この記事で学べること

  • マルチテナントアーキテクチャの基本概念
  • Bubbleでのテナント分離の実装方法
  • Privacy Rulesを活用したデータ保護
  • パフォーマンスを考慮した設計パターン
  • 実装時の注意点とベストプラクティス

1. マルチテナントアプリとは?基本概念の理解

マルチテナントの定義

マルチテナントアプリケーションとは、単一のアプリケーションインスタンスで複数の顧客(テナント)にサービスを提供するアーキテクチャパターンです。各テナントのデータは論理的に分離され、互いに干渉することなく同じシステムを利用できます。

マルチテナントの3つのモデル

モデル特徴Bubbleでの実現性
サイロモデルテナントごとに独立したデータベース△(複数アプリが必要)
ブリッジモデルスキーマレベルでの分離✕(Bubbleでは非対応)
プールモデル同一テーブル内での論理分離◎(推奨方式)

Bubbleでは、プールモデルが最も実装しやすく、効率的です。本記事では、このモデルを前提に解説を進めます。

2. Bubbleでマルチテナントアプリを設計する前の重要な考慮点

なぜ設計段階での検討が重要か

はじめからPrivacyルールの設定を想定した上でデータベースの設計をする必要があります。後からの変更は、データ構造の大幅な見直しを必要とする可能性があり、開発コストが増大します。

Bubbleの制約事項

  1. パフォーマンスの考慮
    • 複雑なデータベース結合は処理速度に影響
    • 大量データの扱いには工夫が必要
  2. スケーラビリティの限界
    • データベース容量の上限(最大50GB)
    • 同時接続数の制限
  3. セキュリティ設定の重要性
    • 国内外多くのBubbleアプリで、不適切な設定のため、個人情報が漏洩しています。

3. データベース設計:テナント分離の実装方法

基本的なデータ構造

マルチテナントアプリの核となるのは、適切なデータ構造です。以下に、推奨される基本構造を示します。

1. Tenantテーブルの作成

Data Type: Tenant
Fields:
- name (text): テナント名
- subdomain (text): サブドメイン名
- plan (option set): 料金プラン
- created_date (date): 作成日
- is_active (yes/no): アクティブ状態
- admin_users (list of Users): 管理者ユーザーリスト

2. Userテーブルの拡張

Data Type: User (既存)
Additional Fields:
- tenant (Tenant): 所属テナント
- role (option set): ユーザー権限
- is_tenant_admin (yes/no): テナント管理者フラグ

3. 各業務データテーブル

すべての業務データテーブルには、必ずtenantフィールドを追加します。

Data Type: Project(例)
Fields:
- name (text): プロジェクト名
- tenant (Tenant): 所属テナント ← 必須
- created_by (User): 作成者
- ...その他のフィールド

リレーションシップの設計パターン

編集部の実装経験から

LIFキャリア編集部では、複数のマルチテナントアプリを開発した経験から、以下のパターンを推奨しています:

  1. すべてのデータにテナント参照を持たせる
    • データの取得時に必ずテナントフィルタを適用
    • Privacy Rulesでの二重チェック
  2. 階層構造の明確化
    • Tenant → User → 各種データという階層を維持
    • 横断的なデータアクセスを防ぐ

4. Privacy Rulesによるセキュアな実装

Privacy Rulesの基本設定

Bubbleでは、プライバシーロールを設定するまで、基本的に作成されたデータは誰でも参照することができてしまいます。そのため、Privacy Rulesの設定は必須です。

Tenantデータタイプのプライバシー設定

  1. Data → Privacyタブを開く
  2. Tenantを選択し、「Define a new rule」をクリック
  3. 以下のルールを設定:
Rule Name: Tenant Members Only
When: Current User's tenant is This Tenant
設定項目:
✓ View all fields
✓ Find this in searches
✓ View attached files

業務データのプライバシー設定

各業務データ(Project、Task等)にも同様の設定を行います:

Rule Name: Same Tenant Only
When: Current User's tenant is This Project's tenant
設定項目:
✓ View all fields
✓ Find this in searches
✓ Allow auto-binding(必要に応じて)

役割ベースのアクセス制御(RBAC)

より細かな権限制御が必要な場合は、ユーザーの役割に応じたルールを追加します。

Option Setsでの役割定義

Option Set: UserRole
Options:
- admin(管理者)
- editor(編集者)
- viewer(閲覧者)

役割別のPrivacy Rules

Rule Name: Admin Access
When: Current User's role is admin AND Current User's tenant is This Data's tenant
設定項目:
✓ すべての項目にチェック

Rule Name: Editor Access
When: Current User's role is editor AND Current User's tenant is This Data's tenant
設定項目:
✓ View all fields
✓ Find this in searches
✓ Make changes to this(特定フィールドのみ)

5. 実装手順:ステップバイステップガイド

Step 1: 初期設定とOption Setsの作成

  1. 新規アプリケーションの作成
    • 「Create a new app」から開始
    • 適切な名前を設定(例:multi-tenant-saas)
  2. Option Setsの定義
    • UserRole(admin, editor, viewer)
    • TenantPlan(free, basic, premium)
    • その他必要な選択肢

Step 2: データ構造の構築

  1. Tenantテーブルの作成 Data → New Type → "Tenant"
  2. Userテーブルの拡張
    • tenantフィールドの追加
    • roleフィールドの追加
  3. 業務データテーブルの作成
    • 必ずtenantフィールドを含める

Step 3: サインアップフローの実装

テナント作成を含むサインアップフローの実装例:

  1. サインアップページの作成
    • 会社名入力フィールド
    • ユーザー情報入力フィールド
  2. Workflowの設定 When Button Sign up is clicked: 1. Create a new Tenant - name = Input Company Name's value - plan = free 2. Sign the user up - email = Input Email's value - password = Input Password's value 3. Make changes to Current User - tenant = Result of step 1 - role = admin - is_tenant_admin = yes

Step 4: データ表示の実装

Repeating Groupでのテナントフィルタリング

Type of content: Project
Data source: Search for Projects
Constraints:
- tenant = Current User's tenant

編集部のTips

検索処理では、必ず最初の制約条件としてテナントフィルタを設定することで、パフォーマンスを最適化できます。

Step 5: Privacy Rulesの適用

  1. 各Data Typeに対してPrivacy Rulesを設定
  2. Data APIの無効化(必要に応じて) Settings → API → Enable Data APIのチェックを外す

6. 実装時の注意点とベストプラクティス

セキュリティのベストプラクティス

  1. 二重のセキュリティ層
    • UIレベルでの制約(Constraints)
    • データベースレベルでの保護(Privacy Rules)
  2. 定期的な監査
    • Privacy Rulesの設定確認
    • Data APIの公開設定確認
  3. テスト環境での検証
    • 異なるテナントのユーザーでテスト
    • Run as機能を活用した動作確認

パフォーマンス最適化のテクニック

1. 検索の最適化

良い例:
Search for Projects:
- tenant = Current User's tenant ← 最初に配置
- status = active
- created date > Current date/time - days: 30

悪い例:
Search for Projects:
- created date > Current date/time - days: 30
- status = active
- tenant = Current User's tenant ← 最後だと非効率

2. データ取得の工夫

  • 必要なデータのみを取得
  • ページネーションの活用
  • キャッシュの利用(Custom States)

編集部の体験談:よくある落とし穴

LIFキャリア編集部でマルチテナントアプリを開発した際、以下の点で苦労しました:

  1. Privacy Rules設定忘れ
    • 新しいData Typeを追加するたびに設定が必要
    • チェックリストの作成を推奨
  2. テナント間のデータ混在
    • Workflowでtenantフィールドの設定忘れ
    • デフォルト値の設定で回避可能
  3. パフォーマンスの劣化
    • 大量データでの検索速度低下
    • インデックスとなるフィールドの適切な設計が重要

7. 高度な実装パターン

サブドメインによるテナント識別

各テナントに独自のサブドメインを提供する実装:

  1. URLパラメータの活用 app.example.com?tenant=tenant-name
  2. Page loadでのテナント識別 When Page is loaded: - Get data from page URL (parameter: tenant) - Search for Tenants (subdomain = URL parameter) - Set custom state: current_tenant

マルチテナント対応の管理画面

スーパー管理者向けの機能実装:

  1. 全テナントデータの閲覧
    • 特別なPrivacy Rule設定
    • is_super_adminフラグの活用
  2. テナント切り替え機能
    • ドロップダウンでテナント選択
    • Custom Stateでの管理

8. まとめ:成功するマルチテナントアプリ開発のために

重要ポイントのまとめ

  1. 設計段階での十分な検討
    • データ構造は後から変更が困難
    • Privacy Rulesを前提とした設計
  2. セキュリティファースト
    • Privacy rules を適切に設定することで、データベースレベルでのセキュリティを確保できます。
    • 多層防御の実装
  3. パフォーマンスの継続的な監視
    • データ量増加への対策
    • 検索条件の最適化

今後の展開

Bubbleでのマルチテナントアプリ開発は、適切な設計と実装により十分実現可能です。ただし、大規模化を見据えた場合は、以下の点も考慮しましょう:

  • スケーラビリティの限界を理解した上での設計
  • 必要に応じた外部サービスとの連携
  • 将来的なコード化への移行計画

編集部からのメッセージ

LIFキャリア編集部では、実際にBubbleを使用した複数のマルチテナントアプリ開発を経験してきました。本記事で紹介した手法は、すべて実践で検証された内容です。

マルチテナントアプリの開発は複雑に見えるかもしれませんが、基本を押さえれば必ず実現できます。ぜひ本記事を参考に、セキュアで効率的なSaaSアプリケーションの開発に挑戦してください。


関連記事のご案内

LIFキャリアでは、Bubbleを使った開発に関する記事を多数公開しています。マルチテナントアプリ開発の次のステップとして、以下の記事もぜひご覧ください:

  • 「Bubble APIワークフローで実現する高度な自動化」
  • 「Bubbleプラグイン開発入門:独自機能の実装方法」
  • 「Bubble × 外部APIで作る本格的なSaaSアプリケーション」

スキルアップを目指す皆様の成功を、心より応援しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次