Slide 1

Slide 1 text

2िؒલʹϦϦʔε͞Εͨ͹͔Γͷ gRPCͷެࣜKotlinϥΠϒϥϦʹ͍ͭͯௐ΂ͯΈͨ KotlinѪ޷ձvol.21 (2020/04/27) @doyaaaaaken (Twitter/Github/Qiita) খࢁ ݈ଠ

Slide 2

Slide 2 text

ࣗݾ঺հ • ۀ຿Ͱ΍ͬͯΔ͜ͱ • smartroundͱ͍͏SaaSελʔτΞοϓͰϦʔυΤϯδχΞͯ͠·͢ • αʔόαΠυʢKotlin JVMʣͷଞɺϑϩϯτʢVueʣɾΠϯϑϥʢAWSʣ΋৮ͬͯ·͢ • ࠷ۙFigma΍GoogleAnalytics΋ΨγΨγ৮ͬͯ·͢ • OSSपΓͷ׆ಈ • Kotlin੡OSS΁ͷίϯτϦϏϡʔτ(ktor, Exposed, kotlintest, kohttp) • ktorͷυΩϡϝϯτ೔ຊޠ຋༁ϓϩδΣΫτͷ্ཱ͛ਓͰ͢ʢࢀՃऀৗ࣌ืूதʂʣ • kotlin-csvͱ͍͏ࣗ࡞OSS࡞ͬͯ·͢ʢStar਺80ͪΐ͍ɻPR΋͓଴ͪͯ͠·͢ʂʣ

Slide 3

Slide 3 text

smartroundʹ͍ͭͯ • ελʔτΞοϓͷࢿۚௐୡલޙͷۀ຿Λ ޮ཰Խ͢ΔαʔϏε܈Λఏڙ͍ͯ͠·͢ • LPɿhttps://jp.smartround.com/ • ࢿۚௐୡϚχϡΞϧ΋ແྉެ։தͰ͢ • KotlinJVMΛ͸͡Ίͱͨ͠Ϟμϯͳ ٕज़ελοΫͰ͢ • ٕज़঺հࢿྉɿ https://gitpitch.com/smartround/ smartround-tech-presentation • ktor͸όʔδϣϯ1.0.0-betaͷ࣌୅͔Βಋೖ • KotlinJVMɺVueJsॻ͖͍ͨΤϯδχΞɺ ઈࢍେืूதͰ͢ʂʂ

Slide 4

Slide 4 text

ࠓճͷൃදͷ͓୊ • gRPC͕ެࣜʹKotlinΛαϙʔτͨ݅͠ • 2िؒલͷ4/10ʹϦϦʔε͞ΕͨgRPCެࣜͷϥΠϒϥϦʢv0.1.1ʣʹ͍ͭͯ • GithubͷStar਺͕Θ͔ͣ2िͰ240௒͑ • ʰKotlin, meet gRPC: a new open-source project for modern appsʱ

Slide 5

Slide 5 text

gRPCެࣜυΩϡϝϯτ΋౰વରԠ • 4/16͔ΒKotlinʹؔ͢ΔQuickStart͕௥Ճ͞Ε·ͨ͠ • https://grpc.io/docs/quickstart/kotlin/

Slide 6

Slide 6 text

ͦ΋ͦ΋gRPCͱ͸ʁʢwikiతઆ໌ʣ • Google͕։ൃͨ͠OSSͷϦϞʔτϓϩγʔδϟίʔϧγεςϜ • RPCɿ͋ΔϓϩάϥϜ͔ΒผωοτϫʔΫʹ͋ΔϓϩάϥϜͷॲཧΛݺͼग़ͤΔ • Protocol Buffersͱ͍͏ݴޠͰΠϯλʔϑΣʔεΛఆٛ • ௨৴ʹ͸HTTP/2Λ༻͍Δ • ϝϦοτ • ݴޠඇґଘʢҟͳΔݴޠͷϚΠΫϩαʔϏεؒͷݺͼग़͠΍ɺϒϥ΢β㱺αʔό΁ͷݺͼग़͠ʹར༻Մೳʣ • ߴ଎ʢσʔλΛγϦΞϥΠζܰ͠ྔʹ͢Δ͜ͱͰ࣮ݱʣ • ΠϯλʔϑΣʔεͷมߋ͕༰қʹʢProtocol BuffersʹଇΔ͜ͱͰ࣮ݱʣ • ※ Mericari, AbemaTV, dowango౳Ͱ࠾༻͞Ε͍ͯΔ

Slide 7

