これは、認証、支払いのための Stripe 統合、ログイン ユーザー用のダッシュボードをサポートするNext.jsを使用して SaaS アプリケーションを構築するためのスターター テンプレートです。
デモ: https://next-saas-start.vercel.app/
2020 年に、Next.js、Stripe、その他のツールを使用して SaaS アプリケーションを構築する方法を示す「React 2025」というコースを作成しました。
さて、もうすぐ 2025 年ですが、React 19 は、私が予測していなかったほど多くの素晴らしい新機能をもたらしました。このリポジトリは、最新の React および Next.js パターンのデモンストレーションです。これらのパターンにより、フォームの構築、データベースとの通信など、SaaS の構築におけるいくつかの一般的なタスクを大幅に簡素化できます。
たとえば、React には、インライン フォーム エラーや保留状態を処理するuseActionState
などのフックが組み込まれています。 React Server Actions は、クライアント側から API ルートを呼び出すために必要な多くの定型コードを置き換えることができます。そして最後に、React use
フックを Next.js と組み合わせることで、強力なuseUser()
フックを驚くほど簡単に構築できるようになります。
ルート レイアウトの Postgres データベースからユーザーを取得できますが、 Promise
待つことはできません。代わりに、 Promise
React コンテキスト プロバイダーに転送し、そこでそれを「ラップ解除」して、ストリーミングされるデータを待ちます。これは、データベースからデータをフェッチする簡単なコード (例: getUser()
) と、クライアント コンポーネントで使用できる React フック (例: useUser()
) の両方の長所を利用できることを意味します。
興味深い事実: このアプリケーションの UI の大部分は v0 で構築されています。このリポジトリについて詳しく知りたい場合は、こちらをご覧ください。
/
)/pricing
)git clone https://github.com/leerob/next-saas-starter
cd next-saas-starter
pnpm install
付属のセットアップ スクリプトを使用して、 .env
ファイルを作成します。
pnpm db:setup
次に、データベースの移行を実行し、デフォルトのユーザーとチームをデータベースにシードします。
pnpm db:migrate
pnpm db:seed
これにより、次のユーザーとチームが作成されます。
[email protected]
admin123
もちろん、 /sign-up
を通じて新しいユーザーを作成することもできます。
最後に、Next.js 開発サーバーを実行します。
pnpm dev
ブラウザで http://localhost:3000 を開いて、アプリの動作を確認します。
オプションで、CLI を通じてローカルで Stripe Webhook をリッスンし、サブスクリプション変更イベントを処理できます。
stripe listen --forward-to localhost:3000/api/stripe/webhook
Stripe 支払いをテストするには、次のテスト カードの詳細を使用します。
4242 4242 4242 4242
SaaS アプリケーションを実稼働環境にデプロイする準備ができたら、次の手順に従います。
https://yourdomain.com/api/stripe/webhook
) に設定します。checkout.session.completed
、 customer.subscription.updated
)。Vercel プロジェクト設定 (または展開中) で、必要な環境変数をすべて追加します。次のような実稼働環境の値を必ず更新してください。
BASE_URL
: これを運用ドメインに設定します。STRIPE_SECRET_KEY
: 運用環境用の Stripe 秘密キーを使用します。STRIPE_WEBHOOK_SECRET
: 手順 1 で作成した運用 Webhook の Webhook シークレットを使用します。POSTGRES_URL
: これを運用データベースの URL に設定します。AUTH_SECRET
: これをランダムな文字列に設定します。 openssl rand -base64 32
生成されます。 このテンプレートは学習リソースとして使用するために意図的に最小限に抑えられていますが、コミュニティには、よりフル機能を備えた他の有料バージョンがあります。