新潟WEBアプリケーション勉強会 Vol.1でFreshについて話した資料です。 https://steeq.connpass.com/event/254066/
FreshThe next-gen web framework.@circled92022-07-201
View Slide
About MeদҪ ਖ਼ࢤMatsui Masashi@circled9Frontend Engineerwater-cell inc.2
ۙگ• ϦϞʔτͰՈ͔Βग़ͯͳ͍• ௨ۈ͕ΘΓʹຖࢄาͯͨ͠Β૫ͤͨ• ମॏ6kgݮɺෲғ8cmݮʢࣾൺʣ• Ͱ݈߁அͻ͔͔ͬͬͨ• ݁͠ੴʢnͿΓ2ճ......ʣ• ࠓΞϧίʔϧ߇͑·͢3
ࠓ͢͜ͱ• deno• CSR, SSR• Fresh4
͡Ίʹ• ࠓdenoͷWebϑϨʔϜϫʔΫͷFreshͷհΛ͠·͢ɻ• ͱ͍͏ͷΛΰʔϧʹͯ͠ɺͦͷपลͷΛ͍͖ͯ͠·͢ɻ• ͳͷͰFreshࣗମͷগͳΊͰ͢ɺ͝ΊΜͳ͍͞ɻ5
deno6
......ͷલʹ7
Node.js8
Node.js• JavaScript͕ಈ͘ϥϯλΠϜ• αʔόʔαΠυͷ࣮ߦڥͱ͚ͯͩ͠Ͱͳ͘ɺϑϩϯτΤϯυͷπʔϧͱͯ͠ΘΕΔ• ݱࡏͷ࠷৽൛18.6.09
deno10
deno• JavaScriptͱTypeScript͕ಈ͘ϥϯλΠϜ• Node.jsͷ࡞ऀ ( Ryan Dahl ) ͕࡞ͬͨ• ݱࡏͷ࠷৽൛1.23.4$ deno --versiondeno 1.23.4 (release, aarch64-apple-darwin)v8 10.4.132.8typescript 4.7.411
deno• Webඪ४ͷػೳΛαϙʔτ͍ͯ͠Δ• fetchͱ͔• Secure by default• ໌ࣔతʹڐՄ͠ͳ͍ͱϑΝΠϧͷಡΈॻ͖ͳͲͷػೳ͕͑ͳ͍12
deno• ֤छπʔϧdenoࣗମ͕ఏڙ͍ͯ͠Δ• lint, fmt, test• όϯυϧͯ͠୯ಠͷJavaScriptϑΝΠϧʹ͢Δ͜ͱͰ͖Δ• ϒϥβ͚ͷόϯυϥʔͳ͍• ͳͷͰϒϥβ͚ʹesbuildͳͲΛ͏13
CSR, SSR14
CSR, SSR• ϨϯμϦϯάͷํ๏ͷݺͼํ• ͦΕͧΕҎԼͷ಄จࣈΛऔ͍ͬͯΔ• Client Side Rendering• Server Side Rendering• ଞʹSSGͱISR͕͋Δ͕͜͜ͰׂѪ• Static Site Generation• Incremental Static Regeneration15
CSR• ΫϥΠΞϯτଆͰը໘ΛϨϯμʔ͢Δ• αʔόʔ੩తͳHTMLJSΛ৴͢Δ͚ͩ• HTMLʹۭͷdiv͚͕ͩఆٛ͞Ε͍ͯΔ͜ͱ͕ଟ͍16
SSR• αʔόʔଆͰHTMLΛϨϯμʔͯ͠ΫϥΠΞϯτʹ৴͢Δ• JS͕࣮ߦͰ͖ͳ͍ΫϩʔϥʔʹରԠͰ͖Δ• ͨͩͷHTMLʹͳΔͷͰΫϥΠΞϯτଆͰhydrateΛߦ͏17
hydrate• ਫͰ͢తͳҙຯɺଟ• αʔόʔ͕ੜͨ͠HTMLΠϕϯτͳͲ͕ઃఆ͞Ε͍ͯͳ͍• hydrate͢Δ͜ͱͰΫϦοΫͳͲͷΠϕϯτͳͲ͕ઃఆ͞ΕΔ18
͜Μͳײ͡// ࡶͳΧϯλʔconst Counter = () => {const [count, setCount] = useState(0);const plus = () => setCount(count + 1);const minus = () => setCount(count - 1);return ({count}+-);};0+-19
Fresh20
Fresh• denoͷWebϑϨʔϜϫʔΫ• denoͷެࣜϒϩάͰΘΕ͍ͯΔ• ࠷ۙ1.0ʹͳͬͨ21
Fresh• ΤοδαʔόʔͰͷSSRΛఆ͍ͯ͠Δ• PreactͰϨϯμϦϯάΛߦ͏• Island ArchitectureΛ࠾༻͍ͯ͠Δ22
Preact23
Preact• Fast 3kB alternative to React with the same modern API• ↑ ެࣜΑΓҾ༻• ܰྔ൛React• hooksͱ͔ͪΌΜͱ͑Δ24
Island Architecture25
Island Architecture• ը໘ͷཁૉΛౡʹݟཱͯͨΞʔΩςΫνϟ• ੩తͳཁૉ୯७ͳHTMLͱͯ͠ѻ͏• ΠϯλϥΫςΟϒͳཁૉ͚ͩhydrate͢Δ26
https://www.patterns.dev/posts/islands-architecture/
FreshͷϝϦοτɾσϝϦοτ• ͳΜ͔͠ΌΔ28
ऴྃ29