Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
supabaseとSvelteKitで作るバックエンドレスなサーバーレスWebサイト / Cr...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
shiro seike
PRO
November 18, 2023
Programming
4.8k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
supabaseとSvelteKitで作るバックエンドレスなサーバーレスWebサイト / Creating with supabase and SvelteKit Backend-less serverless websites
フロントエンドカンファレンス沖縄2023
https://frontend-conf.okinawa.jp
shiro seike
PRO
November 18, 2023
More Decks by shiro seike
See All by shiro seike
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.2k
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
180
Seeing Through Serverless: ADOT と CloudWatch Application Signals で実現する AWS Lambda のオブザーバビリティ(日本語版)/ Seeing Through Serverless (Japanese Edition)
seike460
PRO
1
47
モノレポの型は、そのままつながる 〜Hono RPCで型を素通しする開発体験〜 / Monorepo Types Connect As-Is: Passing Types Through with Hono RPC
seike460
PRO
1
55
OSSのコンセプトを知る / Understanding the Concept Behind an OSS
seike460
PRO
1
56
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
700
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
500
実行委員長目線で振り返る JAWS DAYS 2026 / JAWS DAYS 2026 from the Chair's Perspective
seike460
PRO
1
47
SLO から始める SRE / Starting SRE with SLO
seike460
PRO
1
140
Other Decks in Programming
See All in Programming
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
340
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
11
7.3k
No More NoSuchMethodError
exoego
1
120
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
5
1.2k
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
120
AI-Powered Domain-Driven Design
ziobrando
0
350
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
160
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
270
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.5k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
200
Event is what happens
moro
2
1.9k
ChromeでローカルLLM
ryu1013
0
170
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
410
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
620
What's in a price? How to price your products and services
michaelherold
247
13k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
290
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
290
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
We Have a Design System, Now What?
morganepeng
55
8.4k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
500
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
500
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/