01詳細
テナント分離の実践
テナント分離はさまざまな層で強制できますが、適切な層はプラットフォームのリスクプロファイルによって決まります。Omnitech CRMでは、キューイングされたバックグラウンド処理を含め、モデル層およびクエリ層でフェイルクローズ方式により分離を強制しており、テナントスコープが欠落している場合はテナント間でデータが漏えいするのではなく、リクエスト自体を失敗させます。IMFlow360では、行単位のマルチテナンシーモデルによりすべてのレコードがビジネスと支店単位でスコープされ、業種ごとに別々のコードベースへ分岐させるのではなく、business_typeフィールドによってカタログ、注文、ワークフローの挙動を切り替えることで、小売、飲食、サロン/スパ、予約制ビジネスが約146テーブルからなる一つの共有スキーマ上で稼働できるようになっています。
02詳細
権限とレコードスコープを分離して管理
分離は「そもそもテナントのデータを誰が閲覧できるか」に答えるものであり、権限は「そのテナント内で認証されたユーザーが何を行えるか」に答えるものです。Omnitech CRMでは、22のビジネスモジュールにまたがる126の権限からなる中央権限レジストリによって、この2つを意図的に分離しています。許可されるアクションをレコードスコープとは切り離して管理することで、その下にある分離層に触れることなく、ロールの権限範囲を広げたり狭めたりできます。
03詳細
インテグレーションとリリース計画
SaaSプラットフォームのインテグレーションとリリース計画は、後から取り付けるものではなく、テナンシーモデルによって形づくられるものです。Pulse / MyOmniHubでは、公開機能、採用、フォーム、コマースといった各プロダクト領域を自己完結型のモジュールとして分離する一方、Facebook、Instagram、TikTok、YouTube、LinkedIn、Xをそれぞれ独立したチャネルアダプターが担当しており、一つのインテグレーションを変更しても、プラットフォームの他の部分を再デプロイ・再テストする必要がありません。IMFlow360のオフラインファーストなPOS(店頭販売)層はこれをさらに一歩進めています。各デバイスは自身のトランザクションをアウトボックスにキューイングし、クライアント側で生成された識別子をキーとする単一のバッチエンドポイントを通じて同期するため、複数の端末や不安定な接続があっても、注文の重複や欠落にはつながりません。