EdgeDB アダプター
リソース
セットアップ
インストール
npm install edgedb @auth/edgedb-adapter
npm install @edgedb/generate --save-dev
EdgeDB CLI がインストールされていることを確認してください。以下の手順に従うか、EdgeDB クイックスタートを読んで EdgeDB CLI をインストールし、プロジェクトを初期化してください。
環境変数
AUTH_EDGEDB_DSN="edgedb://edgedb:p4ssw0rd@10.0.0.1"
構成
import NextAuth from "next-auth"
import { EdgeDBAdapter } from "@auth/edgedb-adapter"
import { createClient } from "edgedb"
const client = createClient({ dsn: process.env.AUTH_EDGEDB_DSN })
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: EdgeDBAdapter(client),
providers: [],
})
EdgeDB CLI
Linux または macOS
curl --proto '=https' --tlsv1.2 -sSf https://sh.edgedb.com | sh
Windows
iwr https://ps1.edgedb.com -useb | iex
edgedb --version
コマンドで CLI が利用可能であることを確認します。Command not found
エラーが発生した場合は、edgedb
コマンドが利用可能になる前に、新しいターミナルウィンドウを開く必要がある場合があります。
CLI がインストールされたら、アプリケーションのルートディレクトリからプロジェクトを初期化します。一連のプロンプトが表示されます。
edgedb project init
このプロセスでは、EdgeDB インスタンスを起動し、現在のディレクトリと「リンク」します。そのディレクトリ内にいる限り、CLI コマンドとクライアントライブラリは、追加の構成なしに、リンクされたインスタンスに自動的に接続できます。
スキーマ
dbschema/default.esdl
に自動生成されたファイルの内容を以下で置き換えます。
module default {
type User {
property name -> str;
required property email -> str {
constraint exclusive;
}
property emailVerified -> datetime;
property image -> str;
multi link accounts := .<user[is Account];
multi link sessions := .<user[is Session];
property createdAt -> datetime {
default := datetime_current();
};
}
type Account {
required property userId := .user.id;
required property type -> str;
required property provider -> str;
required property providerAccountId -> str {
constraint exclusive;
};
property refresh_token -> str;
property access_token -> str;
property expires_at -> int64;
property token_type -> str;
property scope -> str;
property id_token -> str;
property session_state -> str;
required link user -> User {
on target delete delete source;
};
property createdAt -> datetime {
default := datetime_current();
};
constraint exclusive on ((.provider, .providerAccountId))
}
type Session {
required property sessionToken -> str {
constraint exclusive;
}
required property userId := .user.id;
required property expires -> datetime;
required link user -> User {
on target delete delete source;
};
property createdAt -> datetime {
default := datetime_current();
};
}
type VerificationToken {
required property identifier -> str;
required property token -> str {
constraint exclusive;
}
required property expires -> datetime;
property createdAt -> datetime {
default := datetime_current();
};
constraint exclusive on ((.identifier, .token))
}
}
# Disable the application of access policies within access policies
# themselves. This behavior will become the default in EdgeDB 3.0.
# See: https://www.edgedb.com/docs/reference/ddl/access_policies#nonrecursive
using future nonrecursive_access_policies;
マイグレーション
- マイグレーションの作成
edgedb migration create
- マイグレーションの適用
edgedb migrate
EdgeDB マイグレーションの詳細については、マイグレーションのドキュメントをご覧ください。
生成
npx @edgedb/generate edgeql-js
これにより、クエリビルダーが生成され、コードファースト方式で TypeScript を使用して完全に型付けされた EdgeQL クエリを記述できるようになります。
const query = e.select(e.User, () => ({
id: true,
email: true,
emailVerified: true,
name: true,
image: true,
filter_single: { email: "johndoe@example.com" },
}))
return await query.run(client)
デプロイ
EdgeDB のデプロイ
まず、お好みのクラウドプロバイダーに EdgeDB インスタンスをデプロイします
- AWS
- Google Cloud
- Azure
- DigitalOcean
- Fly.io
- Docker (クラウドに依存しない)
インスタンスの DSN を見つける
DSN は接続文字列としても知られています。形式は edgedb://username:password@hostname:port
になります。これに関する正確な手順は、デプロイ先のクラウドプロバイダーによって異なります。
環境変数の設定
AUTH_EDGEDB_DSN=edgedb://johndoe:supersecure@myhost.com:420
マイグレーションの適用
DSN を使用して、リモートインスタンスに対してマイグレーションを適用します。
edgedb migrate --dsn <your-instance-dsn>
prebuild
スクリプトのセットアップ
次の prebuild
スクリプトを package.json
に追加します。ホスティングプロバイダーがビルドを初期化すると、このスクリプトがトリガーされ、クエリビルダーが生成されます。npx @edgedb/generate edgeql-js
コマンドは、EDGEDB_DSN
環境変数の値を読み取り、データベースに接続し、ホスティングプロバイダーがプロジェクトのビルドを開始する前にクエリビルダーを生成します。
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
+ "prebuild": "npx @edgedb/generate edgeql-js"
},