Slide 7 text

Kotlinʹ͓͚Δࠓ·ͰͷgPRCϥΠϒϥϦͷঢ়گ • awsome-grpcͳΔυΩϡϝϯτʹ4ͭ঺հ͞Ε͍ͯ·ͨ͠ • https://github.com/grpc-ecosystem/awesome-grpc#lang-kotlin • ※ grpc-kotlinͱ͍͏ಉ໊ͷผϥΠϒϥϦ΋͋ΔͷͰ஫ҙʂʂʢࠓճͷൃද͸grpc/grpc-kotlinʣ • ※ Kotlin(JVM)͔ΒJavaͷϥΠϒϥϦ͕࢖͑Δ͜ͱ΋ߟ͑Δͱɺ ࠓ·Ͱ΋gRPCΛ࢖͑Δ͜ͱ͸࢖͑ͨΑ͏Ͱ͢

Slide 8

Slide 8 text

ࠓճग़ͨϥΠϒϥϦΛ࢖͏ϝϦοτ • μϯτπͰͰ͔͍ϝϦοτ ʰgRPC͕ެࣜϥΠϒϥϦͱͯ͠αϙʔτ͍ͯ͠Δ͜ͱʱ • ͦΕҎ֎ͩͱGoogle Cloudͷϒϩά͸ҎԼͷΑ͏ͳϝϦοτΛ঺հ • Kotlin੡ϥΠϒϥϦͳͷͰcoroutine΍Flow APIΛ࢖͍ඇಉظϓϩάϥϜ͕͖Ε͍ʹॻ͚Δ • GCPͷCloud RunͰ΋ར༻Ͱ͖Δ

Slide 9

Slide 9 text

͔͜͜Β͸αϯϓϧίʔυΛ งғؾϨϕϧͰݟͯΈ·͢

Slide 10

Slide 10 text

ࢀߟʹͨ͠υΩϡϝϯτ • gRPCެࣜυΩϡϝϯτͷҎԼ2ͭͷϖʔδ͕Θ͔Γ΍͍͢Ͱ͢ • QuickStart (https://grpc.io/docs/quickstart/kotlin/) • gRPC Basics - Kotlin/JVM (https://grpc.io/docs/tutorials/basic/kotlin/)

Slide 11

Slide 11 text

ࠓճऔΓ্͛Δαϯϓϧίʔυͷશମਤ ΫϥΠΞϯταΠυ ϓϩάϥϜ (Kotlin) αʔόαΠυ ϓϩάϥϜ (Kotlin) gPPC઀ଓ༻ ϓϩάϥϜ gPPC઀ଓ༻ ϓϩάϥϜ gRPCݺͼग़͠ ΫϥΠΞϯταΠυ αʔόαΠυ ΠϯλʔϑΣʔεఆٛ .protoϑΝΠϧ ʢProtocol Buffersʣ .protoϑΝΠϧ͔Βੜ੒ .protoϑΝΠϧ͔Βੜ੒

Slide 12

Slide 12 text

1. ΠϯλʔϑΣʔεఆٛʢ.protoʣϑΝΠϧʹ͍ͭͯ • ϝιουఆٛɺϦΫΤετɾϨεϙϯεܕఆٛͳͲ͕ Protocol BuffersʹΑΓهࡌ͞Ε͍ͯΔ

Slide 13

Slide 13 text

2. Protocol Buffers͔ΒϓϩάϥϜࣗಈੜ੒ʹ͍ͭͯ • Protocol BuffersίϯύΠϥprotocΛ༻͍.protoϑΝΠϧ͔ΒKotlinϓϩάϥϜ Λࣗಈੜ੒͢Δ ࣗಈੜ੒͞ΕͨίʔυͰ͢

Slide 14

Slide 14 text

3. αʔό͔ΒgRPCϓϩάϥϜΛར༻ • ࣗಈੜ੒͞ΕͨgPRCϓϩάϥϜΛ༻͍ͯ αʔόଆʹ͓͍ͯListen͢ΔgPRCΤϯυϙΠϯτΛఆ͓ٛͯ͘͠

Slide 15

Slide 15 text

4. ΫϥΠΞϯτ͔ΒgRPCϓϩάϥϜΛར༻ • ࣗಈੜ੒͞ΕͨgPRCϓϩάϥϜʹsuspend funϝιου͕͋ΔͷͰɺ ͦΕΛ࣮ߦ͢Δ͜ͱͰαʔό΁RPCͰ͖Δ

Slide 16

Slide 16 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ by @doyaaaaaken