Slide 1

Slide 1 text

What is NestJS ? 2019.11.28 #nestjs_meetup Takuma HANATANI (@potato4d)

Slide 2

Slide 2 text

Takuma HANATANI (@potato4d) • Working at • Senior Front-End Engineer at LINE Corp. • CEO at ElevenBack LLC. • Contributions • Vue.js and React.js Japanese document maintainer • Contributed to NestJS for the first time this month • I — • User Interface, Serverless, Cloud Native

Slide 3

Slide 3 text

ΧϨϯμʔ΍ࣗಈԽʹΑͬͯձܭ؅ཧ͔Βղ์͞ΕΔΫϥ΢υʮ$BOEZʯϕʔλఏڙத IUUQTDBOEZBDDBNQBJHOCFUB

Slide 4

Slide 4 text

Topics 1. ͸͡Ίʹ 2. αʔόʔαΠυ Node.js ͷ՝୊ 3. ͳͥ NestJS ͳͷ͔ɻಛ௃ͱັྗ 4. αʔόʔαΠυ Node.js ͷੈքͰ NestJS ʹظ଴͞ΕΔ΋ͷ

Slide 5

Slide 5 text

Topics 1. ͸͡Ίʹ 2. αʔόʔαΠυ Node.js ͷ՝୊ 3. ͳͥ NestJS ͳͷ͔ɻಛ௃ͱັྗ 4. αʔόʔαΠυ Node.js ͷੈքͰ NestJS ʹظ଴͞ΕΔ΋ͷ

Slide 6

Slide 6 text

Q. NestJS ࢖ͬͨ͜ͱ͋Δʁ

Slide 7

Slide 7 text

