1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Supabase入門

1
Posted at

Supabase入門

動作環境・使用するツールや言語

  • Windows 11 Home 25H2
  • Node.js
  • Visual Studio Code
  • Supabase

はじめに

SupabaseはPostgresqlベースのバックエンドサービスです。
今回はテーブルにデータを登録してブラウザで表示できるところまで確認します。

手順

Supabaseのサイトでアカウントおよびプロジェクトを作成します。(この手順は省略)

テーブルおよびデータを下記の通り登録します。

id bigint
employee_no text
name text
department text
email text
hire_date date
created_at timestamptz
employee_no name department email hire_date
0001 山田太郎 営業 yamada@example.com 2023-04-01
0002 佐藤花子 開発 sato@example.com 2022-10-01

Authenticationからユーザを適当に登録します。
次にDatabase>Access Control>Polociesで
ポリシーを設定してテーブルをselectできるようにします。
RLSを有効にし(Table Editorで作成した場合はデフォルトで有効)、Create policyでselectに対してusingの中身をtrueにします。
image.png

supabaseでは現在テーブルを作成しただけではデフォルトではAPI公開されないので、
Integrations>APIでemployeesテーブルを公開します。
image.png

次にVS CodeのターミナルでNext.jsのプロジェクトを作成します。
Next.jsはNode.js上で動作するWebアプリのフレームワークです。
Node.jsは通常ブラウザでしか動かないJavaScriptをサーバサイドでも動かせるようにする実行環境です。
プロジェクト作成時は色々聞かれますが全部Yesにします。

npx create-next-app@latest employee-system

ローカルで開発サーバを起動します。カレントディレクトリはプロジェクトルート(employee-system)にしておかないとエラーになります。

npm run dev

http://localhost:3000
にアクセスしてNext.jsの初期画面が表示されればOKです。

ctrl+cで終了し、supabaseライブラリをインストールします。

npm install @supabase/supabase-js

なお@はNext.jsがプロジェクト作成時にtsconfig.jsonにエイリアスとして登録しており、
@supabase/supabase-jsはsrc/supabase/supabase-jsになります。

tsconfig.json
  "compilerOptions": {
    "paths": {
      "@/*": ["./src/*"]
    }
  }

プロジェクトルートの下に
.env.local
を作成し、中身にsupabaseのプロジェクトURLとPublishable Key(APIの公開キー)を記入します。
UIが変わるかもしれませんが、現在はダッシュボードのProject Overviewからそれぞれコピーできます。
なお.env.localはアプリケーションで使用する個人用の環境変数用のファイルです。process.env.変数名で呼び出せます。
Next.jsではブラウザから読める変数にはNEXT_PUBLIC_を付けます。
Next.jsでプロジェクトを作成すると最初から.gitignoreに.env*の行が入っているので.env.local自体はgithubには公開されませんが、ブラウザから読めるということは利用者側が見る手段があるということなので、公開したくない変数にはNEXT_PUBLIC_をつけるべきではありません。

.env.local
NEXT_PUBLIC_SUPABASE_URL=https://xxxxxxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=xxxxxxxxxxxxxxxx

次に、srcフォルダの下にlibフォルダを作成し、その中にsupabase.tsファイルを作成します。
中身は以下の通りです。
.env.localに記入したURLとAPI公開キーを使用して、さっきインストールしたsupabaseライブラリのcreateClient関数でsupabaseに接続するクライアント"supabase"を生成しています。なお「!」はtypescriptでnullやundefinedにならないことを保証するという意味です。DBのnot null制約のようなイメージでしょうか。

supabase.ts
import { createClient } from '@supabase/supabase-js'

export const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
)

ページを作成します。
src/app/page.tsxが初期表示のページですが、中身を書き換えます。
dataにselect * from employees;の結果が入るので、これを1行ずつmapで取り出してemployee_noとnameを表示しています。
data?の?はオプショナルチェーンというもので、dataがあれば取得し、nullなら何もしないというものです。

page.tsx
import { supabase } from "@/lib/supabase";

export default async function Home() {
  const { data, error } = await supabase
    .from("employees")
    .select("*");
  if (error) {
    return (
        <div>
            <h1>エラー</h1>
            <pre>{JSON.stringify(error, null, 2)}</pre>
        </div>
    )
  }
  return (
    <main>

      <h1>社員一覧</h1>

      <ul>
      {data?.map(employee => (

      <li key={employee.id}>

      {employee.employee_no}

      {employee.name}

      </li>

      ))}
      </ul>

    </main>
  )
}

再度開発サーバを起動し
http://localhost:3000/
にアクセスして、下記の通り表示されればOKです。

社員一覧
0001山田太郎
0002佐藤花子

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?