Skip to content

NuxSaaS におけるベンダーロックインの排除

はじめに

NuxSaaS はベンダーロックインを避けることに強く重点を置いて設計されています。これにより、SaaS アプリケーションを特定のベンダーの独自サービスや API に縛られることなく、さまざまなクラウドプロバイダーや環境でデプロイ、移行、運用できます。本ドキュメントでは、NuxSaaS がどのようにベンダーロックインを回避しているか、そしてなぜそれがプロジェクトの柔軟性と長期的な運用に重要なのかを説明します。

NuxSaaS がベンダーロックインを回避する方法

1. 環境変数による設定

  • すべての重要なサービスエンドポイント(データベース、キャッシュ、メールなど)は、ハードコーディングではなく環境変数で設定します。
  • 設定可能な変数の一覧は .env.example を参照してください。
    • NUXT_NITRO_PRESET:Node.js サーバーと Cloudflare Workers の切り替え
    • NUXT_CF_HYPERDRIVE_ID:Cloudflare Workers 利用時に必要なデータベース接続文字列
    • NUXT_DATABASE_URL:Node.js サーバー利用時に必要なデータベース接続文字列
    • NUXT_REDIS_URL:Node.js サーバー利用時に必要なキャッシュバックエンド

このアプローチにより、インフラの構成要素(例:ローカル Postgres からサーバーレス Postgres への移行、Redis から他のキャッシュへの切り替えなど)を、コードを変更せずに環境変数の変更だけで簡単に入れ替えることができます。

2. プラガブルなデータベース・キャッシュドライバー

  • server/utils/drivers.ts ファイルがデータベースとキャッシュへのアクセスを抽象化しています。
  • データベースには標準の PostgreSQL ドライバー(pg)を使用し、接続文字列は実行環境(Node.js サーバーまたは Cloudflare Hyperdrive)に応じて動的に選択されます。
  • キャッシュには、デプロイプリセットに応じて Redis(ioredis 経由)またはキー・バリュー型ストア抽象化(hubKV)を利用します。

主なコード例:

ts
const getDatabaseUrl = () => {
  if (runtimeConfig.preset == 'node-server') {
    return runtimeConfig.databaseUrl
  } else {
    return hyperdrive?.connectionString || runtimeConfig.databaseUrl
  }
}

この仕組みにより、NuxSaaS を自分のサーバーでも Cloudflare Worker 上でも、データアクセスロジックを書き換えることなく実行できます。

ベンダーロックインを避ける理由

  • ポータビリティ:NuxSaaS を任意のクラウドプロバイダー、オンプレミス、ローカル開発・テスト環境など、どこでもデプロイできます。
  • コスト管理:価格やサービス品質の変化に応じて、簡単に他のプロバイダーへ移行できます。
  • 将来性:ベンダーがサービスを終了したり API を変更した場合でも、大規模なコード書き換えを避けられます。
  • コンプライアンス:データの保存・処理場所を選択できるため、データレジデンシーや法規制要件にも対応できます。
  • コミュニティとエコシステム:オープンスタンダードや一般的なライブラリを利用することで、コミュニティのサポートを受けやすく、特定ベンダーのロードマップに依存しません。