はじめに
「エンタープライズ企業に営業をかけたら、真っ先に聞かれたのがSAML SSOとSCIM対応の有無だった」——BtoB SaaSを作った経験がある方なら、一度はこの壁にぶつかったことがあるのではないでしょうか。
個人向けSaaSであればメール認証やGoogleログインだけで十分ですが、企業向けとなると話は別です。IdP(IDプロバイダ)経由のシングルサインオン、ユーザーのプロビジョニング自動化、監査ログの提出要求など、セキュリティ部門やIT部門から突きつけられる要件は決して軽くありません。これらを自前で実装しようとすると、それだけで数ヶ月かかることも珍しくないのです。
そんな課題を解決してくれるのが、今回紹介するSaaS Starter Kitです。BoxyHQが公開しているオープンソースのNext.jsボイラープレートで、エンタープライズ向けの認証・認可機能をあらかじめ組み込んだ状態からプロダクト開発をスタートできます。
SaaS Starter Kitとは
SaaS Starter Kitは、BoxyHQが開発・公開しているNext.js製のオープンソースSaaSボイラープレートです。公式には「The Open Source Next.js SaaS boilerplate for Enterprise SaaS app development」と紹介されており、エンタープライズ向けSaaSの立ち上げを前提に設計されています。
GitHub上では4.9k以上のスターを集めており、Apache 2.0ライセンスのもとで自由に利用できます。単なるログイン画面のテンプレートではなく、チーム管理・SSO・監査ログといった「BtoB SaaSに共通して必要になる機能」を一通り備えているのが最大の特徴です。
主な特徴
- SAML SSO対応 - Okta、Azure AD、Google Workspaceなど主要なIdPと連携できるシングルサインオン機能を標準搭載しています
- SCIM Directory Sync - IdP側のユーザー管理をSaaS側に自動同期し、入退社に伴うアカウント管理の手間を削減します
- チーム・権限管理 - チーム作成、メンバー招待、ロールベースのアクセス制御(RBAC)が最初から実装されています
- 監査ログ・Webhook - コンプライアンス要件に応えるための操作ログ記録や、外部システム連携用のWebhookを備えています
- Next.js + Prisma + TypeScript - モダンな技術スタックで構成されており、型安全に開発を進められます
インストール
まずはリポジトリをクローンして、依存パッケージをインストールします。
git clone https://github.com/boxyhq/saas-starter-kit.git
cd saas-starter-kit
npm install
次に環境変数ファイルを準備します。データベース接続情報や認証まわりの設定をここに記述します。
cp .env.example .env
PostgreSQLを利用するため、接続先のデータベースを用意したうえでPrismaのマイグレーションを実行します。
npx prisma db push
最後に開発サーバーを起動すれば、ローカル環境で動作を確認できます。
npm run dev
ブラウザでhttp://localhost:4002にアクセスすると、サインアップ画面が表示されます。
基本的な使い方
SaaS Starter Kitでは、チームの作成から招待までがすでにAPIとして実装されています。たとえば新規チームを作成するAPIエンドポイントは、以下のような形で呼び出せます。
// pages/api/teams/create.ts (簡略化した例)
import type { NextApiRequest, NextApiResponse } from "next";
import { getSession } from "next-auth/react";
import { createTeam } from "models/team";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
if (req.method !== "POST") {
return res.status(405).json({ error: "Method not allowed" });
}
const session = await getSession({ req });
if (!session) {
return res.status(401).json({ error: "Unauthorized" });
}
const { name } = req.body;
if (typeof name !== "string" || name.trim().length === 0) {
return res.status(400).json({ error: "Team name is required" });
}
const team = await createTeam({
userId: session.user.id,
name: name.trim(),
});
return res.status(201).json({ team });
}
ポイントは、getSessionでセッションを検証してからチーム作成処理を呼び出している点です。認証まわりの土台がすでに用意されているため、開発者はビジネスロジックの実装に集中できます。
SAML SSOを有効にする場合も、管理画面からIdPのメタデータを登録するだけで設定が完了します。コード側で個別にSAMLプロトコルを実装する必要はありません。
実践的なユースケース
エンタープライズ向けBtoB SaaSの立ち上げ
社内ツールをSaaS化して企業に販売するようなケースでは、導入初期からSSOやSCIMへの対応を求められることが多いです。SaaS Starter Kitを土台にすれば、これらの機能をゼロから実装する手間を省き、プロダクト固有の機能開発に早期から着手できます。
監査ログが必須の業界向けプロダクト
金融・医療・人事などコンプライアンス要件が厳しい業界向けにSaaSを提供する場合、誰がいつ何を操作したかを記録する監査ログは避けて通れません。SaaS Starter Kitには監査ログ機能が組み込まれているため、要件定義の段階から「ログをどう出力するか」を検討する時間を削減できます。
複数チーム・複数ロールを持つ管理画面の構築
社内の複数部署やクライアント企業ごとにチームを分けて管理したいケースでは、あらかじめ実装されたチーム管理・RBAC機能をベースに、権限設計だけをプロダクトに合わせてカスタマイズすることが可能です。
まとめ
SaaS Starter Kitは、SAML SSOやSCIM、監査ログといった「エンタープライズ企業から必ず聞かれる機能」を最初から備えたNext.js製のオープンソースボイラープレートです。BtoB SaaSの立ち上げにおいて、認証・認可まわりの実装コストを大幅に削減できる点が最大の魅力といえます。
個人向けSaaSのテンプレートは数多く存在しますが、エンタープライズ要件を見据えたプロダクトを検討しているなら、一度SaaS Starter KitのGitHubリポジトリを覗いてみる価値は十分にあるでしょう。まずはローカル環境でセットアップし、実際にチーム作成やSSO設定を試してみることをおすすめします。