SaaSを設計・開発・運用するうえで押さえておきたい原則をカテゴリ別にまとめたガイドです。
目次
- アーキテクチャ
- マルチテナンシー
- 認証・認可
- セキュリティ
- データ管理
- API設計
- スケーラビリティとパフォーマンス
- 可用性と信頼性
- オブザーバビリティ(監視・ログ)
- CI/CDとリリース管理
- 課金・サブスクリプション
- オンボーディングとUX
- コンプライアンスと法規制
- カスタマーサクセスとサポート
- コスト最適化
- チェックリスト
1. アーキテクチャ
基本原則
- 最初はモジュラーモノリスで始める: 初期からマイクロサービスにすると運用負荷が大きい。ドメイン境界を明確にしたモノリスで始め、必要になった部分から分割する。
- ステートレスなアプリケーション層: セッションや状態は Redis・DB など外部ストアに置き、水平スケールしやすくする。
- The Twelve-Factor App に従う: 設定は環境変数、依存関係は明示、ログはストリームとして扱う、など。
- 非同期処理の活用: メール送信、レポート生成、Webhook配信など時間のかかる処理はキュー(SQS、Pub/Sub、Sidekiq、BullMQ等)に逃がす。
- Infrastructure as Code (IaC): Terraform / Pulumi / CloudFormation などでインフラをコード管理し、環境差分をなくす。
推奨構成例
[CDN / WAF]
│
[ロードバランサー]
│
[アプリケーション層(ステートレス・オートスケール)]
│ │
[メインDB] [キャッシュ] [ジョブキュー] → [ワーカー]
│
[オブジェクトストレージ] [検索エンジン] [データウェアハウス]
2. マルチテナンシー
テナント分離モデルの比較
| モデル | 概要 | メリット | デメリット | 向いているケース |
|---|---|---|---|---|
| 共有DB・共有スキーマ | 全テーブルに tenant_id 列 | 低コスト・運用が簡単 | 分離が弱い・ノイジーネイバー | SMB向け、多数の小規模テナント |
| 共有DB・スキーマ分離 | テナントごとにスキーマ | 中程度の分離 | マイグレーションが複雑化 | 中規模テナント |
| DB分離(サイロ) | テナントごとに専用DB | 強い分離・個別バックアップ | 高コスト・運用負荷 | エンタープライズ、規制業界 |
| ハイブリッド | 通常は共有、大口顧客だけ専用 | 柔軟 | 2系統の運用 | プラン階層があるSaaS |
ベストプラクティス
- テナントコンテキストを全レイヤーで強制する: ミドルウェアでリクエストからテナントを解決し、ORM/リポジトリ層で自動的に
tenant_id条件を付与する。 - DBレベルの防御: PostgreSQL の Row Level Security (RLS) などで、アプリのバグがあっても他テナントのデータが見えないようにする。
- テナント横断データ漏洩のテストを自動化: 「テナントAのトークンでテナントBのリソースにアクセスできない」ことをE2Eテストに含める。
- ノイジーネイバー対策: テナント単位のレートリミット、クォータ、ジョブキューの公平スケジューリング。
- テナントごとの設定・機能フラグ: プラン差分やカスタマイズは設定で吸収し、コード分岐を最小化する。
3. 認証・認可
認証
- 自前実装を避ける: Auth0、Clerk、Cognito、Firebase Auth、Keycloak などの実績あるサービスを利用する。
- MFA(多要素認証)の提供: TOTP、WebAuthn/パスキーをサポート。管理者には必須化を検討。
- パスキー対応: パスワードレス認証の主流になりつつある。
- エンタープライズSSO: SAML 2.0 / OIDC 対応は大企業向け販売の必須要件。
- SCIM対応: ユーザーのプロビジョニング/デプロビジョニングを自動化。
- セッション管理: 適切な有効期限、リフレッシュトークンのローテーション、全端末からのログアウト機能。
- パスワード保存: 自前で持つ場合は Argon2id / bcrypt を使用。
認可
- RBAC(ロールベース)を基本に: Owner / Admin / Member / Viewer など。
- 必要に応じて ABAC / ReBAC: 細かい権限が必要なら OpenFGA、Cerbos、Oso などを検討。
- 認可チェックはサーバー側で必ず実施: UIで非表示にするだけでは不十分。
- 最小権限の原則: デフォルトは最小権限、明示的に付与する。
- APIキーのスコープ管理: 読み取り専用・特定リソース限定などのスコープを設け、有効期限とローテーション機能を提供。
4. セキュリティ
アプリケーションセキュリティ
- OWASP Top 10 への対策: インジェクション、認証不備、アクセス制御不備(特にIDOR)、SSRF など。
- 入力値検証と出力エスケープ: スキーマバリデーション(Zod、Pydantic 等)を全エンドポイントに。
- セキュリティヘッダー: CSP、HSTS、X-Frame-Options、X-Content-Type-Options。
- CSRF対策: SameSite Cookie、CSRFトークン。
- 依存関係の脆弱性スキャン: Dependabot、Renovate、Snyk などで継続的に更新。
- SAST / DAST の導入: CIに静的解析、定期的に動的スキャン。
- 定期的なペネトレーションテスト: 年1回以上、外部ベンダーによる診断。
インフラ・データセキュリティ
- 暗号化: 通信は TLS 1.2 以上、保存データも暗号化(KMS管理の鍵)。
- シークレット管理: AWS Secrets Manager、HashiCorp Vault 等を使い、コードやリポジトリにシークレットを置かない。
- ネットワーク分離: DBはプライベートサブネットに配置し、公開しない。
- WAF / DDoS対策: Cloudflare、AWS WAF 等。
- 監査ログ: 誰が・いつ・何をしたかを改ざん不可能な形で記録し、顧客にも閲覧・エクスポート機能を提供。
- 本番アクセスの統制: 本番環境へのアクセスは最小限、承認制、全操作をログ記録。
組織的セキュリティ
- 従業員の MFA 必須化、デバイス管理
- インシデント対応手順(Runbook)の整備と訓練
- 脆弱性報告窓口(
security.txt、バグバウンティ)の設置
5. データ管理
- バックアップ: 自動・定期バックアップ+ポイントインタイムリカバリ。リストアの訓練を定期的に行う(バックアップは戻せて初めて意味がある)。
- RPO / RTO を定義: 許容できるデータ損失時間・復旧時間を明確にし、それに沿った設計を行う。
- データ保持ポリシー: 不要なデータは定期削除。ログや個人情報の保持期間を定める。
- データエクスポート機能: 顧客が自分のデータを取り出せるようにする(ロックイン懸念の払拭、GDPR対応)。
- 完全削除(論理削除と物理削除): 解約時・削除要求時のデータ削除フローを確立。バックアップ内のデータの扱いも明文化。
- スキーマ移行は後方互換に: Expand-Contract パターン(列追加 → 両書き → 移行 → 旧列削除)でダウンタイムなしのマイグレーション。
- 分析用データの分離: 本番DBで重い集計をせず、DWH(BigQuery、Snowflake、Redshift等)にETL/ELTする。
6. API設計
- APIファースト: UIも公開APIと同じAPIを使うと、品質と一貫性が保てる。
- 一貫した設計規約: REST または GraphQL。命名規則、エラー形式(RFC 9457 Problem Details 等)、ページネーション方式を統一。
- バージョニング: URLパス(
/v1/)またはヘッダーで管理。破壊的変更には十分な移行期間と告知を。 - 冪等性: 作成・決済系APIは
Idempotency-Keyヘッダーで重複実行を防ぐ。 - レートリミット: テナント/APIキー単位で制限し、
RateLimit-*ヘッダーで残量を返す。 - Webhook:
- 署名(HMAC)を付けて検証可能に
- リトライ(指数バックオフ)と配信履歴の確認画面
- イベントIDで重複排除できるようにする
- ドキュメント: OpenAPI 仕様から自動生成し、常に最新に保つ。SDK の提供も検討。
- カーソルベースのページネーション: 大量データでもオフセット方式より安定して高速。
7. スケーラビリティとパフォーマンス
- キャッシュ戦略: CDN(静的アセット)、アプリケーションキャッシュ(Redis)、HTTPキャッシュヘッダーを適切に使い分ける。キャッシュキーには必ずテナントIDを含める。
- DB最適化:
- 適切なインデックス(
tenant_idを複合インデックスの先頭に) - N+1クエリの排除
- コネクションプーリング(PgBouncer 等)
- 読み取りレプリカの活用
- 適切なインデックス(
- オートスケーリング: CPU・メモリ・キュー長などのメトリクスに応じて自動スケール。
- 重い処理のバックグラウンド化: レスポンスタイムに影響する処理はジョブ化。
- 負荷試験: k6、Locust、Gatling などで定期的に限界値を把握する。
- フロントエンド性能: Core Web Vitals(LCP、INP、CLS)を計測・改善。コード分割、遅延読み込み。
8. 可用性と信頼性
- SLO / SLI / エラーバジェット: 可用性やレイテンシの目標(例: 99.9%)を定め、エラーバジェットで開発速度と安定性のバランスを取る。
- SLA: 顧客向けの契約上の保証はSLOより緩めに設定する。
- 冗長構成: 複数AZ配置、DBのフェイルオーバー。
- グレースフルデグラデーション: 外部サービス障害時も主要機能は動くように。サーキットブレーカー、タイムアウト、リトライ(ジッター付き)。
- 単一障害点の排除: 外部依存(決済、メール、認証基盤)の障害影響を洗い出す。
- ステータスページ: 障害情報を顧客に透明に公開(Statuspage、Instatus 等)。
- ポストモーテム: 障害後は非難しない(Blameless)振り返りを行い、再発防止策を追跡する。
- 災害復旧(DR)計画: リージョン障害時の復旧手順を文書化し、定期的に訓練。
9. オブザーバビリティ(監視・ログ)
3本柱
| 種類 | 内容 | ツール例 |
|---|---|---|
| メトリクス | リクエスト数、エラー率、レイテンシ、リソース使用率 | Prometheus、Datadog、CloudWatch |
| ログ | 構造化ログ(JSON)、リクエストID・テナントID付き | Loki、Elasticsearch、Datadog Logs |
| トレース | 分散トレーシングでボトルネック特定 | OpenTelemetry、Jaeger、Honeycomb |
ベストプラクティス
- OpenTelemetry で計装を標準化: ベンダーロックインを避ける。
- RED / USE メソッド: Rate・Errors・Duration(サービス)、Utilization・Saturation・Errors(リソース)を監視。
- テナント単位で可視化: どの顧客が影響を受けているか即座に分かるようにする。
- アラートは症状ベースで: 「CPU高い」よりも「エラー率がSLOを脅かしている」でアラート。アラート疲れを防ぐ。
- ログに個人情報・シークレットを出さない: マスキングを徹底。
- エラートラッキング: Sentry 等でフロント・バックエンドの例外を集約。
- オンコール体制: ローテーション、エスカレーションルール、Runbook の整備。
10. CI/CDとリリース管理
- トランクベース開発: 短命ブランチ、頻繁なマージ。
- 自動テストのピラミッド: ユニット > 統合 > E2E。CIで全自動実行。
- 継続的デプロイ: mainへのマージで自動デプロイできる状態を目指す。
- 段階的リリース:
- フィーチャーフラグ(LaunchDarkly、Unleash、Flagsmith等)でデプロイとリリースを分離
- カナリアリリース / ブルーグリーンデプロイ
- 特定テナントへの先行公開(ベータプログラム)
- 即時ロールバック: ワンクリックで前バージョンに戻せる仕組み。
- 環境の一貫性: 開発・ステージング・本番をIaCとコンテナで揃える。
- プレビュー環境: PRごとに一時環境を立ち上げてレビュー。
- 変更履歴(Changelog)の公開: 顧客向けにリリースノートを提供。
11. 課金・サブスクリプション
- 課金基盤は専用サービスを利用: Stripe Billing、Chargebee、Paddle、Recurly など。自前実装は税計算・請求書・督促で非常に複雑になる。
- 価格モデルの選択:
- シート課金(ユーザー数)
- 従量課金(API呼び出し数、ストレージ、処理量など)
- 階層型プラン(Free / Pro / Enterprise)
- ハイブリッド(基本料+従量)
- プランと機能の分離: 機能の利用可否は「エンタイトルメント」として管理し、コードにプラン名をハードコードしない。
- 利用量メータリング: 正確で監査可能な使用量の集計。顧客がダッシュボードで確認できるように。
- トライアル設計: クレジットカード有無、期間、トライアル終了時の挙動を明確に。
- ダニング(督促)管理: 決済失敗時の自動リトライ、通知、猶予期間。
- プラン変更: アップグレード・ダウングレード時の日割り計算(プロレーション)。
- 税対応: 消費税・インボイス制度・VAT などは Stripe Tax 等で自動化。
- 解約フロー: 解約を不当に難しくしない(法規制の対象にもなりうる)。解約理由のヒアリングは有効。
12. オンボーディングとUX
- Time to Value を最短に: サインアップから最初の価値体験(Aha モーメント)までのステップを最小化。
- プログレッシブなオンボーディング: チェックリスト、空状態(Empty State)でのガイド、サンプルデータの用意。
- セルフサービス: 営業を介さずに登録・設定・課金・招待ができること(PLG:Product-Led Growth)。
- チーム招待を簡単に: 招待リンク、ドメインによる自動参加。
- アクセシビリティ: WCAG 2.2 AA 準拠を目指す。
- 国際化(i18n): 文字列の外部化、タイムゾーン・通貨・日付形式の対応を初期から考慮。
- プロダクト分析: Amplitude、Mixpanel、PostHog などでファネル・リテンションを計測。
- アプリ内フィードバック: 要望を集め、ロードマップに反映する仕組み。
13. コンプライアンスと法規制
| 規格・法令 | 概要 | 対象 |
|---|---|---|
| SOC 2 Type II | セキュリティ統制の第三者監査 | 米国・グローバル企業向け販売 |
| ISO/IEC 27001 | 情報セキュリティマネジメント | グローバル・日本企業向け |
| ISMAP | 日本政府のクラウドサービス評価制度 | 日本の官公庁向け |
| GDPR | EU一般データ保護規則 | EU居住者のデータを扱う場合 |
| 個人情報保護法(APPI) | 日本の個人情報保護 | 日本国内 |
| CCPA / CPRA | カリフォルニア州消費者プライバシー法 | 米国カリフォルニア |
| HIPAA | 医療情報保護 | 米国ヘルスケア |
| PCI DSS | カード情報保護 | カード情報を扱う場合(決済代行利用で範囲縮小可) |
ベストプラクティス
- コンプライアンス自動化ツール: Vanta、Drata、Secureframe などで証跡収集を自動化。
- プライバシー・バイ・デザイン: 設計段階から個人情報の最小化を考慮。
- データ所在地(データレジデンシー): 顧客の要件に応じてリージョンを選べる設計。
- DPA(データ処理契約)・サブプロセッサー一覧の公開。
- 利用規約・プライバシーポリシー: 専門家のレビューを受ける。
- トラストセンター: セキュリティ・コンプライアンス情報を公開するページを用意。
⚠️ 法規制の適用範囲や要件は事業内容・地域によって異なります。最終判断は法律の専門家にご相談ください。
14. カスタマーサクセスとサポート
- 主要指標の追跡:
- MRR / ARR(月次・年次経常収益)
- チャーンレート(顧客・収益)
- NRR(売上継続率。100%超が理想)
- LTV / CAC(顧客生涯価値 / 獲得コスト。3倍以上が目安)
- NPS / CSAT
- ヘルススコア: ログイン頻度・機能利用率などから解約リスクを予測。
- ナレッジベース: よくある質問・ドキュメントを充実させ、セルフ解決率を上げる。
- サポートチャネル: チャット、メール、プランに応じた専任担当。
- 管理者向けの代理ログイン(Impersonation): サポート時に顧客の画面を確認できる機能。必ず監査ログに記録し、顧客の同意を得る。
15. コスト最適化
- テナント単位のコスト把握: どの顧客・機能がインフラコストを消費しているか可視化し、価格設定に反映(ユニットエコノミクス)。
- リソースの適正化: 過剰プロビジョニングの見直し、オートスケールの活用。
- 割引の活用: リザーブドインスタンス、Savings Plans、スポットインスタンス(ワーカー向け)。
- ストレージのライフサイクル管理: 古いデータを低コストの階層へ自動移行。
- FinOps文化: コストタグ付け、予算アラート、定期的なコストレビュー。
- マネージドサービスの活用: 運用人件費を含めた総コスト(TCO)で判断する。
16. チェックリスト
ローンチ前(MVP)
- テナント分離が全レイヤーで強制されている
- 認証は実績あるサービスを利用し、MFAに対応している
- 全エンドポイントでサーバー側の認可チェックがある
- 通信・保存データが暗号化されている
- シークレットがコードに含まれていない
- 自動バックアップがあり、リストアを試した
- エラートラッキングと基本的な監視・アラートがある
- CI/CDで自動テスト・自動デプロイができる
- 利用規約・プライバシーポリシーがある
- 課金基盤が外部サービスで構築されている
成長期
- SLOを定義し、ステータスページを公開している
- フィーチャーフラグで段階的リリースができる
- 公開APIとドキュメント、Webhookを提供している
- 監査ログを顧客が閲覧できる
- 負荷試験で限界値を把握している
- プロダクト分析でファネル・リテンションを計測している
- インシデント対応手順とオンコール体制がある
エンタープライズ対応
- SAML / OIDC SSO、SCIM に対応している
- SOC 2 / ISO 27001 などの認証を取得している
- データレジデンシーの選択肢がある
- 専用環境(サイロ)オプションがある
- DPA・サブプロセッサー一覧・トラストセンターを公開している
- ペネトレーションテストを定期実施している
- 災害復旧計画を文書化し、訓練している