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
3.8k
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
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
540
実践サーバーレスパフォーマンスチューニング ~その実力に迫る~ / Practical Serverless Performance Tuning ~A Close Look at its Power~
seike460
PRO
2
260
PHPを書く理由、PHPを書いていて良い理由 / Reasons to write PHP and why it is good to write PHP
seike460
PRO
5
540
AWS CDKを用いたセキュアなCI/CDパイプラインの構築 / Build a secure CI/CD pipeline using AWS CDK
seike460
PRO
3
680
いまあるチームにフィットさせる Serverless そして Platform Engineeringへの挑戦 / Serverless Fits the Team You Have and Platform Engineering
seike460
PRO
2
1.8k
いまあるチームにフィットさせる Serverless / Serverless fits in with the team you have now.
seike460
PRO
2
160
地方こそサーバーレス! チームにフィットさせるサーバーレス / Rural areas are serverless! Serverless to Fit Your Team
seike460
PRO
1
100
AWS X-Rayを利用したサーバーレスのパフォーマンス分析 / Serverless performance analysis using AWS X-Ray
seike460
PRO
2
160
Cloudflare Workers x AWS Lambdaの組み合わせユースケース / Cloudflare Workers x AWS Lambda Combination Use Case
seike460
PRO
2
470
Other Decks in Programming
See All in Programming
プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット
d_endo
1
1k
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
390
offers_20241022_imakiire.pdf
imakurusu
2
360
CSC509 Lecture 08
javiergs
PRO
0
110
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
140
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
0
150
Vue.js学習の振り返り
hiro_xre
2
130
Macとオーディオ再生 2024/11/02
yusukeito
0
150
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
480
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
1
290
JaSST 24 九州:ワークショップ(は除く)実践!マインドマップを活用したソフトウェアテスト+活用事例
satohiroyuki
0
260
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
410
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
136
6.6k
YesSQL, Process and Tooling at Scale
rocio
167
14k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
How to train your dragon (web standard)
notwaldorf
88
5.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
107
49k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
27
1.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.6k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
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/