作成日: 2023-5-4
更新日: 2023-9-28
VercelにNext.jsプロジェクトが存在していることを前提としています。
リポジトリのインポートやVercelへの登録方法はこちらの記事で解説しています。
Vercel Postgresの概要についてはこちらの記事で解説しています。
Vercel Postgresの料金や制限についてはこちらの記事で解説しています。
Vercelに登録済みのローカルリポジトリにVercel Postgresのパッケージをインストールします。
もし、ローカル上でVercelのパッケージをインストールしていない場合は、インストールしておくとこの後の作業が楽になります。
$ npm i @vercel/postgres
$ npm i -g vercel@latest
まずは、Vercelダッシュボードにログインしてください。
ログインしたらページ上部にあるstorageタブをクリックしてください。
(画像赤枠)
Postgresの右にあるCreateをクリックしてください。
表示されたモーダルでもPostgresを選択してContinueをクリックしてください。
Vercel Postgresを利用する上での注意点について同意します。
データベース名及びリージョンを設定して、Create & Continueをクリックしてください。
この時、functionやedgeのリージョンと同じもしくは近いリージョンを設定することでレイテンシーを低くすることができます。
選択肢の中に日本リージョンが存在していなかったため、シンガポールリージョンを選択しました。
自分のプロジェクトのfunctionのリージョンは、SettingsタブのFunctionsメニューで確認・変更することができます。
どの環境でDBのアクセスを許可するかや環境変数のプレフィックスを変更することができます。
VercelダッシュボードでのVercel PostgresのDB作成作業は以上です。
vercelコマンドを使って、OAuth連携しているアカウントでVercelにログインします。
$ vercel login --github
ローカルリポジトリとVercelプロジェクトの紐付けができていない場合は、以下コマンドで紐付けを行います。
$ vercel link
あとはターミナル上の指示に従って、紐付けを行ってください。
紐付けが終わったら、以下コマンドでVercel Postgresで作成したDBに接続するための環境変数の情報を取得できます。
$ vercel env pull .env.development.local
※VercelダッシュボードからもDBの接続に必要な環境変数を確認することはできます。
pages/apiディレクトリにtsファイルを作成します。
ファイル名はなんでも大丈夫です。
用途に合わせて命名してください。
今回は、公式ドキュメントに合わせて、pages/api/pets.tsを作成します。
(公式ドキュメントから引用)
// pages/api/pets.ts
import { db } from '@vercel/postgres';
import { NextApiRequest, NextApiResponse } from 'next';
export default async function handler(
request: NextApiRequest,
response: NextApiResponse,
) {
const client = await db.connect();
try {
await client.sql`CREATE TABLE Pets ( Name varchar(255), Owner varchar(255) );`;
const names = ['Fiona', 'Lucy'];
await client.sql`INSERT INTO Pets (Name, Owner) VALUES (${names[0]}, ${names[1]});`;
} catch (error) {
return response.status(500).json({ error });
}
const pets = await client.sql`SELECT * FROM Pets;`;
return response.status(200).json({ pets });
}
一見、sql文をハードコーディングしているように見えますが、@vercel/postgresを使うことでSQLインジェクションから防ぐことができます。
あとはローカルで/api/petsを実行すれば、テーブルの作成と作成したデータの取得を行うことができます。
Vercelダッシュボードでもテーブルが作成されていること及びデータが作成されていることを確認できます。
※参考
今回は@vercel/postgresのパッケージを使って、SQLの実行をしましたが、PrismaやKyselyといったORMを使うこともできます。