🔨

T3 Stack で Supabase をセットアップする

2023/06/18に公開

T3 Stack で構築した Next.js 環境に Supabase をセットアップして DB を使える様にするまでにやったことのメモです。
T3 Stack も Supabase も最近使い始めたばかりなので詳しいことはあまりわかっていないので、曖昧な部分も多くありますが、とりあえず以下の手順でセットアップはできました。

今回使う技術について

T3 Stack

Next.js でタイプセーフにアプリを開発するためのセットです。
TypeScript, tRPC, Prisma, Tailwind CSS, NextAuth.js などが含まれていて、CLIでそれらのセットアップが完了します。

個人的にこの構成はとても好みに合っていて、もし小さく個人開発するのであればこの構造が一番良いなと思っています。
Web とアプリでフロントを二つ以上作るとかであれば tRPC の部分を GraphQL にします。

Supabase

Firebase の RDB 版(PostgreSQL)というイメージです。
いつもは Firebase を使うことが多いですが、タイプセーフということで Prisma を使う前提だと Supabase の方が良いっぽいので、こちらを使います。

T3 Stack をセットアップする

バージョンは以下で進めました

node v18.15.0
npm 9.5.0

以下のコマンドでプロジェクトを作成します。

npm create t3-app@latest

Auth は Supabase のものを使えばいいかなと思ったので、使うパッケージは prisma, tailwind, trpc に絞りました。
実行時の選択肢はこんな感じです。

インストールはこれで完了です。
あとは指示に合わせて起動して見ます

cd [プロジェクト名]
npx prisma db push
npm run dev

立ち上がりました。

Supabase をセットアップする

ログインして新しいプロジェクトを作ります。
詳細は省きますが、何も見なくても特に詰まることなく作ることができると思います。

途中で Database password というものを設定する必要がありますが、これは後で使うのでメモをしておきます。

.env に3つの値を設定する

これ を参考に .env に値を設定していきます。
僕は途中でエラーが出たりしましたが、結局以下の形に落ち着きました。

  • DATABASE_URL
    • Prisma Client から接続するために使う値
    • Settings > Database > Connection string の値に ?pgbouncer=true を足したもの
  • DIRECT_URL
    • マイグレーションなどで使う値
    • Settings > Database > Connection Pooling > Connection string の値
  • NEXT_PUBLIC_SUPABASE_ANON_KEY
    • Supabase に接続するためのAPIキー
    • Settings > API > Project API keys の乱数
.env
DATABASE_URL="postgresql://postgres:[Database passwordのパスワード]@db.[Reference ID].supabase.co:5432/postgres?pgbouncer=true"
DIRECT_URL="postgres://postgres:[Database passwordのパスワード]@db.[Reference ID].supabase.co:6543/postgres"
NEXT_PUBLIC_SUPABASE_ANON_KEY="長い乱数"

prisma.schema の記述を修正

以下の記述を追記すればクライアントからも CLI からも Supabase へのアクセスができる様になっていると思います。

schema.prisma
datasource db {
  provider          = "postgresql"
  url               = env("DATABASE_URL")
  directUrl         = env("DIRECT_URL")
}

まとめ

以上、T3 Stack で Supabase を接続するための設定方法でした。
接続に困っている人の役に立てば幸いです。

Discussion