開発ノート:オンプレ社内システムのマルチテナントSaaS化で学んだ教訓

背景とプロジェクト発足
ある製造業向け社内システムは、オンプレミスに構築された単一テナント環境で稼働していました。システムは業務量増加に伴いサーバーのスペック追加やライセンス費用が増大し、保守コストが毎年約20%ずつ上昇していました。CTOの松田氏は「このままでは予算が圧迫され、システム拡張の余地がなくなる」と危機感を抱き、マルチテナントSaaS化を決断。社内SEチームだけでは設計から実装まで手が回らないため、外部の開発会社へ発注する方針を固めました。発注にあたっては、要件定義とアーキテクチャ設計を同時並行で進め、プロトタイプで技術的な可用性を検証したうえで本格移行するステップを採用。予算枠は初年度で1,500万円、運用費用として月額200万円を想定し、相場感を把握しつつ要件漏れによる追加費用発生リスクを低減する方針を立てました。プロジェクトマネージャーの安藤氏は、各ステークホルダーとの合意形成に重きを置き、社内の経営層、IT部門、業務部門を巻き込むキックオフミーティングを開催。要件定義書には「テナント切替」「リソース分離」「課金ロジック」などSaaS固有の項目を盛り込み、開発会社選定の際に「選び方」の基準として提示しました。これにより、後続のRFP作成と相見積もり取得をスムーズに進める土台が整いました。
開発会社選定とマルチテナントアーキテクチャ設計
RFPには候補企業A社、B社、C社の三社を選定し、技術力、実績、コストパフォーマンス、サポート体制を評価。特にマルチテナントシステムの構築実績が豊富なA社が高評価を得ました。A社の提案アーキテクチャは、論理テナント分離を実現する手法で、テナントIDをDBパーティションキーに使う方式と、物理的にDBを分割する方式を比較提示し、コストとパフォーマンスのバランスを説明。論理分離方式の方がインスタンス数を抑えられ、初期費用・運用費用を約30%削減できる試算を示したことで、1,500万円の予算枠内での構築が確実となりました。DB設計はRDSのマルチAZ構成を採用し、テナントごとにスキーマを分けることでテナント間のデータ混合リスクを防止。リソース利用状況を可視化するメトリクスも設計に含め、本番運用後の費用最適化に備えました。また、APIレイヤーはGraphQLを採用し、既存のオンプレシステムと段階的に統合する方式を選定。これにより大規模なリファクタリングを避けつつ、マイクロサービス化へのスムーズな移行パスを確保しました。A社への発注契約では、マイルストーンごとの検収と成果物定義を厳密に盛り込み、要件変更時の見積もりフローを契約条項に明記。これにより、開発中の追加工数によるコスト膨張リスクを未然に抑制できました。
データ分離とセキュリティ実装
マルチテナントSaaSで最も重要なのがデータ分離とセキュリティです。単一テナント時代はアプリケーションサーバーにのみアクセス制御をかけていましたが、SaaS化後はテナントごとの権限管理が必須となりました。A社はRBAC(ロールベースアクセス制御)とABAC(属性ベースアクセス制御)を併用し、テナント管理者と一般ユーザーの権限階層を設計。API GatewayのリクエストフィルタリングでテナントIDチェックを実装し、テナントIDが不一致の場合はリクエストを拒否する仕組みをコーディング。データベース側では暗号化保存を標準化し、KMS(Key Management Service)によるカスタマーマネージドキー管理を導入しました。また、ネットワークレイヤーではVPCエンドポイントを用意し、データベースへのアクセスをインターネット経由ではなくプライベートネットワークに限定。これにより、潜在的な漏洩リスクを回避し、運用フェーズでのセキュリティ診断費用を抑制。脆弱性スキャンや侵入テストも契約範囲に含め、初年度の保守費用は月額50万円と相場感に沿った価格で設定できました。
テナント運用管理機能とコスト試算
SaaS化に伴い必要となるテナント運用管理機能も、RFPで明確化しました。具体的には、テナント登録/審査ワークフロー、課金メニュー管理、利用状況レポート出力、ログ取得機能を標準機能として実装。A社の見積もりでは、テナント管理機能に約300万円、課金連携機能に200万円、レポート機能に150万円の工数を見込んでおり、合計650万円で実装可能とのこと。残りの850万円をAPI統合やセキュリティ実装、運用自動化に充当する計画です。課金連携はStripeを採用し、定期支払いと従量課金の両モデルを想定。StripeのAPI利用料とプラットフォーム手数料を加味しつつ、SaaS相場と照合して月額利用料をテナントあたり1万円〜3万円と想定しました。これにより、月間10テナント稼働で収益が100万円〜300万円となり、初年度で黒字化が見込める試算を作成。経営層の承認もスムーズに得られました。
本番リリースとマイグレーション施策
本番環境への移行は慎重を期して段階的に行いました。まずは既存オンプレデータをバッチでエクスポートし、クラウド上のテストテナントへ移行。以下の手順で進めました。
-
データスナップショット取得と整合性チェック
-
パーティション単位でのデータロード、自動リトライ設定
-
ロールフォワード方式による差分同期(バイナリログ活用)
-
本番切替直前に5分間のサービスタイム停止でダウンタイム最小化
この方法により、稼働率99.9%を維持しつつデータ移行を完了。切替完了後、旧環境を段階的にフェーズアウトし、ライセンス解約費用を抑制できました。実際の移行期間は週末2日間に限定し、追加作業費は予算相場の50万円以内に収めています。
CI/CDパイプラインと品質保証
継続的デリバリを実現するため、以下のCI/CD構成を整備しました。
-
コード管理:GitHubリポジトリでブランチ戦略(Git Flow)を採用
-
ビルド&テスト:GitHub Actionsでユニットテスト、コードスタイルチェックを自動実行
-
ステージングデプロイ:プルリク承認後にステージング環境へ自動デプロイ
-
自動E2Eテスト:Cypressで主要シナリオをカバレッジし、本番デプロイ前に問題検出
-
本番承認:Slack通知による手動承認後、Productionへロールアウト
これにより、ヒューマンエラーによる退行を防ぎ、バグ対応工数を70%削減。CI/CD自動化導入コストは約100万円でしたが、運用開始半年でその投資を回収する削減効果が得られています。
モニタリングとコスト最適化
マルチテナントSaaSではリソース利用状況の可視化が重要です。以下のモニタリング体制を構築しました。
-
メトリクス収集:AWS CloudWatchでLambda実行数、RDSコネクション数、APIレスポンス時間をグラフ化
-
ログ分析:Elasticsearch+Kibanaでリクエストログを時系列検索
-
コストアラート:AWS Budgetアラートで日次コスト閾値超過時にメール・Slack通知
-
効率化ルール:非アクティブテナントの自動スケールダウンとFargateタスク停止
これにより、無駄なリソース動作を抑制し、運用コストを月額200万円から180万円へ10%削減。コストアラートの導入費用は約20万円でしたが、予算消化率を常に把握できるようになり、追加予算発生を防ぐ役割を果たしています。
テナント自動プロビジョニング機能
新規テナント登録の手間を無くすため、自動プロビジョニング機能を開発しました。ワークフローは以下の通りです。
-
管理画面で「新規テナント登録フォーム」を入力・送信
-
バックエンドでCloudFormation Stackを新規作成
-
DNS設定、SSL証明書発行、初期データロードを自動実行
-
メール通知でテナント管理者へアクセス情報を送信
この仕組みにより、手動作業を約5ステップから1ステップに集約し、テナント立ち上げ工数を90%削減しました。実装費用は約120万円でしたが、導入後3ヶ月で50テナント以上をオンボーディングし、迅速なサービス拡大に貢献しています。
顧客フィードバックとイテレーション
リリース後、顧客からは「管理画面が分かりにくい」「レポート出力に時間がかかる」といったフィードバックが寄せられました。以下の改善サイクルを取り入れ、機能追加とUI改善を進めています。
-
月次ユーザーヒアリング:主要10社のシステム管理者とオンラインミーティング
-
バックログ優先度付け:影響度と開発工数を基にスコアリング
-
スプリント開発:2週間サイクルで改善版をステージングへ自動デプロイ
-
リリースノート公開:ドキュメントに機能追加・修正点を分かりやすく掲載
これにより、顧客満足度は導入初期の60%から85%へ向上。特にレポート出力はバックグラウンド処理を導入し、生成時間を平均30秒から5秒に短縮しました。この改善で、顧客の運用品質が向上し、年間保守更新率は95%を維持しています。
ROI算出と経営レポーティング
最終的に、マルチテナントSaaS化プロジェクトのROIを算出し、経営層へ報告しました。
-
初期投資:1,500万円
-
年間運用コスト増加分:−(200万→180万円)=20万円の削減
-
年間コスト削減効果:旧環境保守費 1200万→新環境保守費 600万=600万円削減
-
追加収益:新規テナント50社×月額2万円=年間1200万円
ROI = (600+1200−20) ÷ 1500 × 100 = 116%、約0.9年で投資回収可能という結果を得ました。これをダッシュボード化し、経営会議や取締役会でリアルタイムに可視化。結果として次年度の追加予算獲得や他システムSaaS化プロジェクトへの投資判断がスムーズになりました。