はじめに
リアルタイムチャット機能の実装は、多くのWebアプリケーションで求められる機能ですが、WebSocketの管理やスケーラビリティの考慮など、ゼロから実装するとなかなか大変です。
今回は、**Supabase UI(shadcn CLI経由)+ Next.js** の組み合わせで、驚くほど簡単にリアルタイムチャットを実装する方法をご紹介します。
TL;DR
完成形のコードはこちらで公開しています:
https://github.com/tnakayama256/simple-chat
前提条件
この記事では、以下の準備が完了していることを前提とします:
- 公開URL(Project URL)
- 匿名キー(Anon Key)
- サービスキー(Service Role Key)
実装手順
1. Next.jsアプリケーションの作成
まずは新しいNext.jsプロジェクトを作成します:
pnpm create next-app@latest my-chat-app
cd my-chat-app2. 環境変数の設定
プロジェクトのルートに `.env.local` ファイルを作成し、Supabaseの認証情報を設定します:
NEXT_PUBLIC_SUPABASE_URL=your-project-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key**注意**: サービスロールキーは機密情報のため、クライアントサイドでは使用せず、サーバーサイドのみで使用してください。
3. shadcn/uiの初期化
shadcn/uiをプロジェクトに導入します:
pnpm dlx shadcn@latest initプロンプトが表示されたら、お好みの設定を選択してください。TypeScript、ESLint、Tailwind CSSの設定が自動的に行われます。
4. リアルタイムチャットコンポーネントのインストール
Supabase UIが提供するリアルタイムチャットコンポーネントをインストールします:
pnpm dlx shadcn@latest add https://supabase.com/ui/r/realtime-chat-nextjs.jsonこのコマンド一つで、リアルタイムチャットに必要なコンポーネント(RealtimeChat)とその依存関係がすべてインストールされます。
5. ページでの実装例
// app/chat/page.tsx
import { RealtimeChat } from '@/components/realtime-chat'
export default async function ProtectedPage() {
return (
<div className="flex h-svh w-full max-w-screen-sm mx-auto items-center justify-center gap-2">
<RealtimeChat
roomName="simple-chat-room"
username={data.user.email ?? ''}
/>
</div>
)
}実装のポイント
セキュリティの考慮
パフォーマンスの最適化
カスタマイズの余地
`RealtimeChat`コンポーネントは、以下のようなカスタマイズが可能です:
注意点
まとめ
Supabase UIとNext.jsの組み合わせにより、複雑なリアルタイムチャット機能をわずか数ステップで実装できます。この方法なら:
ぜひこの方法を試して、あなたのプロジェクトにリアルタイムチャット機能を追加してみてください。実装で困ったことがあれば、お気軽にご相談ください。(contact@tnakayama.com)