Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
supabaseとSvelteKitで作るバックエンドレスなサーバーレスWebサイト / Cr...
Search
shiro seike
PRO
November 18, 2023
Programming
3
4.4k
supabaseとSvelteKitで作るバックエンドレスなサーバーレスWebサイト / Creating with supabase and SvelteKit Backend-less serverless websites
フロントエンドカンファレンス沖縄2023
https://frontend-conf.okinawa.jp
shiro seike
PRO
November 18, 2023
Tweet
Share
More Decks by shiro seike
See All by shiro seike
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
3
780
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
370
地方のPHPerもクラウドを使う理由 ~コストの最適化とチームに向き合う~ / Why even local PHPers use the cloud ~optimize costs and face the team
seike460
PRO
0
64
OpenTelemetryで始めるベンダーフリーなobservability / Vendor-free observability starting with OpenTelemetry
seike460
PRO
0
170
AIコーディングの本質は“コード“ではなく“構造“だった / The essence of AI coding is not “code” but "structure
seike460
PRO
2
1.1k
OpenTelemetryを活用したObservability入門 / Introduction to Observability with OpenTelemetry
seike460
PRO
1
650
Amazon Q Developer Proで効率化するAPI開発入門
seike460
PRO
0
310
実行委員長が振り返るBacklogWorldの裏側と運営Backlog術 / The chairperson of the executive committee looks back on the backstage of BacklogWorld and the art of managing Backlog.
seike460
PRO
0
4
Amazon Aurora DSQLパフォーマンスチェック / Amazon Aurora DSQL Performance Check
seike460
PRO
0
14
Other Decks in Programming
See All in Programming
MDN Web Docs に日本語翻訳でコントリビュートしたくなる
ohmori_yusuke
1
130
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
19k
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
300
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
940
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
540
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
260
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
240
生成AI時代のコンポーネントライブラリの作り方
touyou
1
240
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
140
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
230
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
700
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
230
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Six Lessons from altMBA
skipperchong
28
3.9k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
How to Ace a Technical Interview
jacobian
278
23k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Optimizing for Happiness
mojombo
379
70k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Transcript
supabase SvelteKit Web 2023 2 0 23 . 11 .
18 @seike 4 60 1
自己 @seike 46 0 - - @seike 46 0 -
AWS Community Builder Serverless - Fusic - / 門 - / - - PHP - JAWS Days AWS Devday - Serverless Days Tokyo - - 大 工 子工 - PHP - 2
Agenda 1 .Svelte 2 .SvelteKit 3 . 4 .supabase 5
.supabase x SvelteKit 6 . 3
01 Svelte
Svelte JavaScript Svelte Svelte 言 Write less code No virtual
DOM DOM Truly reactive 自 Hooks 5
Write less code - Svelte 6 <script> let a =
1 ; let b = 2 ; </script> <input type="number" bind:value={a}> <input type="number" bind:value={b}> <p>{a} + {b} = {a + b}</p> let State bind 行 方 築 行 [a] input p [a]
Write less code + Truly reactive 7 <script> let a
= 1 ; let b = 2 ; </script> <input type="number" bind:value={a}> <input type="number" bind:value={b}> <p>{a} + {b} = {a + b}</p> Svelte ⾒
TEMPLATE SYNTAX 8 {#if porridge.temperature > 1 00 } <p>too
hot!</p> {:else if 8 0 > porridge.temperature} <p>too cold!</p> {:else} <p>just right!</p> {/if} {#each items as item} <li>{item.name} x {item.qty}</li> {/each} {#await promise} <p>waiting for the promise to resolve...</p> {:then value} <p>The value is {value}</p> {:catch error} <p>Something went wrong: {error.message}</p> {/await} {#key value} <div transition:fade>{value}</div> {/key} {#if }... {:else if } {/if} {#each as name, index} ... {/each} {#await }... {:then name}... {:catch name} … {/await} {#key }... {/key}
Props Props export 用 Props 用 生 9 Counter.svelte App.svelte
Store 10
Store writable 用 Store 用 subscribe 火 用 update set
用 Store 11
Component Hooks onMount DOM beforeUpdate state afterUpdate onDestroy 12
No virtual DOM Virtual DOM Dom 行 Virtual DOM 用
生 Svelte DOM 用 行 行 13
krausest React Vue 比 Svelte 14 https://krausest.github.io/js-framework-benchmark/current.html
02 SvelteKit
SvelteKit Svelte Vite Rollup 用 っ URL っ (SSR)
生 (SSG) 高 SEO っ っ 16
▪ϧʔςΟϯάʢRoutingʣ URLͱͦΕʹରԠ͢Δίϯςϯπͷؔ࿈͚ ▪σʔλͷಡΈࠐΈʢLoading Dataʣ ϖʔδίϯϙʔωϯτ͕ϩʔυ͞ΕΔࡍʹඞཁͳσʔλΛऔಘ ▪ϑΥʔϜΞΫγϣϯʢForm Actionsʣ ϑΥʔϜͷૹ৴࣌ʹαʔόʔଆͰߦ͏ॲཧ ▪ϖʔδΦϓγϣϯʢPage Optionsʣ
ݸʑͷϖʔδʹؔ࿈͢Δઃఆಈ࡞Λࢦఆ͢Δ ▪εςʔτཧʢState Managementʣ ΞϓϦέʔγϣϯͷঢ়ଶΛҰݩతʹཧ 17
Routing 18 src/routes/+page.svelte -> / <h 1 >Hello and welcome
to my site!</h 1 > <a href="/about">About my site</a> src/routes/about/+page.svelte -> /about <h 1 >About this site</h 1 > <p>TODO...</p> <a href= /">Home</a> src/routes/blog/[slug]/+page.svelte -> blog/hoge <script> /** @type {import('./$types').PageData} */ export let data; </script> <h 1 >{data.title}</h 1 > <div>{@html data.content}</div> SvelteKit 用 src/routes URL +error.svelte +layout.svelte API +server.js URL
Loading data 19 src/routes/blog/[slug]/+page.js /** @type {import('./$types').PageLoad} */ export function
load({ params }) { return { post: { title: `Title for ${params.slug} goes here`, content: `Content for ${params.slug} goes here` } }; } src/routes/blog/[slug]/+page.svelte <script> /** @type {import('./$types').PageData} */ export let data; </script> <h 1 >{data.post.title}</h 1 > <div>{@html data.post.content}</div> +page.svelte load +page.js load page data 用 Layout data +page.server.js cookies headers
Form actions 20 src/routes/login/+page.server.js /** @type {import('./$types').Actions} */ export const
actions = { default: async (event) => { // TODO log the user in } }; src/routes/login/+page.svelte <form method="POST"> <label> Email <input name="email" type="email"> </label> <label> Password <input name="password" type="password"> </label> <button>Log in</button> </form> +page.server.js actions <form> 用 POST 築 築 ⾒ / 築 login -> ?/login register -> ?/register
Page options 21 +page.js/+page.server.js/+server.js export const prerender = true; +page.js
export const ssr = true; っ 生 HTML 生 生 っ 生 SSR 生 示
State management 22 +page.server.js let user; /** @type {import('./$types').Actions} */
export const actions = { default: async ({ request }) => { const data = await request.formData(); // NEVER DO THIS! user = { name: data.get( ‘ name'), embarrassingSecret: data.get( ‘ secret') }; } } っ state user っload 用 っcontext store
03
- API - - API 用 - - DB 用
sqlite - - - - っ 欠 -> 身 築 or 24
非 一 一夕 身
Point BaaS
04 Supabase
supabase っPostgreSQL supabase PostgreSQL っ っ Google GitHub Facebook っ
自 API SQL RESTful API 自 PostgREST 用 っ 行 っ 一 自 行 っ GitHub 用 -> EC 2 28
Client 生 supabase Client URL KEY anonkey KEY anonkey CRUD
29 PUBLIC_SUPABASE_URL PUBLIC_SUPABASE_KEY
Anonkey Key anon Table CRUD 一方 人 人 30
Row Level Security PostgreSQL 用 row SQL 人 見
Row Level Security DB 31 supabase Row Level Security Firebase 比 @dshukertjr https://qiita.com/dshukertjr/items/ 0 5 372 4 367 fda 267 8 f 2 41
SQL 行 行 SQL Editor 用 32
SQL Editor SQL 行 行 SQL Editor 用 33
34 API from 行 select insert update delete 用 行
match like in 稿 行 order limit 用 ORM 用
Google GitHub Kakao Spotify 日 35
Storage API Amazon S 3 Storage 用 用 36
Edge Functions 用 Deno TypeScript WASM 37
金 Free 2 用 人目 $25 用 用 38
05 supabase X SvelteKit
SvelteKit supabase ⾒ SQL ⾒ Model Model 用 SQL SQL
行 手 SvelteKit supabase 自 API 生 40
UI supabase SvelteKit ⾒ UI UI subscribe
⾒ Web 41
SvelteKit 用 Vercel supabase 用 supabase SvelteKit
42
⾒ Supabase SvelteKit 用 用 Supabase
用 RowLevel RDBMS 一 43
文 っFree Free 人 用 PoC 用 用
2 ⾒ 用 ⾒ PRO 用 用 PRO っ 一方 手 自 Amazon RDS 用 44
方 https://github.com/supabase-community/svelte-kanban .env.example .env Rename 自 supabase URL anon_key SvelteKit
supabase ⾒ 方 45
Adapter svelte.config.js 用 @sveltejs/adapter-auto 自 Adapter 46
47
48
Sveltekit x Supabase x Skelton 49 SvelteKit supabase ⾒ Svelte
UI Skelton 用 ⾒ 自
方 SQL 人 力 SQL 人 GUI API 身 supabase
50
07
52 SvelteKit Point 1 supabase Point 2 SvelteKit X supabase
Point 3 SvelteKit X supabase Point 4
Thank You We are Hiring ! https://recruit.fusic.co.jp/