NestJS Official website (https://nestjs.com/)

Slide 8

Slide 8 text

ࣄલΞϯέʔτ݁Ռ ࢓ࣄͰ࢖͍ͬͯΔ ਓ ྆ํͰ࢖͍ͬͯΔ ਓ झຯͰ࢖͍ͬͯΔ ਓ ࢖ͬͨ͜ͱ͕ͳ͍ ਓ

Slide 9

Slide 9 text

3ߦͰΘ͔Δ NestJS

Slide 10

Slide 10 text

NestJS ͬͯͲΜͳϑϨʔϜϫʔΫʁ • ७ਮͳΔ TypeScript ʹΑͬͯهड़͞Εͨ • DI ͷจ຺Λڧ͘ड͚ܧ͍ͩ • Opinionated Ͱ Progressive ͳϑϨʔϜϫʔΫ

Slide 11

Slide 11 text

Over 20k stars https://github.com/nestjs/nest

Slide 12

Slide 12 text

16.5k weekly downloads https://www.npmtrends.com/@nestjs/common

Slide 13

Slide 13 text

αʔόʔαΠυ Node.js ͸ Express ͚ͩ͡Ό͋ͳ͍

Slide 14

Slide 14 text

Topics 1. ͸͡Ίʹ 2. αʔόʔαΠυ Node.js ͷ՝୊ 3. ͳͥ NestJS ͳͷ͔ɻಛ௃ͱັྗ 4. αʔόʔαΠυ Node.js ͷੈքͰ NestJS ʹظ଴͞ΕΔ΋ͷ

Slide 15

Slide 15 text

Express Ұڧ͕ଓ͘৘੎

Slide 16

Slide 16 text

Express ࢖͏্Ͱͷ೰Έ • ബ͍ API ͷͭ΋ΓͰ࡞ͬͨ Req/Res Object ʹґଘͨ͠ີ݁߹ͳίʔυ • ୭΋࢖ͬͯͳ͍ express-generator • Ϧςϥγʔ͕௿͍ͱ console.log ͰϩΪϯάͯͨ͠Γ͢Δ • 100ਓډͨΒ100ਓҧ͏ΞʔΩςΫνϟʹͳΔࣗ༝౓ • ߴ೉қ౓Խ͢Δ։ൃϧʔϧɾΞʔΩςΫνϟͷ౷Ұ ϚΠΫϩϑϨʔϜϫʔΫʹඞਢͳઃܭ੹೚Λ୭΋ͱΕͣഁ୼͢Δ։ൃମ੍ ☠

Slide 17

Slide 17 text

“ࣗ෼Ҏ֎ͷ Express ͷίʔυ͸ಡΈͨ͘ͳ͍”

Slide 18

Slide 18 text

“ࣗ෼ͷੲͷ Express ͷίʔυ΋ಡΈͨ͘ͳ͍”

Slide 19

Slide 19 text

ͦ΋ͦ΋ͷؒҧ͍ • Express ͸ศརͳٕज़͕ͩɺͦΕ͚ͩΛ࢖͍ͬͯΕ͹ྑ͍Θ͚Ͱ͸ͳ͍ • ബ͍ͨΊखܰʹ࢖͑Δ͕ɺബ͍͔Βͱ͍ͬͯࡶͰྑ͍Θ͚Ͱ͸ͳ͍ • ബ͍(Less opinionated)ٕज़ʹ͸ബ͍͚ͩͷ੹೚͕൐͏ • ϑϨʔϜϫʔΫͷࢥ૝ʹ৐Βͳ͍ͳΒɺࣗ਎͕ࢥ૝Λ࣋ͭ΂͖Ͱ͋Δ • ߟ͑ͳͯ͘ྑ͍ͷͰ͸ͳ͘ɺ౰ࣄऀͱͯ͠ߟ͑ɺ఻͑Δඞཁ͕͋Δ • ࢥߟͱܒ໤ʹ੹೚Λ޿࣋ͯ͘ͳ͍৔߹ɺڱΊΔ͜ͱ͕ॏཁ • աڈͷϑϧελοΫϑϨʔϜϫʔΫ͸͜ΕʹΑͬͯࢥߟΛ࠷খԽͨ͠ • ܕʹ͸·ͬͨ։ൃͷ՝୊΋͋Γɺബ͍΋ͷ͕ٻΊΒΕΔ͜ͱ΋͋ͬͨ

Slide 20

Slide 20 text

ॏ͍ʁ

Slide 21

Slide 21 text

Topics 1. ͸͡Ίʹ 2. αʔόʔαΠυ Node.js ͷ՝୊ 3. ͳͥ NestJS ͳͷ͔ɻಛ௃ͱັྗ 4. αʔόʔαΠυ Node.js ͷੈքͰ NestJS ʹظ଴͞ΕΔ΋ͷ

Slide 22

Slide 22 text

NestJS ͬͯͲΜͳϑϨʔϜϫʔΫʁ • ७ਮͳΔ TypeScript ʹΑͬͯهड़͞Εͨ • DI ͷจ຺Λڧ͘ड͚ܧ͍ͩ • Opinionated Ͱ Progressive ͳϑϨʔϜϫʔΫ

Slide 23

Slide 23 text

NestJS ͸αʔόʔαΠυ Node.js ʹ டং Λ༩͑Δ

Slide 24

Slide 24 text

TypeScript NestJS Λࢧ͑Δ3ͭͷப %FQFOEFODZ *OKFDUJPO 0QJOJPOBUFE "SDIJUFDUVSF 1SPHSFTTJWF &DPTZTUFN

Slide 25

Slide 25 text

Dependency Injection • ΦϒδΣΫτಉ࢜(Ϋϥεಉ࢜)ͷґଘΛ֎෦͔Βઃఆ͢Δ͜ͱ • Dependency(ґଘΦϒδΣΫτ)ͷInjection(஫ೖ) • ΦϒδΣΫτಉ࢜ͷґଘΛ಺෦Ͱղܾ͠ͳ͍͜ͱʹΑͬͯɺςελϒϧ͔ͭ ൚༻ੑͷߴ͍ίʔυΛॻͨ͘ΊͷςΫχοΫ • DAO ͕ؔΘΔΦϒδΣΫτςετͮ͠Β͍໰୊ • ֎෦ API ͕ؔΘΔΦϒδΣΫτςετͮ͠Β͍໰୊ • ͦͯ͠ DI Λ͏·͘औΓѻ͏࢓૊ΈΛఏڙ͞Ε͍ͯΔ (DIίϯςφ) NestJSΛ࢖͏͜ͱͰʮࣗવͱґଘؔ܎Λҙࣝͨ͠ίʔυ͕࡞ΒΕΔʯΑ͏ʹ

Slide 26

Slide 26 text

Opinionated Architecture • DI Λલఏͱͨ͠ Service ͱͦΕΛར༻͢Δ Provider / Module • ൚༻తͳ Service ͱɺΞϓϦέʔγϣϯ޲͚ͷೖΓޱͷ Module • ࣗવͱϨΠϠͱϢʔεέʔεʹ͍ͭͯߟྀ͞ΕΔΑ͏ʹ • ؔ৺ྖҬʹ͍ͭͯ͸ըҰతͳղܾํ๏Λఏڙ • HTTPϨεϙϯεɾೝূɾόϦσʔλɾྫ֎ϕʔεͷҟৗܥ؅ཧɾϩά • ҰํͰଞͷϑϨʔϜϫʔΫʹ͸͋Δ͕ຊ࣭తͰͳ͍΋ͷ͸ແؔ৺ • ίΞʹ͸ RDB ΍ NoSQL ΁ͷػೳ͸ଘࡏ͠ͳ͍(௥Ճ͸Մೳ) ʮඞཁͳ΋ͷΛબ୒͢Δ͚ͩͰɺࣗવͱNestΒ͘͠ͳΔʯར఺͕͋Δ

Slide 27

Slide 27 text

Progressive Ecosystem • NestJS ͸ίΞʹ͸ͳ͍͕ΦϑΟγϟϧͷύοέʔδ͕େྔʹ͋Δ • σʔλετΞ: TypeORM / Sequalize / Mongoose • IDL / Server: GraphQL / gRPC • For starter: Nest CLI • Utilities: Swagger(Open API) / Compodoc / • ։ൃऀ͕ NestJS ʹίΞҎ֎ΛͲ͜·ͰٻΊΔ͔͸ఆٛͰ͖Δ • ϑϧελοΫͰ͸ͳ͘ɺελʔτ࣌ʹղܾ͞Ε͍ͯΔ՝୊͕ଟ͍͚ͩ جຊతͳΞʔΩςΫνϟ͕९क͞ΕͨதͰɺ࠷దͳπʔϧΛ૊Έସ͑ΒΕΔ

Slide 28

Slide 28 text

Topics 1. ͸͡Ίʹ 2. αʔόʔαΠυ Node.js ͷ՝୊ 3. ͳͥ NestJS ͳͷ͔ɻಛ௃ͱັྗ 4. αʔόʔαΠυ Node.js ͷੈքͰ NestJS ʹظ଴͞ΕΔ΋ͷ

Slide 29

Slide 29 text

ࢲݟͰ͢

Slide 30

Slide 30 text

αʔόʔαΠυ Node ͕ඞཁͳঢ়گʹ͍ͭͯ • ϓϥοτϑΥʔϜͷ໰୊ • Cloud Native ready ͳ૊৫Ͱ͸ͳ͘ FaaS ͕ར༻Ͱ͖ͳ͍ • ্ཱ͕ͪΓ͕ϔϏʔͳ΋ͷͷಈ࡞Λཁٻ͞ΕΔ • ։ൃϝϯόʔͷ՝୊ • JavaScript(TypeScript) ͕ୈҰݴޠͷϝϯόʔ͕த৺ • ͍ΘΏΔόοΫΤϯυͷઃܭʹ׳Ε͍ͯΔਓ͕͍Δ͔΋Θ͔Βͳ͍ • ٕज़ؒͷࠩҟΛٵऩ͍ͨ͠ • BFF ͰϑϩϯτΤϯυͱ͸ JSON ͰɺMicroServices ͱ͸ gRPC Ͱ

Slide 31

Slide 31 text

NestJS ͕͏·͘ڹ͘ϙΠϯτʹ͍ͭͯ • Opinionated ͳ Architecture ʹΑͬͯΈΜͳͰಉ͡౔୆ʹཱͯΔ • ໪࿦ NestJS ʹ͍ͭͯͷ஌͕ࣝ͋Δલఏ • ࠷ߴͷઃܭʹ͸ͳΒͳ͍͔΋͠Εͳ͍͕ɺ੺఺ʹͳΔ͜ͱΛ๷͛Δ • جຊ͸ʮWebʯʹؔ͢ΔྖҬʹͷΈؔ৺Λ࣋ͭ • DAO ΍ ORM ͕ίΞ͔Β֎Ε͍ͯΔͨΊɺݎ࿚ͳ͕Βٕज़Λബ͘ར༻͢ Δ͜ͱ͕Մೳ • ಛʹ BFF ͳͲόϦσʔλʔɾೝূج൫͕͔ͬ͠Γͯ͠ཉ͍͠Έ͍ͨͳ৔ ߹͸͕͜͜ޮ͍ͯ͘Δ

Slide 32

Slide 32 text

NestJS ΛΦϓγϣϯͷͻͱͭͱͯ͠஌Δ • NestJS ͕͍ͭͰ΋༗ޮͳΘ͚Ͱ͸ͳ͍ • 1ΤϯυϙΠϯτͷ؆୯ͳαϯϓϧʹ NestJS ͸ඞཁͳ͍ • ΋ͬͱϢʔεέʔεʹԊͬͨઃܭΛΞʔΩςΫτ͕͢Δ΂͖͔΋͠Εͳ͍ • Ͳ͏࢖͑Δͷ͔ɺ͋Δ͍͸࢖͑ͳ͍ͷ͔Λ஌͓ͬͯ͘͜ͱ͕େ੾ • ͦ΋ͦ΋ NestJS ͕Ͳ͏͍͏ػೳΛ༗͍ͯ͠Δͷ͔ • NestJS ͷΧόʔൣғ͸Ͳ͜·ͰͰɺͲͷΑ͏ʹར༻͞Ε͍ͯΔͷ͔ • Ͳ͏͍ͬͨ࣌ʹ NestJS ͕໾ཱͬͨͷ͔

Slide 33

Slide 33 text

Continue to main sessions… #nestjs_meetup

Slide 34

Slide 34 text

Ϣʔβʔάϧʔϓ͔Βͷ͓஌Βͤ

Slide 35

Slide 35 text

1. NestJS Λ͸͡ΊΔਓ͕͔᪴ͳ͍͚ͩͷ೔ຊޠࢿྉΛੜΈग़͢ 2. ݱঢ়ଘࡏ͠ͳ͍ࠃ಺Ͱͷʮݱ৔ͷφϚͷ੠ʯ͕ڞ༗Ͱ͖Δ৔Λͭ͘Δ 3. NestJS Λར༻͢΂͖ͱ͖ɾ͢΂͖Ͱͳ͍࣌ͷ൑அج४Λ૿΍͢ NestJS ͕ඞཁͳਓʹे෼ʹಧ͘·ͰΛαϙʔτ͢Δ

Slide 36

Slide 36 text

https://qiita.com/advent-calendar/2019/nestjs

Slide 37

Slide 37 text

https://nestjs.com/

Slide 38

Slide 38 text

https://discord.gg/qUdzdDH

Slide 39

Slide 39 text

https://nest-jp.connpass.com

Slide 40

Slide 40 text

NestJS JP Λ͓ئ͍͍ͨ͠·͢