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
すぐ使える Cloudflare Workers!
Search
Kei Kamikawa
March 09, 2024
3.8k
15
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
すぐ使える Cloudflare Workers!
Kei Kamikawa
March 09, 2024
More Decks by Kei Kamikawa
See All by Kei Kamikawa
Claude Code で Astro blog を Pages から Workers へ移行してみた
codehex
0
310
オレを救った Cline を紹介する
codehex
17
18k
どこでも使える Cloudflare Workers!
codehex
6
1.4k
htmx is fun!
codehex
3
440
Go to Cloudflare Workers
codehex
8
2.5k
AI Gateway 使っているよ!
codehex
2
2.2k
日時処理の新スタンダード: Synchro によるタイムゾーン安全、楽々開発
codehex
1
2.7k
Cloudflare Workers は楽しい!
codehex
9
3.5k
gRPC Client on Cloudflare Workers
codehex
2
7.2k
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
690
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
470
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
Raft: Consensus for Rubyists
vanstee
141
7.6k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
sira's awesome portfolio website redesign presentation
elsirapls
0
300
Mind Mapping
helmedeiros
PRO
1
280
The agentic SEO stack - context over prompts
schlessera
0
840
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
490
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Transcript
͙͑͢Δ$MPVE fl BSF8PSLFSTʂ $MPVE fl BSF.FFUVQ0LJOBXB7PM
!DPEFIFY !$PEF)FY w /05")05&-Ͱಇ͍͍ͯ·͢ w 1P$Λ࡞ͬͯɺӡ༻·Ͱ͍࣋ͬͯ͘ w ࣗಈԽɺ"*ΠϯςάϨʔγϣϯ w ͓٬༷͚ɺ͚ࣾ
͙͢ʹָ͍͑ͯ͠ʂ
͙͢ʹָ͍͑ͯ͠ʂ w σϓϩΠ͢Ε͙͢ʹ͑Δʂ w ؆୯ͳ+BWB4DSJQUͷίʔυ͚ͩͰ͑Δʂ w ࢝ΊΔͨΊʹ֮͑Δ͜ͱ͕গͳ͍ʂ w ૣ͍ʂʂ
IUUQTTQFBLFSEFDLDPNDPEFIFYDMPVE fl BSFXPSLFSTIBMFTJJ
ΞϓϦέʔγϣϯͷ։ൃڥΛ͑Δ ίϯςφΛͬͨڥͱͷൺֱ
ίϯςφ࣌ͷ։ൃڥ
ίϯςφ࣌ͷ։ൃڥ w ։ൃڥΛ͑Δͷ໘͍͘͞ʂ w w
ίϯςφ࣌ͷ։ൃڥ w ։ൃڥΛ͑Δͷ໘͍͘͞ʂ w %PDLFS fi MFͷهड़ɺΞϓϦΛಈ͔ͨ͢Ίͷઃఆ ϑΝΠϧͷهड़ɺڥมͳͲ w
ίϯςφ࣌ͷ։ൃڥ w ։ൃڥΛ͑Δͷ໘͍͘͞ʂ w %PDLFS fi MFͷهड़ɺΞϓϦΛಈ͔ͨ͢Ίͷઃఆ ϑΝΠϧͷهड़ɺڥมͳͲ w %#ͩͬͨΓ2VFVFͩͬͨΓɺ$SPO+PCͳͲ
ΛϩʔΧϧͰ༻ҙ͢Δͷେม
None
֮͑Δ͜ͱ͕͍ͬͺ͍ʂʂ
$MPVE fl BSF8PSLFSTͷ߹
$MPVE fl BSF8PSLFSTͷ߹ w ։ൃڥςϯϓϨʔτΛͬͯηοτΞοϓՄೳ w ։ൃڥͱσϓϩΠڥͷဃ͕গͳ͍ w ϥϯλΠϜͷXPSLFSE044
IUUQTHJUIVCDPNDMPVE fl BSFXPSLFSE w ΠϯϑϥͷػೳXPSLFSEΛܦ༝ͯ͠ར༻Ͱ͖Δ
ΞϓϦέʔγϣϯͷ։ൃڥΛ͑Δ $ npx create-cloudflare my-app --framework hono \ --deploy false
ΞϓϦέʔγϣϯͷ։ൃڥΛ͑Δ $ tree my-app --gitignore my-app ├── README.md ├── package.json
├── src │ └── index.ts ├── tsconfig.json └── wrangler.toml
ΞϓϦέʔγϣϯͷ։ൃڥΛ͑Δ $ cd my-app && npm run dev $
curl http://localhost:8787 Hello Hono!
w XSBOHMFSUPNMʹσϓϩΠޙʹར༻͢ΔڥมΛॻ͘ w EFWWBSTʹϩʔΧϧͰར༻͍ͨ͠ڥมΛॻ͘ ڥมΛ͑Δ
ڥมΛ͑Δ $ echo "ENV = \"local\"" >> .dev.vars $
ls .dev.vars .dev.vars
name = "my-app" compatibility_date = "2023-01-01" [vars] ENV = "development"
ڥมΛ͑Δ XSBOHMFSUPNM
import { Hono } from "hono"; const app = new
Hono<{ Bindings: { ENV: string; }; }>(); app.get("/", (c) => c.text(c.env.ENV)); export default app; ڥมΛ͑Δ JOEFYUT
ڥมΛ͑Δ $ cd my-app && npm run dev $
curl http://localhost:8787 local
w XSBOHMFSίϚϯυΛར༻ͯ͠ϦιʔεΛ࡞ w ϦιʔεΛར༻͢ΔͨΊʹXSBOHMFSUPNMઃఆΛهड़ w $MPVE fl BSF8PSLFSTͰར༻Ͱ͖ΔϛυϧΣΞ جຊಉ͡
ϛυϧΣΞΛ͑Δ
ϛυϧΣΞΛ͑Δʢྫ,7ʣ $ npx wrangler kv:namespace create TEST_KV ⛅ wrangler 3.17.1
------------------- 🌀 Creating namespace with title "my-app-TEST_KV" ✨ Success! Add the following to your configuration file in your kv_namespaces array: { binding = "TEST_KV", id = "da56a0e3ee6641fabf26b726e60fa550" }
[[kv_namespaces]] binding = "TEST_KV" id = "da56a0e3ee6641fabf26b726e60fa550" XSBOHMFSUPNM ϛυϧΣΞΛ͑Δʢྫ,7ʣ
const app = new Hono<{ Bindings: { TEST_KV: KVNamespace }
}>(); app.get("/counter", async (c) => { const key = c.req.query()["key"] || "defaultKey"; const count = Number(await c.env.TEST_KV.get(key)); const count = !isNaN(value) ? value + 1 : 1; await c.env.TEST_KV.put(key, String(count)); return c.text(String(count)); }); export default app; JOEFYUT ϛυϧΣΞΛ͑Δʢྫ,7ʣ
$ curl http://localhost:8787/counter 1 ϛυϧΣΞΛ͑Δʢྫ,7ʣ
ͪΐͬͱͨ͠Ϣʔεέʔε /05")05&-ͷ߹
$034ͷϔομՃ
$034ͷϔομՃ
$034ͷϔομՃ
͍߹ΘͤͷϝλใՃ
w ΞϓϦ͔Β;FOEFTLͷ͍߹ΘͤϑΥʔϜͷ ಋઢ͕༻ҙ͞Ε͍ͯΔ w ϩάΠϯதͷͲͷ͓٬༷͔Βͷ͓͍߹Θ͔ͤ Ѳ͍ͨ͠ w ؔ࿈͢ΔใΓ͍ͨ
͍߹ΘͤͷϝλใՃ
͍߹ΘͤͷϝλใՃ
w ΞϓϦ͔Βͷಋઢશͯ$MPVE fl BSF8PSLFSTͷ 63-Λࢦఆ͢Δ w ϝλใ63-ΫΤϦύϥϝʔλʔʹηοτ͢Δ w 8PSLFS্ͰΫΤϦύϥϝʔλʔͱҰக͢Δ
νέοτϑΟʔϧυ൪߸ࠩ͠ସ͑Δ UG@ ͍߹ΘͤͷϝλใՃ
ϝϯςφϯεϞʔυ
ϝϯςφϯεϞʔυ IUUQTTQFBLFSEFDLDPNDPEFIFYHSQDDMJFOUPODMPVE fl BSFXPSLFST
$IBU(151SPYZ
w (15TͷΞΫγϣϯ͔Β/05")05&-"1*Λ ར༻͢ΔͨΊͷ1SPYZ w $IBU(150"VUIೝূΛఏڙ͍ͯ͠ΔͷͰ ϩάΠϯ͕Ͱ͖Ε/")"1*Λ͑Δ w "1*ͱ0"VUIαʔόʔಉ͡3PPU63-͡Όͳ͍ͱ
ར༻Ͱ͖ͳ੍͍ݶ͕͋ΔͨΊ $IBU(151SPYZ
$IBU(151SPYZ w BVUIPSJ[BUJPOͱUPLFOΛఏڙ w 4DPQF'JSFCBTF"VUIͰඞཁͳ ༰Λೖྗ͢Δ
$IBU(151SPYZ
%ZOBNJD-JOLT
w 'JSFCBTFͰఏڙ͞Ε͍ͯΔػೳ w %ZOBNJD-JOLTഇࢭ༧ఆ w ϢχόʔαϧϦϯΫͷ༷ʹԊͬͯ։ൃ͢Δඞ ཁ͕͋ͬͨ w ϦϯΫΛ։͘ͱɺରԠ͢ΔΞϓϦ͕ىಈ ͞Εɺͦͷը໘Λ։͘͜ͱ͕Ͱ͖Δ
w ͪΖΜϓϨϏϡʔը໘͋Δ %ZOBNJD-JOLT
%ZOBNJD-JOLT w ॖ63-Λൃߦ͢ΔΠϝʔδ w 63-ʹ͏จࣈྻ͕ඃΒͳ͍Α͏ʹ %VSBCMF0CKFDUTͷτϥϯβΫγϣϯΛར༻ w )POPΛͬͯɺϓϨϏϡʔը໘ͱࣝผࢠͷใΛؚ Ίͨ+40/ϑΝΠϧʢ"TTFU-JOL
fi MFʣΛฦ͢
ΧελϚΠζ ֎෦ͷσʔλετϨʔδΛ͏
ίϯγΣϧδϡϓϥοτϑΥʔϜ
֎෦ͷϩάج൫Λ͏ ($1$MPVE-PHHJOH
ʜͷલʹ-PH1VTIͷհ
-PH1VTI
w $MPVE fl BSFʹؔ࿈ͨ͠ϩάΛ࿈ܞͰ͖Δ ετϨʔδϩάΛૹΓ͚ͭΔػೳ w $MPVE fl BSF8PSLFSTͷ߹DPOTPMFMPHͷ
தΛ1VTIͰ͖Δ -PH1VTI
-PH1VTI
-PH1VTI
-PH1VTI
-PH1VTI
-PH1VTI
ࣗͰϩάΛૹΔ
w ͓ͦΒ͘།Ұͷऑ w $MPVE fl BSFͷΈͩͱϩάΛ୳͢ͷʹۤ࿑͢Δ w ͏ͪͷϢʔεέʔεͩͱ$MPVE-PHHJOHΛܦ༝ͯ͠ ૹΔํ͕͍҆
ࣗͰϩάΛૹΔ
2VFVFͰϩάΛૹ৴͢Δ
w ($1ͷ$MPVE-PHHJOHૹ৴͢Δ w ࠓͩͱ5BJM8PSLFSTΛར༻͢Δͷ͕Φεεϝ͔ 2VFVFͰϩάΛૹ৴͢Δ
2VFVFͰϩάΛૹ৴͢Δ w 4DPQFΛهड़ w $MPVE-PHHJOHͷ"1* ϦΫΤετ͢Δ
2VFVFͰϩάΛૹ৴͢Δ w -PHHFS$MBTT w ྻΛ࣋ͭϓϩύςΟ FOUSJFT w "1*ϋϯυϥͰ ͜ͷϝιουΛݺͼग़͢
2VFVFͰϩάΛૹ৴͢Δ w "1*ͷॲཧͷ࠷ޙʹ FOUSJFTΛΩϡʔʹૹ৴͢Δ w όοναΠζͷ্ݶ NFTTBHFT
2VFVFͰϩάΛૹ৴͢Δ w $POTVNFSͰϝοηʔδΛ ड৴͢Δ w $MPVE-PHHJOHૹ৴
֎෦ͷΩϡʔΛ͏ $MPVE5BTLTͷซ༻
8PSLFST2VFVF CFUB ͕ෆ҆ఆ
8PSLFST2VFVF͕ෆ҆ఆ ͨ·ʹΩϡʔ͕٧·Δ
8PSLFST2VFVF͕ෆ҆ఆ αʔόʔ͔ΒͷλΠϜΞτͳ͍
w $MPVE fl BSF8PSLFST্ʹඇಉظ͚ͷ ΤϯυϙΠϯτΛ࡞͢Δ w 8PSLFSTܦ༝Ͱ5BTLΛ࡞͢Δ w ࡞͞Εͨ5BTLΛͱʹ$MPVE5BTLTܦ༝Ͱ
ΤϯυϙΠϯτ͕ୟ͔ΕΔ $MPVE5BTLTΛ͏
$MPVE5BTLTΛ͏
͙͢ʹָ͍͑ͯ͠🔥
͙͢ʹָ͍͑ͯ͠🔥 w ։ൃͨ͠ΞϓϦΛ୭͔ʹͬͯΒ͏·Ͱͷ εςοϓ͕͘ͳͬͨ w ։ൃˠϦϦʔεˠϑΟʔυόοΫʢϧʔϓʣ w Γ͍ͨ͜ͱͷຊ࣭ʹूதͰָ͖͍ͯ͠ʂʂ